1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.seasar.cubby.filter;
18
19 import static org.easymock.EasyMock.createMock;
20 import static org.easymock.EasyMock.eq;
21 import static org.easymock.EasyMock.expect;
22 import static org.easymock.EasyMock.isA;
23 import static org.easymock.EasyMock.replay;
24 import static org.easymock.EasyMock.verify;
25
26 import java.util.ArrayList;
27 import java.util.Collection;
28 import java.util.HashMap;
29 import java.util.List;
30 import java.util.Map;
31
32 import javax.servlet.http.HttpServletRequest;
33 import javax.servlet.http.HttpServletResponse;
34
35 import org.junit.After;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.seasar.cubby.CubbyConstants;
39 import org.seasar.cubby.action.ActionContext;
40 import org.seasar.cubby.action.ActionErrors;
41 import org.seasar.cubby.action.ActionResult;
42 import org.seasar.cubby.action.Direct;
43 import org.seasar.cubby.controller.RequestParser;
44 import org.seasar.cubby.controller.impl.DefaultRequestParser;
45 import org.seasar.cubby.mock.MockContainerProvider;
46 import org.seasar.cubby.plugin.PluginRegistry;
47 import org.seasar.cubby.plugins.BinderPlugin;
48 import org.seasar.cubby.routing.PathInfo;
49 import org.seasar.cubby.routing.Routing;
50 import org.seasar.cubby.spi.BeanDescProvider;
51 import org.seasar.cubby.spi.ContainerProvider;
52 import org.seasar.cubby.spi.RequestParserProvider;
53 import org.seasar.cubby.spi.beans.impl.DefaultBeanDescProvider;
54 import org.seasar.cubby.spi.container.Container;
55 import org.seasar.cubby.spi.container.LookupException;
56 import org.seasar.cubby.spi.impl.AbstractRequestParserProvider;
57
58 public class CubbyFilterProcessRequestTest {
59
60 private final PluginRegistry pluginRegistry = PluginRegistry.getInstance();
61
62 private CubbyFilter cubbyFilter = new CubbyFilter();
63
64 private Object action = new MockAction();
65
66 @Before
67 public void setupProvider() {
68 final BinderPlugin binderPlugin = new BinderPlugin();
69
70 final List<RequestParser> requestParsers = new ArrayList<RequestParser>();
71 requestParsers.add(new DefaultRequestParser());
72 binderPlugin.bind(RequestParserProvider.class).toInstance(
73 new AbstractRequestParserProvider() {
74
75 @Override
76 protected Collection<RequestParser> getRequestParsers() {
77 return requestParsers;
78 }
79
80 });
81 binderPlugin.bind(ContainerProvider.class).toInstance(
82 new MockContainerProvider(new Container() {
83
84 public <T> T lookup(Class<T> type) throws LookupException {
85 if (MockAction.class.equals(type)) {
86 return type.cast(action);
87 }
88 throw new LookupException();
89 }
90
91 }));
92 binderPlugin.bind(BeanDescProvider.class).toInstance(
93 new DefaultBeanDescProvider());
94
95 pluginRegistry.register(binderPlugin);
96 }
97
98 @After
99 public void teardownProvider() {
100 pluginRegistry.clear();
101 }
102
103 @Test
104 @SuppressWarnings("unchecked")
105 public void process() throws Exception {
106 Map<String, Object[]> parameterMap = new HashMap<String, Object[]>();
107 Routing routing = createMock(Routing.class);
108 expect(routing.getActionClass()).andReturn(
109 Class.class.cast(MockAction.class));
110 expect(routing.getActionMethod()).andReturn(
111 MockAction.class.getMethod("execute"));
112 HttpServletRequest request = createMock(HttpServletRequest.class);
113 expect(request.getParameterMap()).andReturn(parameterMap);
114 expect(request.getRequestURI()).andReturn("/context/mock/execute");
115 request.setAttribute(CubbyConstants.ATTR_PARAMS, parameterMap);
116 expect(request.getAttribute(CubbyConstants.ATTR_ERRORS))
117 .andReturn(null);
118 request.setAttribute(eq(CubbyConstants.ATTR_ERRORS),
119 isA(ActionErrors.class));
120 expect(request.getAttribute(CubbyConstants.ATTR_FLASH)).andReturn(null);
121 request.setAttribute(eq(CubbyConstants.ATTR_FLASH), isA(Map.class));
122 expect(request.getAttribute(CubbyConstants.ATTR_ACTION)).andStubReturn(
123 action);
124 request.setAttribute(CubbyConstants.ATTR_ACTION, action);
125 request.setAttribute(eq(CubbyConstants.ATTR_ACTION_CONTEXT),
126 isA(ActionContext.class));
127 expect(request.getSession(false)).andReturn(null);
128 HttpServletResponse response = createMock(HttpServletResponse.class);
129 PathInfo pathInfo = createMock(PathInfo.class);
130 expect(pathInfo.dispatch(parameterMap)).andReturn(routing);
131 expect(pathInfo.getURIParameters()).andReturn(
132 new HashMap<String, String[]>());
133 replay(routing, request, response, pathInfo);
134
135 cubbyFilter.processRequest(request, response, pathInfo);
136
137 verify(routing, request, response, pathInfo);
138 }
139
140 public static class MockAction {
141 public ActionResult execute() {
142 return new Direct();
143 }
144 }
145
146 }