1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.action;
17
18 import java.lang.reflect.Method;
19
20 import javax.servlet.RequestDispatcher;
21 import javax.servlet.http.HttpServletRequest;
22 import javax.servlet.http.HttpServletRequestWrapper;
23
24 import org.seasar.cubby.controller.ActionContext;
25 import org.seasar.cubby.controller.ActionDef;
26 import org.seasar.extension.unit.S2TestCase;
27 import org.seasar.framework.container.ComponentDef;
28 import org.seasar.framework.mock.servlet.MockHttpServletRequest;
29 import org.seasar.framework.mock.servlet.MockHttpServletResponse;
30 import org.seasar.framework.mock.servlet.MockServletContext;
31 import org.seasar.framework.util.ClassUtil;
32
33 public class ForwardTest extends S2TestCase {
34
35 public ActionContext context;
36
37 @Override
38 protected void setUp() throws Exception {
39 include(this.getClass().getName().replaceAll("\\.", "/") + ".dicon");
40 }
41
42 public void testBasicSequence() throws Exception {
43 MockServletContext servletContext = this.getServletContext();
44 servletContext.setServletContextName("/cubby");
45 MockHttpServletRequest request = this.getRequest();
46 MockHttpServletResponse response = this.getResponse();
47 ComponentDef componentDef = this.getComponentDef(MockAction.class);
48 context.initialize(new MockActionDef(componentDef));
49 MockAction action = (MockAction) context.getAction();
50
51 Forward forward = new Forward("path.jsp");
52 forward.prerender(context);
53 assertTrue(action.isPrerendered());
54 forward.execute(context, new RequestDispatcherAssertionWrapper(request,
55 new Asserter() {
56 public void assertDispatchPath(String path) {
57 assertEquals("/mock/path.jsp", path);
58 }
59 }), response);
60 assertTrue(action.isPostrendered());
61 }
62
63 public void testRelativePath() throws Exception {
64 MockServletContext servletContext = this.getServletContext();
65 servletContext.setServletContextName("/cubby");
66 MockHttpServletRequest request = this.getRequest();
67 MockHttpServletResponse response = this.getResponse();
68 ComponentDef componentDef = this.getComponentDef(MockAction.class);
69 context.initialize(new MockActionDef(componentDef));
70
71 Forward forward = new Forward("page.jsp");
72 forward.execute(context, new RequestDispatcherAssertionWrapper(request,
73 new Asserter() {
74 public void assertDispatchPath(String path) {
75 assertEquals("/mock/page.jsp", path);
76 }
77 }), response);
78 }
79
80 public void testAbsolutePath() throws Exception {
81 MockServletContext servletContext = this.getServletContext();
82 servletContext.setServletContextName("/cubby");
83 MockHttpServletRequest request = this.getRequest();
84 MockHttpServletResponse response = this.getResponse();
85 ComponentDef componentDef = this.getComponentDef(MockAction.class);
86 context.initialize(new MockActionDef(componentDef));
87
88 Forward forward = new Forward("/absolute/path.jsp");
89 forward.execute(context, new RequestDispatcherAssertionWrapper(request,
90 new Asserter() {
91 public void assertDispatchPath(String path) {
92 assertEquals("/absolute/path.jsp", path);
93 }
94 }), response);
95 }
96
97 public void testGetPath() throws Exception {
98 Forward forward = new Forward("/absolute/path.jsp");
99 assertEquals("/absolute/path.jsp", forward.getPath());
100 }
101
102 interface Asserter {
103 void assertDispatchPath(String path);
104 }
105
106 class RequestDispatcherAssertionWrapper extends HttpServletRequestWrapper {
107
108 private Asserter asserter;
109
110 public RequestDispatcherAssertionWrapper(HttpServletRequest request,
111 Asserter asserter) {
112 super(request);
113 this.asserter = asserter;
114 }
115
116 @Override
117 public RequestDispatcher getRequestDispatcher(String path) {
118 asserter.assertDispatchPath(path);
119 return super.getRequestDispatcher(path);
120 }
121
122 }
123
124 class MockActionDef implements ActionDef {
125
126 private ComponentDef componentDef;
127
128 public MockActionDef(ComponentDef componentDef) {
129 this.componentDef = componentDef;
130 }
131
132 public ComponentDef getComponentDef() {
133 return componentDef;
134 }
135
136 public Method getMethod() {
137 Class<?> clazz = componentDef.getComponentClass();
138 Method method = ClassUtil.getMethod(clazz, "dummy", null);
139 return method;
140 }
141
142 }
143
144 public static class MockAction extends Action {
145
146 private boolean prerendered = false;
147
148 private boolean postrendered = false;
149
150 @Override
151 public void prerender() {
152 super.prerender();
153 prerendered = true;
154 }
155
156 @Override
157 public void postrender() {
158 super.postrender();
159 postrendered = true;
160 }
161
162 public boolean isPrerendered() {
163 return prerendered;
164 }
165
166 public boolean isPostrendered() {
167 return postrendered;
168 }
169
170 public ActionResult dummy() {
171 return null;
172 }
173 }
174
175 }