    1   /*
    2    * $Id: TestRequestUtilsPopulate.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
    22  package org.apache.struts.util;
    23
    24  import javax.servlet.ServletException;
    25
    26  import junit.framework.Test;
    27  import junit.framework.TestSuite;
    28
    29  import org.apache.struts.action.ActionMapping;
    30  import org.apache.struts.util.RequestUtils;
    31  import org.apache.struts.Globals;
    32  import org.apache.struts.mock.TestMockBase;
    33  import org.apache.struts.mock.MockFormBean;
    34  import org.apache.struts.mock.MockMultipartRequestHandler;
    35
    36  /**
    37   * Unit tests for the RequestUtil's <code>populate</code> method.
    38   *
    39   * @version $Rev: 471754 $
    40   */
    41  public class TestRequestUtilsPopulate extends TestMockBase {
    42
    43      /**
    44       * Defines the testcase name for JUnit.
    45       *
    46       * @param theName the testcase's name.
    47       */
    48      public TestRequestUtilsPopulate(String theName) {
    49          super(theName);
    50      }
    51
    52      /**
    53       * Start the tests.
    54       *
    55       * @param theArgs the arguments. Not used
    56       */
    57      public static void main(String[] theArgs) {
    58          junit.awtui.TestRunner.main(
    59              new String[] { TestRequestUtilsPopulate.class.getName()});
    60      }
    61
    62      /**
    63       * @return a test suite (<code>TestSuite</code>) that includes all methods
    64       *         starting with "test"
    65       */
    66      public static Test suite() {
    67          // All methods starting with "test" will be executed in the test suite.
    68          return new TestSuite(TestRequestUtilsPopulate.class);
    69      }
    70
    71      public void setUp() {
    72          super.setUp();
    73      }
    74
    75      public void tearDown() {
    76          super.tearDown();
    77      }
    78
    79      /**
    80       * Ensure that the getMultipartRequestHandler cannot be seen in
    81       * a subclass of ActionForm.
    82       *
    83       * The purpose of this test is to ensure that Bug #38534 is fixed.
    84       *
    85       */
    86      public void testMultipartVisibility() throws Exception {
    87
    88          String mockMappingName = "mockMapping";
    89          String stringValue     = "Test";
    90
    91          MockFormBean  mockForm = new MockFormBean();
    92          ActionMapping mapping  = new ActionMapping();
    93          mapping.setName(mockMappingName);
    94
    95          // Set up the mock HttpServletRequest
    96          request.setMethod("POST");
    97          request.setContentType("multipart/form-data");
    98          request.setAttribute(Globals.MULTIPART_KEY, MockMultipartRequestHandler.class.getName());
    99          request.setAttribute(Globals.MAPPING_KEY, mapping);
    100
    101         request.addParameter("stringProperty", stringValue);
    102         request.addParameter("multipartRequestHandler.mapping.name", "Bad");
    103
    104         // Check the Mapping/ActionForm before
    105         assertNull("Multipart Handler already set",    mockForm.getMultipartRequestHandler());
    106         assertEquals("Mapping name not set correctly", mockMappingName, mapping.getName());
    107
    108         // Try to populate
    109         try {
    110             RequestUtils.populate(mockForm, request);
    111         } catch(ServletException se) {
    112             // Expected BeanUtils.populate() to throw a NestedNullException
    113             // which gets wrapped in RequestUtils in a ServletException
    114             assertEquals("Unexpected type of Exception thrown", "BeanUtils.populate", se.getMessage());
    115         }
    116
    117         // Check the Mapping/ActionForm after
    118         assertNotNull("Multipart Handler Missing", mockForm.getMultipartRequestHandler());
    119         assertEquals("Mapping name has been modified", mockMappingName, mapping.getName());
    120
    121     }
    122
    123 }