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