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 }