View Javadoc

1   /*
2    * $Id: DefaultActionMapperTest.java 454565 2006-10-10 00:02:56Z jmitchell $
3    *
4    * Copyright 2006 The Apache Software Foundation.
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *      http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.apache.struts2.dispatcher.mapper;
19  
20  import java.util.HashMap;
21  import java.util.Map;
22  
23  import org.apache.struts2.StrutsConstants;
24  import org.apache.struts2.StrutsTestCase;
25  import org.apache.struts2.dispatcher.ServletRedirectResult;
26  import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
27  
28  import com.mockobjects.servlet.MockHttpServletRequest;
29  import com.opensymphony.xwork2.Result;
30  import com.opensymphony.xwork2.config.Configuration;
31  import com.opensymphony.xwork2.config.ConfigurationManager;
32  import com.opensymphony.xwork2.config.entities.PackageConfig;
33  import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
34  
35  /***
36   * DefaultActionMapper test case.
37   *
38   */
39  public class DefaultActionMapperTest extends StrutsTestCase {
40  
41      private MockHttpServletRequest req;
42      private ConfigurationManager configManager;
43      private Configuration config;
44  
45      protected void setUp() throws Exception {
46          super.setUp();
47          req = new MockHttpServletRequest();
48          req.setupGetParameterMap(new HashMap());
49          req.setupGetContextPath("/my/namespace");
50          
51          config = new DefaultConfiguration();
52          PackageConfig pkg = new PackageConfig("myns", "/my/namespace", false, null);
53          PackageConfig pkg2 = new PackageConfig("my", "/my", false, null);
54          config.addPackageConfig("mvns", pkg);
55          config.addPackageConfig("my", pkg2);
56          configManager = new ConfigurationManager() {
57              public Configuration getConfiguration() {
58                  return config;
59              }
60          };
61      }
62  
63      public void testGetMapping() throws Exception {
64          setUp();
65          req.setupGetRequestURI("/my/namespace/actionName.action");
66          req.setupGetServletPath("/my/namespace/actionName.action");
67          req.setupGetAttribute(null);
68          req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
69  
70          DefaultActionMapper mapper = new DefaultActionMapper();
71          ActionMapping mapping = mapper.getMapping(req, configManager);
72  
73          assertEquals("/my/namespace", mapping.getNamespace());
74          assertEquals("actionName", mapping.getName());
75          assertNull(mapping.getMethod());
76      }
77  
78      public void testGetMappingWithMethod() throws Exception {
79          req.setupGetParameterMap(new HashMap());
80          req.setupGetRequestURI("/my/namespace/actionName!add.action");
81          req.setupGetServletPath("/my/namespace/actionName!add.action");
82          req.setupGetAttribute(null);
83          req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
84  
85          DefaultActionMapper mapper = new DefaultActionMapper();
86          ActionMapping mapping = mapper.getMapping(req, configManager);
87  
88          assertEquals("/my/namespace", mapping.getNamespace());
89          assertEquals("actionName", mapping.getName());
90          assertEquals("add", mapping.getMethod());
91      }
92      
93      public void testGetMappingWithSlashedName() throws Exception {
94          setUp();
95          req.setupGetRequestURI("/my/foo/actionName.action");
96          req.setupGetServletPath("/my/foo/actionName.action");
97          req.setupGetAttribute(null);
98          req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
99  
100         DefaultActionMapper mapper = new DefaultActionMapper();
101         ActionMapping mapping = mapper.getMapping(req, configManager);
102 
103         assertEquals("/my", mapping.getNamespace());
104         assertEquals("foo/actionName", mapping.getName());
105         assertNull(mapping.getMethod());
106     }
107     
108     public void testGetMappingWithUnknownNamespace() throws Exception {
109         setUp();
110         req.setupGetRequestURI("/bo/foo/actionName.action");
111         req.setupGetServletPath("/bo/foo/actionName.action");
112         req.setupGetAttribute(null);
113         req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
114 
115         DefaultActionMapper mapper = new DefaultActionMapper();
116         ActionMapping mapping = mapper.getMapping(req, configManager);
117 
118         assertEquals("", mapping.getNamespace());
119         assertEquals("bo/foo/actionName", mapping.getName());
120         assertNull(mapping.getMethod());
121     }
122 
123     public void testGetUri() throws Exception {
124         req.setupGetParameterMap(new HashMap());
125         req.setupGetRequestURI("/my/namespace/actionName.action");
126         req.setupGetServletPath("/my/namespace/actionName.action");
127         req.setupGetAttribute(null);
128         req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
129 
130         DefaultActionMapper mapper = new DefaultActionMapper();
131         ActionMapping mapping = mapper.getMapping(req, configManager);
132         assertEquals("/my/namespace/actionName.action", mapper.getUriFromActionMapping(mapping));
133     }
134 
135     public void testGetUriWithMethod() throws Exception {
136         req.setupGetParameterMap(new HashMap());
137         req.setupGetRequestURI("/my/namespace/actionName!add.action");
138         req.setupGetServletPath("/my/namespace/actionName!add.action");
139         req.setupGetAttribute(null);
140         req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
141 
142         DefaultActionMapper mapper = new DefaultActionMapper();
143         ActionMapping mapping = mapper.getMapping(req, configManager);
144 
145         assertEquals("/my/namespace/actionName!add.action", mapper.getUriFromActionMapping(mapping));
146     }
147 
148     public void testGetMappingWithNoExtension() throws Exception {
149         String old = org.apache.struts2.config.Settings.get(StrutsConstants.STRUTS_ACTION_EXTENSION);
150         org.apache.struts2.config.Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, "");
151         try {
152             req.setupGetParameterMap(new HashMap());
153             req.setupGetRequestURI("/my/namespace/actionName");
154             req.setupGetServletPath("/my/namespace/actionName");
155             req.setupGetAttribute(null);
156             req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
157 
158             DefaultActionMapper mapper = new DefaultActionMapper();
159             ActionMapping mapping = mapper.getMapping(req, configManager);
160 
161             assertEquals("/my/namespace", mapping.getNamespace());
162             assertEquals("actionName", mapping.getName());
163             assertNull(mapping.getMethod());
164         }
165         finally {
166             org.apache.struts2.config.Settings.set(StrutsConstants.STRUTS_ACTION_EXTENSION, old);
167         }
168     }
169     
170     // =============================
171     // === test name & namespace ===
172     // =============================
173 
174     public void testParseNameAndNamespace1() throws Exception {
175         ActionMapping actionMapping = new ActionMapping();
176 
177         DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
178         defaultActionMapper.parseNameAndNamespace("someAction", actionMapping, config);
179 
180         assertEquals(actionMapping.getName(), "someAction");
181         assertEquals(actionMapping.getNamespace(), "");
182     }
183 
184     public void testParseNameAndNamespace2() throws Exception {
185         ActionMapping actionMapping = new ActionMapping();
186 
187         DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
188         defaultActionMapper.parseNameAndNamespace("/someAction", actionMapping, config);
189 
190         assertEquals(actionMapping.getName(), "someAction");
191         assertEquals(actionMapping.getNamespace(), "/");
192     }
193 
194     public void testParseNameAndNamespace3() throws Exception {
195         ActionMapping actionMapping = new ActionMapping();
196 
197         DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
198         defaultActionMapper.parseNameAndNamespace("/my/someAction", actionMapping, config);
199 
200         assertEquals(actionMapping.getName(), "someAction");
201         assertEquals(actionMapping.getNamespace(), "/my");
202     }
203 
204 
205     // ===========================
206     // === test special prefix ===
207     // ===========================
208 
209     public void testActionPrefix() throws Exception {
210         Map parameterMap = new HashMap();
211         parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction", "");
212 
213         StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
214         request.setParameterMap(parameterMap);
215         request.setupGetServletPath("/someServletPath.action");
216 
217         DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
218         ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
219 
220         assertEquals(actionMapping.getName(), "myAction");
221     }
222 
223     public void testRedirectPrefix() throws Exception {
224         Map parameterMap = new HashMap();
225         parameterMap.put(DefaultActionMapper.REDIRECT_PREFIX + "www.google.com", "");
226 
227         StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
228         request.setupGetServletPath("/someServletPath.action");
229         request.setParameterMap(parameterMap);
230 
231         DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
232         ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
233 
234         Result result = actionMapping.getResult();
235         assertNotNull(result);
236         assertTrue(result instanceof ServletRedirectResult);
237 
238         //TODO: need to test location but there's noaccess to the property/method, unless we use reflection
239     }
240 
241     public void testRedirectActionPrefix() throws Exception {
242         Map parameterMap = new HashMap();
243         parameterMap.put(DefaultActionMapper.REDIRECT_ACTION_PREFIX + "myAction", "");
244 
245         StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
246         request.setupGetServletPath("/someServletPath.action");
247         request.setParameterMap(parameterMap);
248 
249         DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
250         ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
251 
252         Result result = actionMapping.getResult();
253         assertNotNull(result);
254         assertTrue(result instanceof ServletRedirectResult);
255 
256         // TODO: need to test location but there's noaccess to the property/method, unless we use reflection
257     }
258     
259     public void testDropExtension() throws Exception {
260         DefaultActionMapper mapper = new DefaultActionMapper();
261         String name = mapper.dropExtension("foo.action");
262         assertTrue("Name not right: "+name, "foo".equals(name));
263         
264         name = mapper.dropExtension("foo.action.action");
265         assertTrue("Name not right: "+name, "foo.action".equals(name));
266         
267     }
268 
269     public void testGetUriFromActionMapper1() throws Exception {
270         DefaultActionMapper mapper = new DefaultActionMapper();
271         ActionMapping actionMapping = new ActionMapping();
272         actionMapping.setMethod("myMethod");
273         actionMapping.setName("myActionName");
274         actionMapping.setNamespace("/myNamespace");
275         String uri = mapper.getUriFromActionMapping(actionMapping);
276 
277         assertEquals("/myNamespace/myActionName!myMethod.action", uri);
278     }
279 
280     public void testGetUriFromActionMapper2() throws Exception {
281         DefaultActionMapper mapper = new DefaultActionMapper();
282         ActionMapping actionMapping = new ActionMapping();
283         actionMapping.setMethod("myMethod");
284         actionMapping.setName("myActionName");
285         actionMapping.setNamespace("/");
286         String uri = mapper.getUriFromActionMapping(actionMapping);
287 
288         assertEquals("/myActionName!myMethod.action", uri);
289     }
290 
291     public void testGetUriFromActionMapper3() throws Exception {
292         DefaultActionMapper mapper = new DefaultActionMapper();
293         ActionMapping actionMapping = new ActionMapping();
294         actionMapping.setMethod("myMethod");
295         actionMapping.setName("myActionName");
296         actionMapping.setNamespace("");
297         String uri = mapper.getUriFromActionMapping(actionMapping);
298 
299         assertEquals("/myActionName!myMethod.action", uri);
300     }
301 
302 
303     public void testGetUriFromActionMapper4() throws Exception {
304         DefaultActionMapper mapper = new DefaultActionMapper();
305         ActionMapping actionMapping = new ActionMapping();
306         actionMapping.setName("myActionName");
307         actionMapping.setNamespace("");
308         String uri = mapper.getUriFromActionMapping(actionMapping);
309 
310         assertEquals("/myActionName.action", uri);
311     }
312 
313     public void testGetUriFromActionMapper5() throws Exception {
314         DefaultActionMapper mapper = new DefaultActionMapper();
315         ActionMapping actionMapping = new ActionMapping();
316         actionMapping.setName("myActionName");
317         actionMapping.setNamespace("/");
318         String uri = mapper.getUriFromActionMapping(actionMapping);
319 
320         assertEquals("/myActionName.action", uri);
321     }
322 
323     //
324     public void testGetUriFromActionMapper6() throws Exception {
325         DefaultActionMapper mapper = new DefaultActionMapper();
326         ActionMapping actionMapping = new ActionMapping();
327         actionMapping.setMethod("myMethod");
328         actionMapping.setName("myActionName?test=bla");
329         actionMapping.setNamespace("/myNamespace");
330         String uri = mapper.getUriFromActionMapping(actionMapping);
331 
332         assertEquals("/myNamespace/myActionName!myMethod.action?test=bla", uri);
333     }
334 
335     public void testGetUriFromActionMapper7() throws Exception {
336         DefaultActionMapper mapper = new DefaultActionMapper();
337         ActionMapping actionMapping = new ActionMapping();
338         actionMapping.setMethod("myMethod");
339         actionMapping.setName("myActionName?test=bla");
340         actionMapping.setNamespace("/");
341         String uri = mapper.getUriFromActionMapping(actionMapping);
342 
343         assertEquals("/myActionName!myMethod.action?test=bla", uri);
344     }
345 
346     public void testGetUriFromActionMapper8() throws Exception {
347         DefaultActionMapper mapper = new DefaultActionMapper();
348         ActionMapping actionMapping = new ActionMapping();
349         actionMapping.setMethod("myMethod");
350         actionMapping.setName("myActionName?test=bla");
351         actionMapping.setNamespace("");
352         String uri = mapper.getUriFromActionMapping(actionMapping);
353 
354         assertEquals("/myActionName!myMethod.action?test=bla", uri);
355     }
356 
357 
358     public void testGetUriFromActionMapper9() throws Exception {
359         DefaultActionMapper mapper = new DefaultActionMapper();
360         ActionMapping actionMapping = new ActionMapping();
361         actionMapping.setName("myActionName?test=bla");
362         actionMapping.setNamespace("");
363         String uri = mapper.getUriFromActionMapping(actionMapping);
364 
365         assertEquals("/myActionName.action?test=bla", uri);
366     }
367 
368     public void testGetUriFromActionMapper10() throws Exception {
369         DefaultActionMapper mapper = new DefaultActionMapper();
370         ActionMapping actionMapping = new ActionMapping();
371         actionMapping.setName("myActionName?test=bla");
372         actionMapping.setNamespace("/");
373         String uri = mapper.getUriFromActionMapping(actionMapping);
374 
375         assertEquals("/myActionName.action?test=bla", uri);
376     }
377     
378     public void testGetUriFromActionMapper11() throws Exception {
379         DefaultActionMapper mapper = new DefaultActionMapper();
380         ActionMapping actionMapping = new ActionMapping();
381         actionMapping.setName("myActionName.action");
382         actionMapping.setNamespace("/");
383         String uri = mapper.getUriFromActionMapping(actionMapping);
384 
385         assertEquals("/myActionName.action", uri);
386     }
387     
388     public void testGetUriFromActionMapper12() throws Exception {
389         DefaultActionMapper mapper = new DefaultActionMapper();
390         ActionMapping actionMapping = new ActionMapping();
391         actionMapping.setName("myActionName.action");
392         actionMapping.setNamespace("/");
393         String uri = mapper.getUriFromActionMapping(actionMapping);
394 
395         assertEquals("/myActionName.action", uri);
396     }
397 
398 }