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