View Javadoc

1   /*
2    * $Id: TestRequestUtils.java 421119 2006-07-12 04:49:11Z wsmoak $
3    *
4    * Copyright 1999-2004 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.struts.util;
19  
20  import junit.framework.Test;
21  import junit.framework.TestSuite;
22  
23  import org.apache.struts.Globals;
24  import org.apache.struts.action.ActionForm;
25  import org.apache.struts.action.ActionMapping;
26  import org.apache.struts.action.DynaActionForm;
27  import org.apache.struts.action.RequestProcessor;
28  import org.apache.struts.config.ForwardConfig;
29  import org.apache.struts.config.ModuleConfig;
30  import org.apache.struts.mock.MockFormBean;
31  import org.apache.struts.mock.MockPrincipal;
32  import org.apache.struts.mock.TestMockBase;
33  
34  import java.net.MalformedURLException;
35  
36  /***
37   * <p>Unit tests for <code>org.apache.struts.util.RequestUtils</code>.</p>
38   *
39   * @version $Rev: 421119 $ $Date: 2005-08-14 17:24:39 -0400 (Sun, 14 Aug 2005)
40   *          $
41   */
42  public class TestRequestUtils extends TestMockBase {
43      // ----------------------------------------------------------------- Basics
44      public TestRequestUtils(String name) {
45          super(name);
46      }
47  
48      public static void main(String[] args) {
49          junit.awtui.TestRunner.main(new String[] {
50                  TestRequestUtils.class.getName()
51              });
52      }
53  
54      public static Test suite() {
55          return (new TestSuite(TestRequestUtils.class));
56      }
57  
58      // ----------------------------------------------------- Instance Variables
59      // ----------------------------------------------------- Setup and Teardown
60      public void setUp() {
61          super.setUp();
62      }
63  
64      public void tearDown() {
65          super.tearDown();
66      }
67  
68      // ------------------------------------------------------- Individual Tests
69      // ---------------------------------------------------------- absoluteURL()
70      public void testAbsoluteURL() {
71          request.setPathElements("/myapp", "/action.do", null, null);
72  
73          String url = null;
74  
75          try {
76              url = RequestUtils.absoluteURL(request, "/foo/bar.jsp").toString();
77              assertEquals("absoluteURL is correct",
78                  "http://localhost:8080/myapp/foo/bar.jsp", url);
79          } catch (MalformedURLException e) {
80              fail("Threw MalformedURLException: " + e);
81          }
82      }
83  
84      // ------------------------------------------------------------ actionURL()
85      // Default application -- extension mapping
86      public void testActionURL1() {
87          request.setAttribute(Globals.MODULE_KEY, moduleConfig);
88          request.setPathElements("/myapp", "/foo.do", null, null);
89  
90          String url =
91              RequestUtils.actionURL(request,
92                  moduleConfig.findActionConfig("/dynamic"), "*.do");
93  
94          assertNotNull("URL was returned", url);
95          assertEquals("URL value", "/dynamic.do", url);
96      }
97  
98      // Second application -- extension mapping
99      public void testActionURL2() {
100         request.setAttribute(Globals.MODULE_KEY, moduleConfig2);
101         request.setPathElements("/myapp", "/2/foo.do", null, null);
102 
103         String url =
104             RequestUtils.actionURL(request,
105                 moduleConfig2.findActionConfig("/dynamic2"), "*.do");
106 
107         assertNotNull("URL was returned", url);
108         assertEquals("URL value", "/2/dynamic2.do", url);
109     }
110 
111     // Default application -- path mapping
112     public void testActionURL3() {
113         request.setAttribute(Globals.MODULE_KEY, moduleConfig);
114         request.setPathElements("/myapp", "/do/foo", null, null);
115 
116         String url =
117             RequestUtils.actionURL(request,
118                 moduleConfig.findActionConfig("/dynamic"), "/do/*");
119 
120         assertNotNull("URL was returned", url);
121         assertEquals("URL value", "/do/dynamic", url);
122     }
123 
124     // ----------------------------------------------------- createActionForm()
125     // Default module -- No ActionForm should be created
126     public void testCreateActionForm1a() {
127         request.setPathElements("/myapp", "/noform.do", null, null);
128 
129         ActionMapping mapping =
130             (ActionMapping) moduleConfig.findActionConfig("/noform");
131 
132         assertNotNull("Found /noform mapping", mapping);
133 
134         ActionForm form =
135             RequestUtils.createActionForm(request, mapping, moduleConfig, null);
136 
137         assertNull("No ActionForm returned", form);
138     }
139 
140     // Second module -- No ActionForm should be created
141     public void testCreateActionForm1b() {
142         request.setPathElements("/myapp", "/2/noform.do", null, null);
143 
144         ActionMapping mapping =
145             (ActionMapping) moduleConfig2.findActionConfig("/noform");
146 
147         assertNotNull("Found /noform mapping", mapping);
148 
149         ActionForm form =
150             RequestUtils.createActionForm(request, mapping, moduleConfig2, null);
151 
152         assertNull("No ActionForm returned", form);
153     }
154 
155     // Default module -- Standard ActionForm should be created
156     public void testCreateActionForm2a() {
157         request.setPathElements("/myapp", "/static.do", null, null);
158 
159         ActionMapping mapping =
160             (ActionMapping) moduleConfig.findActionConfig("/static");
161 
162         assertNotNull("Found /static mapping", mapping);
163         assertNotNull("Mapping has non-null name", mapping.getName());
164         assertEquals("Mapping has correct name", "static", mapping.getName());
165         assertNotNull("AppConfig has form bean " + mapping.getName(),
166             moduleConfig.findFormBeanConfig(mapping.getName()));
167 
168         ActionForm form =
169             RequestUtils.createActionForm(request, mapping, moduleConfig, null);
170 
171         assertNotNull("ActionForm returned", form);
172         assertTrue("ActionForm of correct type", form instanceof MockFormBean);
173     }
174 
175     // Second module -- Standard ActionForm should be created
176     public void testCreateActionForm2b() {
177         request.setPathElements("/myapp", "/2/static.do", null, null);
178 
179         ActionMapping mapping =
180             (ActionMapping) moduleConfig2.findActionConfig("/static");
181 
182         assertNotNull("Found /static mapping", mapping);
183         assertNotNull("Mapping has non-null name", mapping.getName());
184         assertEquals("Mapping has correct name", "static", mapping.getName());
185         assertNotNull("AppConfig has form bean " + mapping.getName(),
186             moduleConfig.findFormBeanConfig(mapping.getName()));
187 
188         ActionForm form =
189             RequestUtils.createActionForm(request, mapping, moduleConfig2, null);
190 
191         assertNotNull("ActionForm returned", form);
192         assertTrue("ActionForm of correct type", form instanceof MockFormBean);
193     }
194 
195     // Default module -- Dynamic ActionForm should be created
196     public void testCreateActionForm3a() {
197         request.setPathElements("/myapp", "/dynamic.do", null, null);
198 
199         ActionMapping mapping =
200             (ActionMapping) moduleConfig.findActionConfig("/dynamic");
201 
202         assertNotNull("Found /dynamic mapping", mapping);
203         assertNotNull("Mapping has non-null name", mapping.getName());
204         assertEquals("Mapping has correct name", "dynamic", mapping.getName());
205         assertNotNull("AppConfig has form bean " + mapping.getName(),
206             moduleConfig.findFormBeanConfig(mapping.getName()));
207 
208         ActionForm form =
209             RequestUtils.createActionForm(request, mapping, moduleConfig, null);
210 
211         assertNotNull("ActionForm returned", form);
212         assertTrue("ActionForm of correct type", form instanceof DynaActionForm);
213     }
214 
215     // Second module -- Dynamic ActionForm should be created
216     public void testCreateActionForm3b() {
217         request.setPathElements("/myapp", "/2/dynamic2.do", null, null);
218 
219         ActionMapping mapping =
220             (ActionMapping) moduleConfig2.findActionConfig("/dynamic2");
221 
222         assertNotNull("Found /dynamic2 mapping", mapping);
223         assertNotNull("Mapping has non-null name", mapping.getName());
224         assertEquals("Mapping has correct name", "dynamic2", mapping.getName());
225         assertNotNull("AppConfig has form bean " + mapping.getName(),
226             moduleConfig2.findFormBeanConfig(mapping.getName()));
227 
228         ActionForm form =
229             RequestUtils.createActionForm(request, mapping, moduleConfig2, null);
230 
231         assertNotNull("ActionForm returned", form);
232         assertTrue("ActionForm of correct type", form instanceof DynaActionForm);
233     }
234 
235     // Default module -- Dynamic ActionForm with initializers
236     public void testCreateActionForm4a() {
237         // Retrieve an appropriately configured DynaActionForm instance
238         request.setPathElements("/myapp", "/dynamic0.do", null, null);
239 
240         ActionMapping mapping =
241             (ActionMapping) moduleConfig.findActionConfig("/dynamic0");
242 
243         assertNotNull("Found /dynamic0 mapping", mapping);
244         assertNotNull("Mapping has non-null name", mapping.getName());
245         assertEquals("Mapping has correct name", "dynamic0", mapping.getName());
246         assertNotNull("AppConfig has form bean " + mapping.getName(),
247             moduleConfig.findFormBeanConfig(mapping.getName()));
248 
249         ActionForm form =
250             RequestUtils.createActionForm(request, mapping, moduleConfig, null);
251 
252         assertNotNull("ActionForm returned", form);
253         assertTrue("ActionForm of correct type", form instanceof DynaActionForm);
254 
255         // Validate the property values
256         DynaActionForm dform = (DynaActionForm) form;
257         Boolean booleanProperty = (Boolean) dform.get("booleanProperty");
258 
259         assertTrue("booleanProperty is true", booleanProperty.booleanValue());
260 
261         String stringProperty = (String) dform.get("stringProperty");
262 
263         assertEquals("stringProperty is correct", "String Property",
264             stringProperty);
265 
266         Object value = null;
267 
268         value = dform.get("intArray1");
269         assertNotNull("intArray1 exists", value);
270         assertTrue("intArray1 is int[]", value instanceof int[]);
271 
272         int[] intArray1 = (int[]) value;
273 
274         assertEquals("intArray1 length is correct", 3, intArray1.length);
275         assertEquals("intArray1[0] value is correct", 1, intArray1[0]);
276         assertEquals("intArray1[1] value is correct", 2, intArray1[1]);
277         assertEquals("intArray1[2] value is correct", 3, intArray1[2]);
278 
279         value = dform.get("intArray2");
280         assertNotNull("intArray2 exists", value);
281         assertTrue("intArray2 is int[]", value instanceof int[]);
282 
283         int[] intArray2 = (int[]) value;
284 
285         assertEquals("intArray2 length is correct", 5, intArray2.length);
286         assertEquals("intArray2[0] value is correct", 0, intArray2[0]);
287         assertEquals("intArray2[1] value is correct", 0, intArray2[1]);
288         assertEquals("intArray2[2] value is correct", 0, intArray2[2]);
289         assertEquals("intArray2[3] value is correct", 0, intArray2[3]);
290         assertEquals("intArray2[4] value is correct", 0, intArray2[4]);
291 
292         value = dform.get("principal");
293         assertNotNull("principal exists", value);
294         assertTrue("principal is MockPrincipal", value instanceof MockPrincipal);
295 
296         value = dform.get("stringArray1");
297         assertNotNull("stringArray1 exists", value);
298         assertTrue("stringArray1 is int[]", value instanceof String[]);
299 
300         String[] stringArray1 = (String[]) value;
301 
302         assertEquals("stringArray1 length is correct", 3, stringArray1.length);
303         assertEquals("stringArray1[0] value is correct", "aaa", stringArray1[0]);
304         assertEquals("stringArray1[1] value is correct", "bbb", stringArray1[1]);
305         assertEquals("stringArray1[2] value is correct", "ccc", stringArray1[2]);
306 
307         value = dform.get("stringArray2");
308         assertNotNull("stringArray2 exists", value);
309         assertTrue("stringArray2 is int[]", value instanceof String[]);
310 
311         String[] stringArray2 = (String[]) value;
312 
313         assertEquals("stringArray2 length is correct", 3, stringArray2.length);
314         assertEquals("stringArray2[0] value is correct", new String(),
315             stringArray2[0]);
316         assertEquals("stringArray2[1] value is correct", new String(),
317             stringArray2[1]);
318         assertEquals("stringArray2[2] value is correct", new String(),
319             stringArray2[2]);
320 
321         // Different form beans should get different property value instances
322         Object value1 = null;
323         DynaActionForm dform1 =
324             (DynaActionForm) RequestUtils.createActionForm(request, mapping,
325                 moduleConfig, null);
326 
327         value = dform.get("principal");
328         value1 = dform1.get("principal");
329         assertEquals("Different form beans get equal instance values", value,
330             value1);
331         assertTrue("Different form beans get different instances 1",
332             value != value1);
333 
334         value = dform.get("stringArray1");
335         value1 = dform1.get("stringArray1");
336         assertTrue("Different form beans get different instances 2",
337             value != value1);
338 
339         dform1.set("stringProperty", "Different stringProperty value");
340         value = dform.get("stringProperty");
341         value1 = dform1.get("stringProperty");
342         assertTrue("Different form beans get different instances 3",
343             value != value1);
344     }
345 
346     // ----------------------------------------------------------- forwardURL()
347     // Default module (default forwardPattern)
348     public void testForwardURL1() {
349         request.setAttribute(Globals.MODULE_KEY, moduleConfig);
350         request.setPathElements("/myapp", "/action.do", null, null);
351 
352         ForwardConfig forward = null;
353         String result = null;
354 
355         // redirect=false, module=null
356         forward = moduleConfig.findForwardConfig("moduleForward");
357         assertNotNull("moduleForward found", forward);
358         result = RequestUtils.forwardURL(request, forward, null);
359         assertNotNull("moduleForward computed", result);
360         assertEquals("moduleForward value", "/module/forward", result);
361 
362         // redirect=true, module=null
363         forward = moduleConfig.findForwardConfig("moduleRedirect");
364         assertNotNull("moduleRedirect found", forward);
365         result = RequestUtils.forwardURL(request, forward, null);
366         assertNotNull("moduleRedirect computed", result);
367         assertEquals("moduleRedirect value", "/module/redirect", result);
368 
369         // redirect=false, module=/context
370         forward = moduleConfig.findForwardConfig("contextForward");
371         assertNotNull("contextForward found", forward);
372         result = RequestUtils.forwardURL(request, forward, null);
373         assertNotNull("contextForward computed", result);
374         assertEquals("contextForward value", "/context/forward", result);
375 
376         // redirect=true, module=/context
377         forward = moduleConfig.findForwardConfig("contextRedirect");
378         assertNotNull("contextRedirect found", forward);
379         result = RequestUtils.forwardURL(request, forward, null);
380         assertNotNull("contextRedirect computed", result);
381         assertEquals("contextRedirct value", "/context/redirect", result);
382 
383         // noslash, module=null
384         forward = moduleConfig.findForwardConfig("moduleNoslash");
385         assertNotNull("moduleNoslash found", forward);
386         result = RequestUtils.forwardURL(request, forward, null);
387         assertNotNull("moduleNoslash computed", result);
388         assertEquals("moduleNoslash value", "/module/noslash", result);
389 
390         // noslash, module=/
391         forward = moduleConfig.findForwardConfig("contextNoslash");
392         assertNotNull("contextNoslash found", forward);
393         result = RequestUtils.forwardURL(request, forward, null);
394         assertNotNull("contextNoslash computed", result);
395         assertEquals("contextNoslash value", "/context/noslash", result);
396     }
397 
398     // Second module (default forwardPattern)
399     public void testForwardURL2() {
400         request.setAttribute(Globals.MODULE_KEY, moduleConfig2);
401         request.setPathElements("/myapp", "/2/action.do", null, null);
402 
403         ForwardConfig forward = null;
404         String result = null;
405 
406         // redirect=false, module=null
407         forward = moduleConfig2.findForwardConfig("moduleForward");
408         assertNotNull("moduleForward found", forward);
409         result = RequestUtils.forwardURL(request, forward, null);
410         assertNotNull("moduleForward computed", result);
411         assertEquals("moduleForward value", "/2/module/forward", result);
412 
413         // redirect=true, module=null
414         forward = moduleConfig2.findForwardConfig("moduleRedirect");
415         assertNotNull("moduleRedirect found", forward);
416         result = RequestUtils.forwardURL(request, forward, null);
417         assertNotNull("moduleRedirect computed", result);
418         assertEquals("moduleRedirect value", "/2/module/redirect", result);
419 
420         // redirect=false, module=/context
421         forward = moduleConfig2.findForwardConfig("contextForward");
422         assertNotNull("contextForward found", forward);
423         result = RequestUtils.forwardURL(request, forward, null);
424         assertNotNull("contextForward computed", result);
425         assertEquals("contextForward value", "/context/forward", result);
426 
427         // redirect=true, module=/context
428         forward = moduleConfig2.findForwardConfig("contextRedirect");
429         assertNotNull("contextRedirect found", forward);
430         result = RequestUtils.forwardURL(request, forward, null);
431         assertNotNull("contextRedirect computed", result);
432         assertEquals("contextRedirct value", "/context/redirect", result);
433 
434         // noslash, module=null
435         forward = moduleConfig2.findForwardConfig("moduleNoslash");
436         assertNotNull("moduleNoslash found", forward);
437         result = RequestUtils.forwardURL(request, forward, null);
438         assertNotNull("moduleNoslash computed", result);
439         assertEquals("moduleNoslash value", "/2/module/noslash", result);
440 
441         // noslash, module=/
442         forward = moduleConfig2.findForwardConfig("contextNoslash");
443         assertNotNull("contextNoslash found", forward);
444         result = RequestUtils.forwardURL(request, forward, null);
445         assertNotNull("contextNoslash computed", result);
446         assertEquals("contextNoslash value", "/context/noslash", result);
447     }
448 
449     // Third module (custom forwardPattern)
450     public void testForwardURL3() {
451         request.setAttribute(Globals.MODULE_KEY, moduleConfig3);
452         request.setPathElements("/myapp", "/3/action.do", null, null);
453 
454         ForwardConfig forward = null;
455         String result = null;
456 
457         // redirect=false, module=null
458         forward = moduleConfig3.findForwardConfig("moduleForward");
459         assertNotNull("moduleForward found", forward);
460         result = RequestUtils.forwardURL(request, forward, null);
461         assertNotNull("moduleForward computed", result);
462         assertEquals("moduleForward value", "/forwarding/3/module/forward",
463             result);
464 
465         // redirect=true, module=null
466         forward = moduleConfig3.findForwardConfig("moduleRedirect");
467         assertNotNull("moduleRedirect found", forward);
468         result = RequestUtils.forwardURL(request, forward, null);
469         assertNotNull("moduleRedirect computed", result);
470         assertEquals("moduleRedirect value", "/forwarding/3/module/redirect",
471             result);
472 
473         // redirect=false, module=/context
474         forward = moduleConfig3.findForwardConfig("contextForward");
475         assertNotNull("contextForward found", forward);
476         result = RequestUtils.forwardURL(request, forward, null);
477         assertNotNull("contextForward computed", result);
478         assertEquals("contextForward value", "/forwarding/context/forward",
479             result);
480 
481         // redirect=true, module=/context
482         forward = moduleConfig3.findForwardConfig("contextRedirect");
483         assertNotNull("contextRedirect found", forward);
484         result = RequestUtils.forwardURL(request, forward, null);
485         assertNotNull("contextRedirect computed", result);
486         assertEquals("contextRedirct value", "/forwarding/context/redirect",
487             result);
488 
489         // noslash, module=null
490         forward = moduleConfig3.findForwardConfig("moduleNoslash");
491         assertNotNull("moduleNoslash found", forward);
492         result = RequestUtils.forwardURL(request, forward, null);
493         assertNotNull("moduleNoslash computed", result);
494         assertEquals("moduleNoslash value", "/forwarding/3/module/noslash",
495             result);
496 
497         // noslash, module=/
498         forward = moduleConfig3.findForwardConfig("contextNoslash");
499         assertNotNull("contextNoslash found", forward);
500         result = RequestUtils.forwardURL(request, forward, null);
501         assertNotNull("contextNoslash computed", result);
502         assertEquals("contextNoslash value", "/forwarding/context/noslash",
503             result);
504     }
505 
506     // Cross module forwards
507     public void testForwardURLa() {
508         request.setAttribute(Globals.MODULE_KEY, moduleConfig);
509         request.setPathElements("/myapp", "/action.do", null, null);
510 
511         ForwardConfig forward = null;
512         String result = null;
513 
514         // redirect=false, contextRelative=false, link to module 3
515         forward = moduleConfig3.findForwardConfig("moduleForward");
516         assertNotNull("moduleForward found", forward);
517         result = RequestUtils.forwardURL(request, forward, moduleConfig3);
518         assertNotNull("moduleForward computed", result);
519         assertEquals("moduleForward value", "/forwarding/3/module/forward",
520             result);
521 
522         // redirect=true, contextRelative=false, link to module 3
523         forward = moduleConfig3.findForwardConfig("moduleRedirect");
524         assertNotNull("moduleRedirect found", forward);
525         result = RequestUtils.forwardURL(request, forward, moduleConfig3);
526         assertNotNull("moduleRedirect computed", result);
527         assertEquals("moduleRedirect value", "/forwarding/3/module/redirect",
528             result);
529 
530         // redirect=false, module=/context
531         forward = moduleConfig3.findForwardConfig("contextForward");
532         assertNotNull("contextForward found", forward);
533         result = RequestUtils.forwardURL(request, forward, moduleConfig3);
534         assertNotNull("contextForward computed", result);
535         assertEquals("contextForward value", "/forwarding/context/forward",
536             result);
537 
538         // redirect=true, module=/context
539         forward = moduleConfig3.findForwardConfig("contextRedirect");
540         assertNotNull("contextRedirect found", forward);
541         result = RequestUtils.forwardURL(request, forward, moduleConfig3);
542         assertNotNull("contextRedirect computed", result);
543         assertEquals("contextRedirct value", "/forwarding/context/redirect",
544             result);
545 
546         // noslash, contextRelative=false, link to module 3
547         forward = moduleConfig3.findForwardConfig("moduleNoslash");
548         assertNotNull("moduleNoslash found", forward);
549         result = RequestUtils.forwardURL(request, forward, moduleConfig3);
550         assertNotNull("moduleNoslash computed", result);
551         assertEquals("moduleNoslash value", "/forwarding/3/module/noslash",
552             result);
553 
554         // noslash, module=/
555         forward = moduleConfig3.findForwardConfig("contextNoslash");
556         assertNotNull("contextNoslash found", forward);
557         result = RequestUtils.forwardURL(request, forward, moduleConfig3);
558         assertNotNull("contextNoslash computed", result);
559         assertEquals("contextNoslash value", "/forwarding/context/noslash",
560             result);
561     }
562 
563     // ----------------------------------------------------------- requestURL()
564     public void testRequestURL() {
565         request.setPathElements("/myapp", "/foo.do", null, null);
566 
567         String url = null;
568 
569         try {
570             url = RequestUtils.requestURL(request).toString();
571         } catch (MalformedURLException e) {
572             fail("MalformedURLException: " + e);
573         }
574 
575         assertNotNull("URL was returned", url);
576         assertEquals("URL value", "http://localhost:8080/myapp/foo.do", url);
577     }
578 
579     // ---------------------------------------------------- selectApplication()
580     // Map to the default module -- direct
581     public void testSelectApplication1a() {
582         request.setPathElements("/myapp", "/noform.do", null, null);
583         ModuleUtils.getInstance().selectModule(request, context);
584 
585         ModuleConfig moduleConfig =
586             (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
587 
588         assertNotNull("Selected a module", moduleConfig);
589         assertEquals("Selected correct module", "", moduleConfig.getPrefix());
590 
591         // FIXME - check module resources?
592     }
593 
594     // Map to the second module -- direct
595     public void testSelectApplication1b() {
596         String[] prefixes = { "/1", "/2" };
597 
598         context.setAttribute(Globals.MODULE_PREFIXES_KEY, prefixes);
599         request.setPathElements("/myapp", "/2/noform.do", null, null);
600 
601         ModuleUtils.getInstance().selectModule(request, context);
602 
603         ModuleConfig moduleConfig =
604             (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
605 
606         assertNotNull("Selected a module", moduleConfig);
607         assertEquals("Selected correct module", "/2", moduleConfig.getPrefix());
608 
609         // FIXME - check module resources?
610     }
611 
612     // Map to the default module -- include
613     public void testSelectApplication2a() {
614         request.setPathElements("/myapp", "/2/noform.do", null, null);
615         request.setAttribute(RequestProcessor.INCLUDE_SERVLET_PATH, "/noform.do");
616         ModuleUtils.getInstance().selectModule(request, context);
617 
618         ModuleConfig moduleConfig =
619             (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
620 
621         assertNotNull("Selected an application", moduleConfig);
622         assertEquals("Selected correct application", "",
623             moduleConfig.getPrefix());
624 
625         // FIXME - check application resources?
626     }
627 
628     // Map to the second module -- include
629     public void testSelectApplication2b() {
630         String[] prefixes = { "/1", "/2" };
631 
632         context.setAttribute(Globals.MODULE_PREFIXES_KEY, prefixes);
633         request.setPathElements("/myapp", "/noform.do", null, null);
634         request.setAttribute(RequestProcessor.INCLUDE_SERVLET_PATH,
635             "/2/noform.do");
636         ModuleUtils.getInstance().selectModule(request, context);
637 
638         ModuleConfig moduleConfig =
639             (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
640 
641         assertNotNull("Selected a module", moduleConfig);
642         assertEquals("Selected correct module", "/2", moduleConfig.getPrefix());
643 
644         // FIXME - check application resources?
645     }
646 
647     // ------------------------------------------------------------ serverURL()
648     // Basic test on values in mock objects
649     public void testServerURL() {
650         String url = null;
651 
652         try {
653             url = RequestUtils.serverURL(request).toString();
654         } catch (MalformedURLException e) {
655             fail("Threw MalformedURLException: " + e);
656         }
657 
658         assertNotNull("serverURL is present", url);
659         assertEquals("serverURL value", "http://localhost:8080", url);
660     }
661 }