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.controller.RequestParser;
43 import org.seasar.cubby.controller.impl.DefaultRequestParser;
44 import org.seasar.cubby.internal.controller.RequestProcessor;
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.ContainerProvider;
51 import org.seasar.cubby.spi.RequestParserProvider;
52 import org.seasar.cubby.spi.container.Container;
53 import org.seasar.cubby.spi.container.LookupException;
54 import org.seasar.cubby.spi.impl.AbstractRequestParserProvider;
55
56 public class RequestProcessorImplTest {
57
58 private final PluginRegistry pluginRegistry = PluginRegistry.getInstance();
59
60 private RequestProcessor requestProcessor = new RequestProcessorImpl();
61
62 @Before
63 public void setupProvider() {
64 final BinderPlugin binderPlugin = new BinderPlugin();
65
66 final List<RequestParser> requestParsers = new ArrayList<RequestParser>();
67 requestParsers.add(new DefaultRequestParser());
68 binderPlugin.bind(RequestParserProvider.class).toInstance(
69 new AbstractRequestParserProvider() {
70
71 @Override
72 protected Collection<RequestParser> getRequestParsers() {
73 return requestParsers;
74 }
75
76 });
77 binderPlugin.bind(ContainerProvider.class).toInstance(
78 new MockContainerProvider(new Container() {
79
80 public <T> T lookup(Class<T> type) throws LookupException {
81 if (MockAction.class.equals(type)) {
82 return type.cast(new MockAction());
83 }
84 throw new LookupException();
85 }
86
87 }));
88
89 pluginRegistry.register(binderPlugin);
90 }
91
92 @After
93 public void teardownProvider() {
94 pluginRegistry.clear();
95 }
96
97 @Test
98 @SuppressWarnings("unchecked")
99 public void process() throws Exception {
100 Map<String, Object[]> parameterMap = new HashMap<String, Object[]>();
101 Routing routing = createMock(Routing.class);
102 expect(routing.getActionClass()).andReturn(
103 Class.class.cast(MockAction.class));
104 expect(routing.getActionMethod()).andReturn(
105 MockAction.class.getMethod("execute"));
106 HttpServletRequest request = createMock(HttpServletRequest.class);
107 expect(request.getParameterMap()).andReturn(parameterMap);
108 expect(request.getRequestURI()).andReturn("/context/mock/execute");
109 request.setAttribute(CubbyConstants.ATTR_PARAMS, parameterMap);
110 request.setAttribute(eq(CubbyConstants.ATTR_ERRORS),
111 isA(ActionErrors.class));
112 request.setAttribute(eq(CubbyConstants.ATTR_FLASH), isA(Map.class));
113 request.setAttribute(eq(CubbyConstants.ATTR_ACTION),
114 isA(MockAction.class));
115 request.setAttribute(eq(CubbyConstants.ATTR_ACTION_CONTEXT),
116 isA(ActionContext.class));
117 expect(request.getSession(false)).andReturn(null);
118 HttpServletResponse response = createMock(HttpServletResponse.class);
119 PathInfo pathInfo = createMock(PathInfo.class);
120 expect(pathInfo.dispatch(parameterMap)).andReturn(routing);
121 expect(pathInfo.getURIParameters()).andReturn(
122 new HashMap<String, String[]>());
123 replay(routing, request, response, pathInfo);
124
125 requestProcessor.process(request, response, pathInfo);
126
127 verify(routing, request, response, pathInfo);
128 }
129
130 public static class MockAction {
131 public ActionResult execute() {
132 return new Direct();
133 }
134 }
135
136 }