1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.action.impl;
17
18 import static org.junit.Assert.assertEquals;
19 import static org.junit.Assert.assertFalse;
20 import static org.junit.Assert.assertNull;
21 import static org.junit.Assert.assertSame;
22 import static org.junit.Assert.assertTrue;
23 import static org.junit.Assert.fail;
24
25 import java.lang.reflect.Method;
26 import java.util.HashMap;
27 import java.util.Map;
28
29 import org.junit.After;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.seasar.cubby.action.Action;
33 import org.seasar.cubby.action.ActionContext;
34 import org.seasar.cubby.action.ActionErrors;
35 import org.seasar.cubby.action.ActionException;
36 import org.seasar.cubby.action.ActionResult;
37 import org.seasar.cubby.action.Form;
38 import org.seasar.cubby.action.InitializeMethod;
39 import org.seasar.cubby.action.PostRenderMethod;
40 import org.seasar.cubby.action.PreRenderMethod;
41 import org.seasar.cubby.action.RequestParameterBindingType;
42 import org.seasar.cubby.action.impl.ActionContextImpl;
43 import org.seasar.cubby.action.impl.ActionErrorsImpl;
44 import org.seasar.cubby.plugin.PluginRegistry;
45 import org.seasar.cubby.plugins.BinderPlugin;
46 import org.seasar.cubby.spi.BeanDescProvider;
47 import org.seasar.cubby.spi.beans.impl.DefaultBeanDescProvider;
48
49 public class ActionContextImplTest {
50
51 private final PluginRegistry pluginRegistry = PluginRegistry.getInstance();
52
53 @Before
54 public void setupProvider() {
55 final BinderPlugin binderPlugin = new BinderPlugin();
56 binderPlugin.bind(BeanDescProvider.class).toInstance(
57 new DefaultBeanDescProvider());
58 pluginRegistry.register(binderPlugin);
59 }
60
61 @After
62 public void teardownProvider() {
63 pluginRegistry.clear();
64 }
65
66 @Test
67 public void constructWithNormalAction() throws Exception {
68 final Action action = new NormalAction();
69 final Class<?> actionClass = action.getClass();
70 final Method method = action.getClass().getMethod("method1");
71 final ActionErrors actionErrors = new ActionErrorsImpl();
72 final Map<String, Object> flashMap = new HashMap<String, Object>();
73 final ActionContext actionContext = new ActionContextImpl();
74 actionContext.initialize(action, actionClass, method, actionErrors,
75 flashMap);
76 assertSame(action, actionContext.getAction());
77 assertEquals(actionClass, actionContext.getActionClass());
78 assertEquals(method, actionContext.getActionMethod());
79 assertSame(actionErrors, actionContext.getActionErrors());
80 assertEquals(flashMap, actionContext.getFlashMap());
81
82
83
84
85 System.out.println(actionContext);
86 }
87
88 @Test
89 public void invokeWithNormalAction() throws Exception {
90 final NormalAction action = new NormalAction();
91 final Class<?> actionClass = action.getClass();
92 final Method method = action.getClass().getMethod("method1");
93 final ActionErrors actionErrors = new ActionErrorsImpl();
94 final Map<String, Object> flashMap = new HashMap<String, Object>();
95 final ActionContext actionContext = new ActionContextImpl();
96 actionContext.initialize(action, actionClass, method, actionErrors,
97 flashMap);
98
99 assertFalse(action.isInitialized());
100 assertFalse(action.isPrerendered());
101 assertFalse(action.isPostrendered());
102
103 actionContext.invokeInitializeMethod();
104 assertTrue(action.isInitialized());
105 assertFalse(action.isPrerendered());
106 assertFalse(action.isPostrendered());
107
108 actionContext.invokePreRenderMethod();
109 assertTrue(action.isInitialized());
110 assertTrue(action.isPrerendered());
111 assertFalse(action.isPostrendered());
112
113 actionContext.invokePostRenderMethod();
114 assertTrue(action.isInitialized());
115 assertTrue(action.isPrerendered());
116 assertTrue(action.isPostrendered());
117 }
118
119 @Test
120 public void constructWithPojoAction() throws Exception {
121 final PojoAction action = new PojoAction();
122 final Class<?> actionClass = action.getClass();
123 final Method method = action.getClass().getMethod("method1");
124 final ActionErrors actionErrors = new ActionErrorsImpl();
125 final Map<String, Object> flashMap = new HashMap<String, Object>();
126 final ActionContext actionContext = new ActionContextImpl();
127 actionContext.initialize(action, actionClass, method, actionErrors,
128 flashMap);
129 assertSame(action, actionContext.getAction());
130 assertEquals(actionClass, actionContext.getActionClass());
131 assertEquals(method, actionContext.getActionMethod());
132 assertSame(actionErrors, actionContext.getActionErrors());
133 assertEquals(flashMap, actionContext.getFlashMap());
134
135 System.out.println(actionContext);
136 }
137
138 @Test
139 public void invokeWithPojoAction() throws Exception {
140 final PojoAction action = new PojoAction();
141 final Class<?> actionClass = action.getClass();
142 final Method method = action.getClass().getMethod("method2");
143 final ActionErrors actionErrors = new ActionErrorsImpl();
144 final Map<String, Object> flashMap = new HashMap<String, Object>();
145 final ActionContext actionContext = new ActionContextImpl();
146 actionContext.initialize(action, actionClass, method, actionErrors,
147 flashMap);
148
149 assertFalse(action.isInitialized());
150 assertFalse(action.isPrerendered());
151 assertFalse(action.isPostrendered());
152
153 actionContext.invokeInitializeMethod();
154 assertTrue(action.isInitialized());
155 assertFalse(action.isPrerendered());
156 assertFalse(action.isPostrendered());
157
158 actionContext.invokePreRenderMethod();
159 assertTrue(action.isInitialized());
160 assertTrue(action.isPrerendered());
161 assertFalse(action.isPostrendered());
162
163 actionContext.invokePostRenderMethod();
164 assertTrue(action.isInitialized());
165 assertTrue(action.isPrerendered());
166 assertTrue(action.isPostrendered());
167 }
168
169 @Test
170 public void getForm_noAnnotateMethod() throws Exception {
171 final FormAction action = new FormAction();
172 final Class<?> actionClass = action.getClass();
173 final Method method = FormAction.class.getMethod("noAnnotate");
174 final ActionErrors actionErrors = new ActionErrorsImpl();
175 final Map<String, Object> flashMap = new HashMap<String, Object>();
176 final ActionContext actionContext = new ActionContextImpl();
177 actionContext.initialize(action, actionClass, method, actionErrors,
178 flashMap);
179
180 assertSame(action, actionContext.getFormBean());
181 assertFalse(actionContext.isBindRequestParameterToAllProperties());
182 }
183
184 @Test
185 public void getForm_annotateValidFormName() throws Exception {
186 final FormAction action = new FormAction();
187 final Class<?> actionClass = action.getClass();
188 final Method method = FormAction.class
189 .getMethod("annotateValidFormName");
190 final ActionErrors actionErrors = new ActionErrorsImpl();
191 final Map<String, Object> flashMap = new HashMap<String, Object>();
192 final ActionContext actionContext = new ActionContextImpl();
193 actionContext.initialize(action, actionClass, method, actionErrors,
194 flashMap);
195
196 assertSame(action.getMyForm(), actionContext.getFormBean());
197 assertTrue(actionContext.isBindRequestParameterToAllProperties());
198 }
199
200 @Test
201 public void getForm_annotateAllPropertiesBindingType() throws Exception {
202 final FormAction action = new FormAction();
203 final Class<?> actionClass = action.getClass();
204 final Method method = FormAction.class
205 .getMethod("annotateAllPropertiesBindingType");
206 final ActionErrors actionErrors = new ActionErrorsImpl();
207 final Map<String, Object> flashMap = new HashMap<String, Object>();
208 final ActionContext actionContext = new ActionContextImpl();
209 actionContext.initialize(action, actionClass, method, actionErrors,
210 flashMap);
211
212 assertSame(action, actionContext.getFormBean());
213 assertTrue(actionContext.isBindRequestParameterToAllProperties());
214 }
215
216 @Test
217 public void getForm_annotateOnlySpecifiedPropertiesBindingType()
218 throws Exception {
219 final FormAction action = new FormAction();
220 final Class<?> actionClass = action.getClass();
221 final Method method = FormAction.class
222 .getMethod("annotateOnlySpecifiedPropertiesBindingType");
223 final ActionErrors actionErrors = new ActionErrorsImpl();
224 final Map<String, Object> flashMap = new HashMap<String, Object>();
225 final ActionContext actionContext = new ActionContextImpl();
226 actionContext.initialize(action, actionClass, method, actionErrors,
227 flashMap);
228
229 assertSame(action.getMyForm(), actionContext.getFormBean());
230 assertFalse(actionContext.isBindRequestParameterToAllProperties());
231 }
232
233 @Test
234 public void getForm_annotateNoneBindingType() throws Exception {
235 final FormAction action = new FormAction();
236 final Class<?> actionClass = action.getClass();
237 final Method method = FormAction.class
238 .getMethod("annotateNoneBindingType");
239 final ActionErrors actionErrors = new ActionErrorsImpl();
240 final Map<String, Object> flashMap = new HashMap<String, Object>();
241 final ActionContext actionContext = new ActionContextImpl();
242 actionContext.initialize(action, actionClass, method, actionErrors,
243 flashMap);
244
245 assertNull(actionContext.getFormBean());
246 try {
247 actionContext.isBindRequestParameterToAllProperties();
248 fail();
249 } catch (final IllegalStateException e) {
250
251 }
252
253 }
254
255 @Test
256 public void getForm_annotateNullFormName() throws Exception {
257 final FormAction action = new FormAction();
258 final Class<?> actionClass = action.getClass();
259 final Method method = FormAction.class
260 .getMethod("annotateNullFormName");
261 final ActionErrors actionErrors = new ActionErrorsImpl();
262 final Map<String, Object> flashMap = new HashMap<String, Object>();
263 final ActionContext actionContext = new ActionContextImpl();
264 actionContext.initialize(action, actionClass, method, actionErrors,
265 flashMap);
266
267 try {
268 assertNull(actionContext.getFormBean());
269 fail();
270 } catch (final ActionException e) {
271
272 }
273 }
274
275 @Test
276 public void getForm_annotateNotExistFormName() throws Exception {
277 final FormAction action = new FormAction();
278 final Class<?> actionClass = action.getClass();
279 final Method method = FormAction.class
280 .getMethod("annotateNotExistFormName");
281 final ActionErrors actionErrors = new ActionErrorsImpl();
282 final Map<String, Object> flashMap = new HashMap<String, Object>();
283 final ActionContext actionContext = new ActionContextImpl();
284 actionContext.initialize(action, actionClass, method, actionErrors,
285 flashMap);
286
287 try {
288 assertNull(actionContext.getFormBean());
289 fail();
290 } catch (final ActionException e) {
291
292 }
293 }
294
295 @Test
296 public void getForm_annotateThisFormName() throws Exception {
297 final FormAction action = new FormAction();
298 final Class<?> actionClass = action.getClass();
299 final Method method = FormAction.class
300 .getMethod("annotateThisFormName");
301 final ActionErrors actionErrors = new ActionErrorsImpl();
302 final Map<String, Object> flashMap = new HashMap<String, Object>();
303 final ActionContext actionContext = new ActionContextImpl();
304 actionContext.initialize(action, actionClass, method, actionErrors,
305 flashMap);
306
307 assertSame(action, actionContext.getFormBean());
308 assertTrue(actionContext.isBindRequestParameterToAllProperties());
309 }
310
311 @Test
312 public void clearFlash() throws Exception {
313 final Object action = new NormalAction();
314 final Class<?> actionClass = action.getClass();
315 final Method method = action.getClass().getMethod("method1");
316 final ActionErrors actionErrors = new ActionErrorsImpl();
317 final Map<String, Object> flashMap = new HashMap<String, Object>();
318 final ActionContext actionContext = new ActionContextImpl();
319 actionContext.initialize(action, actionClass, method, actionErrors,
320 flashMap);
321
322 flashMap.put("key", "value");
323 assertFalse(actionContext.getFlashMap().isEmpty());
324 assertFalse(flashMap.isEmpty());
325 actionContext.clearFlash();
326 assertTrue(actionContext.getFlashMap().isEmpty());
327 assertTrue(flashMap.isEmpty());
328 }
329
330 public static class PojoAction {
331 public ActionResult method1() {
332 return null;
333 }
334
335 @InitializeMethod("initialize")
336 @PreRenderMethod("prerender")
337 @PostRenderMethod("postrender")
338 public ActionResult method2() {
339 return null;
340 }
341
342 private boolean initialized = false;
343
344 private boolean prerendered = false;
345
346 private boolean postrendered = false;
347
348 public void initialize() {
349 initialized = true;
350 }
351
352 public void prerender() {
353 prerendered = true;
354 }
355
356 public void postrender() {
357 postrendered = true;
358 }
359
360 public boolean isInitialized() {
361 return initialized;
362 }
363
364 public boolean isPrerendered() {
365 return prerendered;
366 }
367
368 public boolean isPostrendered() {
369 return postrendered;
370 }
371
372 }
373
374 public static class NormalAction extends Action {
375 public ActionResult method1() {
376 return null;
377 }
378
379 private boolean initialized = false;
380
381 private boolean prerendered = false;
382
383 private boolean postrendered = false;
384
385 @Override
386 public void initialize() {
387 initialized = true;
388 }
389
390 @Override
391 public void prerender() {
392 prerendered = true;
393 }
394
395 @Override
396 public void postrender() {
397 postrendered = true;
398 }
399
400 public boolean isInitialized() {
401 return initialized;
402 }
403
404 public boolean isPrerendered() {
405 return prerendered;
406 }
407
408 public boolean isPostrendered() {
409 return postrendered;
410 }
411
412 }
413
414 public static class FormAction {
415
416 private final Object myForm = new Object();
417
418 public Object getMyForm() {
419 return myForm;
420 }
421
422 public Object getNullForm() {
423 return null;
424 }
425
426 public ActionResult noAnnotate() {
427 return null;
428 }
429
430 @Form("myForm")
431 public ActionResult annotateValidFormName() {
432 return null;
433 }
434
435 @Form(bindingType = RequestParameterBindingType.ALL_PROPERTIES)
436 public ActionResult annotateAllPropertiesBindingType() {
437 return null;
438 }
439
440 @Form(value = "myForm", bindingType = RequestParameterBindingType.ONLY_SPECIFIED_PROPERTIES)
441 public ActionResult annotateOnlySpecifiedPropertiesBindingType() {
442 return null;
443 }
444
445 @Form(bindingType = RequestParameterBindingType.NONE)
446 public ActionResult annotateNoneBindingType() {
447 return null;
448 }
449
450 @Form("nullForm")
451 public ActionResult annotateNullFormName() {
452 return null;
453 }
454
455 @Form("illegal")
456 public ActionResult annotateNotExistFormName() {
457 return null;
458 }
459
460 @Form("this")
461 public ActionResult annotateThisFormName() {
462 return null;
463 }
464
465 }
466
467 }