1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.dispatcher.mapper;
22
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import org.apache.struts2.StrutsConstants;
27 import org.apache.struts2.StrutsTestCase;
28 import org.apache.struts2.ServletActionContext;
29 import org.apache.struts2.dispatcher.ServletRedirectResult;
30 import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
31 import org.apache.struts2.views.jsp.StrutsMockHttpServletResponse;
32
33 import com.mockobjects.servlet.MockHttpServletRequest;
34 import com.mockobjects.dynamic.Mock;
35 import com.opensymphony.xwork2.Result;
36 import com.opensymphony.xwork2.DefaultActionInvocation;
37 import com.opensymphony.xwork2.ActionInvocation;
38 import com.opensymphony.xwork2.ActionContext;
39 import com.opensymphony.xwork2.config.Configuration;
40 import com.opensymphony.xwork2.config.ConfigurationManager;
41 import com.opensymphony.xwork2.config.entities.PackageConfig;
42 import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
43
44 import javax.servlet.http.HttpServletResponse;
45
46 /***
47 * DefaultActionMapper test case.
48 *
49 */
50 public class DefaultActionMapperTest extends StrutsTestCase {
51
52 private MockHttpServletRequest req;
53 private ConfigurationManager configManager;
54 private Configuration config;
55
56 protected void setUp() throws Exception {
57 super.setUp();
58 req = new MockHttpServletRequest();
59 req.setupGetParameterMap(new HashMap());
60 req.setupGetContextPath("/my/namespace");
61
62 config = new DefaultConfiguration();
63 PackageConfig pkg = new PackageConfig("myns", "/my/namespace", false, null);
64 PackageConfig pkg2 = new PackageConfig("my", "/my", false, null);
65 config.addPackageConfig("mvns", pkg);
66 config.addPackageConfig("my", pkg2);
67 configManager = new ConfigurationManager() {
68 public Configuration getConfiguration() {
69 return config;
70 }
71 };
72 }
73
74 public void testGetMapping() throws Exception {
75 setUp();
76 req.setupGetRequestURI("/my/namespace/actionName.action");
77 req.setupGetServletPath("/my/namespace/actionName.action");
78 req.setupGetAttribute(null);
79 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
80
81 DefaultActionMapper mapper = new DefaultActionMapper();
82 ActionMapping mapping = mapper.getMapping(req, configManager);
83
84 assertEquals("/my/namespace", mapping.getNamespace());
85 assertEquals("actionName", mapping.getName());
86 assertNull(mapping.getMethod());
87 }
88
89 public void testGetMappingWithMethod() throws Exception {
90 req.setupGetParameterMap(new HashMap());
91 req.setupGetRequestURI("/my/namespace/actionName!add.action");
92 req.setupGetServletPath("/my/namespace/actionName!add.action");
93 req.setupGetAttribute(null);
94 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
95
96 DefaultActionMapper mapper = new DefaultActionMapper();
97 ActionMapping mapping = mapper.getMapping(req, configManager);
98
99 assertEquals("/my/namespace", mapping.getNamespace());
100 assertEquals("actionName", mapping.getName());
101 assertEquals("add", mapping.getMethod());
102 }
103
104 public void testGetMappingWithSlashedName() throws Exception {
105
106 req.setupGetRequestURI("/my/foo/actionName.action");
107 req.setupGetServletPath("/my/foo/actionName.action");
108 req.setupGetAttribute(null);
109 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
110
111 DefaultActionMapper mapper = new DefaultActionMapper();
112 mapper.setSlashesInActionNames("true");
113 ActionMapping mapping = mapper.getMapping(req, configManager);
114
115 assertEquals("/my", mapping.getNamespace());
116 assertEquals("foo/actionName", mapping.getName());
117 assertNull(mapping.getMethod());
118 }
119
120 public void testGetMappingWithNamespaceSlash() throws Exception {
121
122 req.setupGetRequestURI("/my.hh/abc.action");
123 req.setupGetServletPath("/my.hh/abc.action");
124 req.setupGetAttribute(null);
125 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
126
127 DefaultActionMapper mapper = new DefaultActionMapper();
128 ActionMapping mapping = mapper.getMapping(req, configManager);
129
130 assertEquals("", mapping.getNamespace());
131 assertEquals("abc", mapping.getName());
132
133 req.setupGetAttribute(null);
134 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
135 mapper = new DefaultActionMapper();
136 mapper.setSlashesInActionNames("true");
137 mapping = mapper.getMapping(req, configManager);
138
139 assertEquals("", mapping.getNamespace());
140 assertEquals("my.hh/abc", mapping.getName());
141 }
142
143 public void testGetMappingWithUnknownNamespace() throws Exception {
144 setUp();
145 req.setupGetRequestURI("/bo/foo/actionName.action");
146 req.setupGetServletPath("/bo/foo/actionName.action");
147 req.setupGetAttribute(null);
148 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
149
150 DefaultActionMapper mapper = new DefaultActionMapper();
151 ActionMapping mapping = mapper.getMapping(req, configManager);
152
153 assertEquals("", mapping.getNamespace());
154 assertEquals("actionName", mapping.getName());
155 assertNull(mapping.getMethod());
156 }
157
158 public void testGetMappingWithUnknownNamespaceButFullNamespaceSelect() throws Exception {
159 setUp();
160 req.setupGetRequestURI("/bo/foo/actionName.action");
161 req.setupGetServletPath("/bo/foo/actionName.action");
162 req.setupGetAttribute(null);
163 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
164
165 DefaultActionMapper mapper = new DefaultActionMapper();
166 mapper.setAlwaysSelectFullNamespace("true");
167 ActionMapping mapping = mapper.getMapping(req, configManager);
168
169 assertEquals("/bo/foo", mapping.getNamespace());
170 assertEquals("actionName", mapping.getName());
171 assertNull(mapping.getMethod());
172 }
173
174 public void testGetUri() throws Exception {
175 req.setupGetParameterMap(new HashMap());
176 req.setupGetRequestURI("/my/namespace/actionName.action");
177 req.setupGetServletPath("/my/namespace/actionName.action");
178 req.setupGetAttribute(null);
179 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
180
181 DefaultActionMapper mapper = new DefaultActionMapper();
182 ActionMapping mapping = mapper.getMapping(req, configManager);
183 assertEquals("/my/namespace/actionName.action", mapper.getUriFromActionMapping(mapping));
184 }
185
186 public void testGetUriWithMethod() throws Exception {
187 req.setupGetParameterMap(new HashMap());
188 req.setupGetRequestURI("/my/namespace/actionName!add.action");
189 req.setupGetServletPath("/my/namespace/actionName!add.action");
190 req.setupGetAttribute(null);
191 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
192
193 DefaultActionMapper mapper = new DefaultActionMapper();
194 ActionMapping mapping = mapper.getMapping(req, configManager);
195
196 assertEquals("/my/namespace/actionName!add.action", mapper.getUriFromActionMapping(mapping));
197 }
198
199 public void testGetMappingWithNoExtension() throws Exception {
200 req.setupGetParameterMap(new HashMap());
201 req.setupGetRequestURI("/my/namespace/actionName");
202 req.setupGetServletPath("/my/namespace/actionName");
203 req.setupGetAttribute(null);
204 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
205
206 DefaultActionMapper mapper = new DefaultActionMapper();
207 mapper.setExtensions("");
208 ActionMapping mapping = mapper.getMapping(req, configManager);
209
210 assertEquals("/my/namespace", mapping.getNamespace());
211 assertEquals("actionName", mapping.getName());
212 assertNull(mapping.getMethod());
213 }
214
215 public void testGetMappingWithNoExtensionButUriHasExtension() throws Exception {
216 req.setupGetParameterMap(new HashMap());
217 req.setupGetRequestURI("/my/namespace/actionName.html");
218 req.setupGetServletPath("/my/namespace/actionName.html");
219 req.setupGetAttribute(null);
220 req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
221
222 DefaultActionMapper mapper = new DefaultActionMapper();
223 mapper.setExtensions("");
224 ActionMapping mapping = mapper.getMapping(req, configManager);
225
226 assertEquals("/my/namespace", mapping.getNamespace());
227 assertEquals("actionName.html", mapping.getName());
228 assertNull(mapping.getMethod());
229 }
230
231
232
233
234
235 public void testParseNameAndNamespace1() throws Exception {
236 ActionMapping actionMapping = new ActionMapping();
237
238 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
239 defaultActionMapper.parseNameAndNamespace("someAction", actionMapping, configManager);
240
241 assertEquals(actionMapping.getName(), "someAction");
242 assertEquals(actionMapping.getNamespace(), "");
243 }
244
245 public void testParseNameAndNamespace2() throws Exception {
246 ActionMapping actionMapping = new ActionMapping();
247
248 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
249 defaultActionMapper.parseNameAndNamespace("/someAction", actionMapping, configManager);
250
251 assertEquals(actionMapping.getName(), "someAction");
252 assertEquals(actionMapping.getNamespace(), "/");
253 }
254
255 public void testParseNameAndNamespace3() throws Exception {
256 ActionMapping actionMapping = new ActionMapping();
257
258 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
259 defaultActionMapper.parseNameAndNamespace("/my/someAction", actionMapping, configManager);
260
261 assertEquals(actionMapping.getName(), "someAction");
262 assertEquals(actionMapping.getNamespace(), "/my");
263 }
264
265 public void testParseNameAndNamespace_NoSlashes() throws Exception {
266 ActionMapping actionMapping = new ActionMapping();
267
268 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
269 defaultActionMapper.setSlashesInActionNames("false");
270 defaultActionMapper.parseNameAndNamespace("/foo/someAction", actionMapping, configManager);
271
272 assertEquals(actionMapping.getName(), "someAction");
273 assertEquals(actionMapping.getNamespace(), "");
274 }
275
276 public void testParseNameAndNamespace_AllowSlashes() throws Exception {
277 ActionMapping actionMapping = new ActionMapping();
278
279 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
280 defaultActionMapper.setSlashesInActionNames("true");
281 defaultActionMapper.parseNameAndNamespace("/foo/someAction", actionMapping, configManager);
282
283 assertEquals(actionMapping.getName(), "foo/someAction");
284 assertEquals(actionMapping.getNamespace(), "");
285 }
286
287
288
289
290
291
292 public void testActionPrefix() throws Exception {
293 Map parameterMap = new HashMap();
294 parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction", "");
295
296 StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
297 request.setParameterMap(parameterMap);
298 request.setupGetServletPath("/someServletPath.action");
299
300 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
301 ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
302
303 assertEquals(actionMapping.getName(), "myAction");
304 }
305
306 public void testActionPrefix_fromImageButton() throws Exception {
307 Map parameterMap = new HashMap();
308 parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction", "");
309 parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction.x", "");
310 parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction.y", "");
311
312 StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
313 request.setParameterMap(parameterMap);
314 request.setupGetServletPath("/someServletPath.action");
315
316 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
317 ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
318
319 assertEquals(actionMapping.getName(), "myAction");
320 }
321
322 public void testActionPrefix_fromIEImageButton() throws Exception {
323 Map parameterMap = new HashMap();
324 parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction.x", "");
325 parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction.y", "");
326
327 StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
328 request.setParameterMap(parameterMap);
329 request.setupGetServletPath("/someServletPath.action");
330
331 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
332 ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
333
334 assertEquals(actionMapping.getName(), "myAction");
335 }
336
337 public void testRedirectPrefix() throws Exception {
338 Map parameterMap = new HashMap();
339 parameterMap.put(DefaultActionMapper.REDIRECT_PREFIX + "http://www.google.com", "");
340
341 StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
342 request.setupGetServletPath("/someServletPath.action");
343 request.setParameterMap(parameterMap);
344
345 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
346 defaultActionMapper.setContainer(container);
347 ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
348
349 Result result = actionMapping.getResult();
350 assertNotNull(result);
351 assertTrue(result instanceof ServletRedirectResult);
352
353 Mock invMock = new Mock(ActionInvocation.class);
354 ActionInvocation inv = (ActionInvocation) invMock.proxy();
355 ActionContext ctx = ActionContext.getContext();
356 ctx.put(ServletActionContext.HTTP_REQUEST, request);
357 StrutsMockHttpServletResponse response = new StrutsMockHttpServletResponse();
358 ctx.put(ServletActionContext.HTTP_RESPONSE, response);
359 invMock.expectAndReturn("getInvocationContext", ctx);
360 invMock.expectAndReturn("getStack", ctx.getValueStack());
361 result.execute(inv);
362 assertEquals("http://www.google.com", response.getRedirectURL());
363
364 }
365
366 public void testRedirectActionPrefix() throws Exception {
367 Map parameterMap = new HashMap();
368 parameterMap.put(DefaultActionMapper.REDIRECT_ACTION_PREFIX + "myAction", "");
369
370 StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
371 request.setupGetServletPath("/someServletPath.action");
372 request.setParameterMap(parameterMap);
373
374 DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
375 defaultActionMapper.setContainer(container);
376 ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
377
378
379 Result result = actionMapping.getResult();
380 assertNotNull(result);
381 assertTrue(result instanceof ServletRedirectResult);
382
383
384 }
385
386 public void testDropExtension() throws Exception {
387 DefaultActionMapper mapper = new DefaultActionMapper();
388 String name = mapper.dropExtension("foo.action");
389 assertTrue("Name not right: "+name, "foo".equals(name));
390
391 name = mapper.dropExtension("foo.action.action");
392 assertTrue("Name not right: "+name, "foo.action".equals(name));
393
394 }
395
396 public void testGetUriFromActionMapper1() throws Exception {
397 DefaultActionMapper mapper = new DefaultActionMapper();
398 ActionMapping actionMapping = new ActionMapping();
399 actionMapping.setMethod("myMethod");
400 actionMapping.setName("myActionName");
401 actionMapping.setNamespace("/myNamespace");
402 String uri = mapper.getUriFromActionMapping(actionMapping);
403
404 assertEquals("/myNamespace/myActionName!myMethod.action", uri);
405 }
406
407 public void testGetUriFromActionMapper2() throws Exception {
408 DefaultActionMapper mapper = new DefaultActionMapper();
409 ActionMapping actionMapping = new ActionMapping();
410 actionMapping.setMethod("myMethod");
411 actionMapping.setName("myActionName");
412 actionMapping.setNamespace("/");
413 String uri = mapper.getUriFromActionMapping(actionMapping);
414
415 assertEquals("/myActionName!myMethod.action", uri);
416 }
417
418 public void testGetUriFromActionMapper3() throws Exception {
419 DefaultActionMapper mapper = new DefaultActionMapper();
420 ActionMapping actionMapping = new ActionMapping();
421 actionMapping.setMethod("myMethod");
422 actionMapping.setName("myActionName");
423 actionMapping.setNamespace("");
424 String uri = mapper.getUriFromActionMapping(actionMapping);
425
426 assertEquals("/myActionName!myMethod.action", uri);
427 }
428
429
430 public void testGetUriFromActionMapper4() throws Exception {
431 DefaultActionMapper mapper = new DefaultActionMapper();
432 ActionMapping actionMapping = new ActionMapping();
433 actionMapping.setName("myActionName");
434 actionMapping.setNamespace("");
435 String uri = mapper.getUriFromActionMapping(actionMapping);
436
437 assertEquals("/myActionName.action", uri);
438 }
439
440 public void testGetUriFromActionMapper5() throws Exception {
441 DefaultActionMapper mapper = new DefaultActionMapper();
442 ActionMapping actionMapping = new ActionMapping();
443 actionMapping.setName("myActionName");
444 actionMapping.setNamespace("/");
445 String uri = mapper.getUriFromActionMapping(actionMapping);
446
447 assertEquals("/myActionName.action", uri);
448 }
449
450
451 public void testGetUriFromActionMapper6() throws Exception {
452 DefaultActionMapper mapper = new DefaultActionMapper();
453 ActionMapping actionMapping = new ActionMapping();
454 actionMapping.setMethod("myMethod");
455 actionMapping.setName("myActionName?test=bla");
456 actionMapping.setNamespace("/myNamespace");
457 String uri = mapper.getUriFromActionMapping(actionMapping);
458
459 assertEquals("/myNamespace/myActionName!myMethod.action?test=bla", uri);
460 }
461
462 public void testGetUriFromActionMapper7() throws Exception {
463 DefaultActionMapper mapper = new DefaultActionMapper();
464 ActionMapping actionMapping = new ActionMapping();
465 actionMapping.setMethod("myMethod");
466 actionMapping.setName("myActionName?test=bla");
467 actionMapping.setNamespace("/");
468 String uri = mapper.getUriFromActionMapping(actionMapping);
469
470 assertEquals("/myActionName!myMethod.action?test=bla", uri);
471 }
472
473 public void testGetUriFromActionMapper8() throws Exception {
474 DefaultActionMapper mapper = new DefaultActionMapper();
475 ActionMapping actionMapping = new ActionMapping();
476 actionMapping.setMethod("myMethod");
477 actionMapping.setName("myActionName?test=bla");
478 actionMapping.setNamespace("");
479 String uri = mapper.getUriFromActionMapping(actionMapping);
480
481 assertEquals("/myActionName!myMethod.action?test=bla", uri);
482 }
483
484
485 public void testGetUriFromActionMapper9() throws Exception {
486 DefaultActionMapper mapper = new DefaultActionMapper();
487 ActionMapping actionMapping = new ActionMapping();
488 actionMapping.setName("myActionName?test=bla");
489 actionMapping.setNamespace("");
490 String uri = mapper.getUriFromActionMapping(actionMapping);
491
492 assertEquals("/myActionName.action?test=bla", uri);
493 }
494
495 public void testGetUriFromActionMapper10() throws Exception {
496 DefaultActionMapper mapper = new DefaultActionMapper();
497 ActionMapping actionMapping = new ActionMapping();
498 actionMapping.setName("myActionName?test=bla");
499 actionMapping.setNamespace("/");
500 String uri = mapper.getUriFromActionMapping(actionMapping);
501
502 assertEquals("/myActionName.action?test=bla", uri);
503 }
504
505 public void testGetUriFromActionMapper11() throws Exception {
506 DefaultActionMapper mapper = new DefaultActionMapper();
507 ActionMapping actionMapping = new ActionMapping();
508 actionMapping.setName("myActionName.action");
509 actionMapping.setNamespace("/");
510 String uri = mapper.getUriFromActionMapping(actionMapping);
511
512 assertEquals("/myActionName.action", uri);
513 }
514
515 public void testGetUriFromActionMapper12() throws Exception {
516 DefaultActionMapper mapper = new DefaultActionMapper();
517 ActionMapping actionMapping = new ActionMapping();
518 actionMapping.setName("myActionName.action");
519 actionMapping.setNamespace("/");
520 String uri = mapper.getUriFromActionMapping(actionMapping);
521
522 assertEquals("/myActionName.action", uri);
523 }
524
525 }