1   /*
2    * $Id: TestCopyFormToContext.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.chain.commands.generic;
22  
23  import junit.framework.TestCase;
24  
25  import org.apache.struts.action.ActionForm;
26  import org.apache.struts.action.DynaActionForm;
27  import org.apache.struts.chain.contexts.MockActionContext;
28  import org.apache.struts.config.ActionConfig;
29  import org.apache.struts.config.FormBeanConfig;
30  import org.apache.struts.config.FormPropertyConfig;
31  import org.apache.struts.config.impl.ModuleConfigImpl;
32  import org.apache.struts.mock.MockFormBean;
33  
34  /**
35   * @version $Id: TestCopyFormToContext.java 161516 2005-04-15 19:22:47Z
36   *          germuska $
37   */
38  public class TestCopyFormToContext extends TestCase {
39      private static final String POST_EXECUTION_CONTEXT_KEY = "afterTest";
40      private MockActionContext context = null;
41  
42      public static void main(String[] args) {
43          junit.textui.TestRunner.run(TestCopyFormToContext.class);
44      }
45  
46      /*
47       * @see TestCase#setUp()
48       */
49      protected void setUp() throws Exception {
50          context = new MockActionContext();
51  
52          ModuleConfigImpl moduleConfig = new ModuleConfigImpl("/");
53  
54          context.setModuleConfig(moduleConfig);
55  
56          FormBeanConfig fooFBC = new FormBeanConfig();
57  
58          fooFBC.setName("foo");
59          fooFBC.setType("org.apache.struts.mock.MockFormBean");
60          moduleConfig.addFormBeanConfig(fooFBC);
61  
62          FormBeanConfig barFBC = new FormBeanConfig();
63  
64          barFBC.setName("bar");
65          barFBC.setType("org.apache.struts.action.DynaActionForm"); // use a different type so we can verify lookups better
66  
67          FormPropertyConfig fpc = new FormPropertyConfig();
68  
69          fpc.setName("property");
70          fpc.setType("java.lang.String");
71          fpc.setInitial("test");
72          barFBC.addFormPropertyConfig(fpc);
73          moduleConfig.addFormBeanConfig(barFBC);
74  
75          ActionConfig testActionConfig = new ActionConfig();
76  
77          testActionConfig.setPath("/Test");
78          testActionConfig.setName("foo");
79          testActionConfig.setScope("request");
80          moduleConfig.addActionConfig(testActionConfig);
81  
82          moduleConfig.freeze(); // otherwise, ActionConfigMatcher will be null and we'll get an NPE...
83      }
84  
85      public void testLookupByNameAndRequestScope()
86          throws Exception {
87          CopyFormToContext command = new CopyFormToContext();
88          String formName = "foo";
89  
90          command.setFormName(formName);
91          command.setScope("request");
92          command.setToKey(POST_EXECUTION_CONTEXT_KEY);
93  
94          assertNull(context.get(POST_EXECUTION_CONTEXT_KEY));
95          assertNull(context.getRequestScope().get(formName));
96          assertNull(context.getSessionScope().get(formName));
97  
98          command.execute(context);
99  
100         assertNotNull(context.get(POST_EXECUTION_CONTEXT_KEY));
101         assertNotNull(context.getRequestScope().get(formName));
102         assertNull(context.getSessionScope().get(formName));
103 
104         assertSame(context.get(POST_EXECUTION_CONTEXT_KEY),
105             context.getRequestScope().get(formName));
106 
107         ActionForm theForm =
108             (ActionForm) context.get(POST_EXECUTION_CONTEXT_KEY);
109 
110         assertTrue(theForm instanceof MockFormBean);
111     }
112 
113     public void testLookupByActionPath()
114         throws Exception {
115         CopyFormToContext command = new CopyFormToContext();
116 
117         command.setActionPath("/Test");
118         command.setToKey(POST_EXECUTION_CONTEXT_KEY);
119 
120         String formName = "foo"; // we know this, even though it's not being used for the lookup.
121 
122         assertNull(context.get(POST_EXECUTION_CONTEXT_KEY));
123         assertNull(context.getRequestScope().get(formName));
124         assertNull(context.getSessionScope().get(formName));
125 
126         command.execute(context);
127 
128         assertNotNull(context.get(POST_EXECUTION_CONTEXT_KEY));
129         assertNotNull(context.getRequestScope().get(formName));
130         assertNull(context.getSessionScope().get(formName));
131 
132         assertSame(context.get(POST_EXECUTION_CONTEXT_KEY),
133             context.getRequestScope().get(formName));
134 
135         ActionForm theForm =
136             (ActionForm) context.get(POST_EXECUTION_CONTEXT_KEY);
137 
138         assertTrue(theForm instanceof MockFormBean);
139     }
140 
141     public void testLookupByNameAndSessionScope()
142         throws Exception {
143         CopyFormToContext command = new CopyFormToContext();
144         String formName = "bar";
145 
146         command.setFormName(formName);
147         command.setScope("session");
148         command.setToKey(POST_EXECUTION_CONTEXT_KEY);
149 
150         assertNull(context.get(POST_EXECUTION_CONTEXT_KEY));
151         assertNull(context.getRequestScope().get(formName));
152         assertNull(context.getSessionScope().get(formName));
153 
154         command.execute(context);
155 
156         assertNotNull(context.get(POST_EXECUTION_CONTEXT_KEY));
157         assertNull(context.getRequestScope().get(formName));
158         assertNotNull(context.getSessionScope().get(formName));
159 
160         assertSame(context.get(POST_EXECUTION_CONTEXT_KEY),
161             context.getSessionScope().get(formName));
162 
163         ActionForm theForm =
164             (ActionForm) context.get(POST_EXECUTION_CONTEXT_KEY);
165 
166         assertTrue(theForm instanceof DynaActionForm);
167 
168         DynaActionForm dForm = (DynaActionForm) theForm;
169 
170         assertEquals("test", dForm.get("property"));
171     }
172 
173     public void testExceptionHandlingWithNullFormName()
174         throws Exception {
175         CopyFormToContext command = new CopyFormToContext();
176         String formName = "bar";
177 
178         // skip setting form name to test exception
179         // command.setFormName(formName);
180         command.setScope("session");
181         command.setToKey(POST_EXECUTION_CONTEXT_KEY);
182 
183         assertNull(context.get(POST_EXECUTION_CONTEXT_KEY));
184         assertNull(context.getRequestScope().get(formName));
185         assertNull(context.getSessionScope().get(formName));
186 
187         try {
188             command.execute(context);
189             fail(
190                 "Execution should throw an exception when form name is not set.");
191         } catch (IllegalStateException e) {
192             ; // expected.
193         }
194     }
195 
196     public void testExceptionHandlingWithNullEverything()
197         throws Exception {
198         CopyFormToContext command = new CopyFormToContext();
199         String formName = "bar";
200 
201         // skip setting form name to test exception
202         // command.setFormName(formName);
203         // command.setScope("session");
204         // command.setToKey(POST_EXECUTION_CONTEXT_KEY);
205         assertNull(context.get(POST_EXECUTION_CONTEXT_KEY));
206         assertNull(context.getRequestScope().get(formName));
207         assertNull(context.getSessionScope().get(formName));
208 
209         try {
210             command.execute(context);
211             fail(
212                 "Execution should throw an exception when no properties are set.");
213         } catch (IllegalStateException e) {
214             ; // expected.
215         }
216     }
217 
218     public void testCopyToDefaultContextKey()
219         throws Exception {
220         CopyFormToContext command = new CopyFormToContext();
221         String formName = "foo";
222 
223         command.setFormName(formName);
224         command.setScope("request");
225 
226         assertNull(context.getActionForm());
227         assertNull(context.getRequestScope().get(POST_EXECUTION_CONTEXT_KEY));
228         assertNull(context.getSessionScope().get(POST_EXECUTION_CONTEXT_KEY));
229 
230         command.execute(context);
231 
232         assertNotNull(context.getActionForm());
233         assertNotNull(context.getRequestScope().get(formName));
234         assertNull(context.getSessionScope().get(formName));
235 
236         assertSame(context.getActionForm(),
237             context.getRequestScope().get(formName));
238 
239         ActionForm theForm = (ActionForm) context.getActionForm();
240 
241         assertTrue(theForm instanceof MockFormBean);
242     }
243 }