1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.views.jsp;
22
23 import java.util.HashMap;
24
25 import javax.servlet.jsp.JspException;
26 import javax.servlet.jsp.PageContext;
27
28 import org.apache.struts2.ServletActionContext;
29 import org.apache.struts2.StrutsException;
30 import org.apache.struts2.TestAction;
31 import org.apache.struts2.TestActionTagResult;
32 import org.apache.struts2.TestConfigurationProvider;
33 import org.apache.struts2.components.ActionComponent;
34
35 import com.opensymphony.xwork2.Action;
36 import com.opensymphony.xwork2.ActionContext;
37 import com.opensymphony.xwork2.ActionInvocation;
38 import com.opensymphony.xwork2.ActionProxy;
39 import com.opensymphony.xwork2.util.ValueStack;
40 import com.opensymphony.xwork2.util.ValueStackFactory;
41
42
43 /***
44 * Unit test for {@link ActionTag}.
45 */
46 public class ActionTagTest extends AbstractTagTest {
47
48 public void testActionTagWithNamespace() {
49 request.setupGetServletPath(TestConfigurationProvider.TEST_NAMESPACE + "/" + "foo.action");
50
51 ActionTag tag = new ActionTag();
52 tag.setPageContext(pageContext);
53 tag.setName(TestConfigurationProvider.TEST_NAMESPACE_ACTION);
54 tag.setId(TestConfigurationProvider.TEST_NAMESPACE_ACTION);
55
56 try {
57 tag.doStartTag();
58 ActionComponent ac = ((ActionComponent) tag.component);
59 tag.doEndTag();
60 ActionProxy proxy = ac.getProxy();
61
62 Object o = pageContext.findAttribute(TestConfigurationProvider.TEST_NAMESPACE_ACTION);
63 assertTrue(o instanceof TestAction);
64
65 assertEquals(TestConfigurationProvider.TEST_NAMESPACE, proxy.getNamespace());
66 } catch (JspException ex) {
67 ex.printStackTrace();
68 fail();
69 }
70 }
71
72 public void testSimple() {
73 request.setupGetServletPath("/foo.action");
74
75 ActionTag tag = new ActionTag();
76 tag.setPageContext(pageContext);
77 tag.setName("testAction");
78 tag.setId("testAction");
79
80 int stackSize = stack.size();
81
82 try {
83 tag.doStartTag();
84 tag.addParameter("foo", "myFoo");
85 tag.doEndTag();
86
87 assertEquals(stack.size(), ActionContext.getContext().getValueStack().size());
88 assertEquals("myFoo", stack.findValue("#testAction.foo"));
89 assertEquals(stackSize, stack.size());
90
91 Object o = pageContext.findAttribute("testAction");
92 assertTrue(o instanceof TestAction);
93 assertEquals("myFoo", ((TestAction) o).getFoo());
94 assertEquals(Action.SUCCESS, ((TestAction) o).getResult());
95 } catch (JspException ex) {
96 ex.printStackTrace();
97 fail();
98 }
99 }
100
101 public void testSimpleWithoutServletActionContext() {
102 ServletActionContext.setRequest(null);
103 ServletActionContext.setResponse(null);
104 this.testSimple();
105 }
106
107 public void testActionWithExecuteResult() throws Exception {
108 ActionTag tag = new ActionTag();
109 tag.setPageContext(pageContext);
110 tag.setNamespace("");
111 tag.setName("testActionTagAction");
112 tag.setExecuteResult(true);
113
114 tag.doStartTag();
115
116
117 ActionComponent component = (ActionComponent) tag.getComponent();
118
119 tag.doEndTag();
120
121 TestActionTagResult result = (TestActionTagResult) component.getProxy().getInvocation().getResult();
122
123 assertTrue(stack.getContext().containsKey(ServletActionContext.PAGE_CONTEXT));
124 assertTrue(stack.getContext().get(ServletActionContext.PAGE_CONTEXT)instanceof PageContext);
125 assertTrue(result.isExecuted());
126 }
127
128 public void testActionWithoutExecuteResult() throws Exception {
129 ActionTag tag = new ActionTag();
130 tag.setPageContext(pageContext);
131 tag.setNamespace("");
132 tag.setName("testActionTagAction");
133 tag.setExecuteResult(false);
134
135 tag.doStartTag();
136
137
138 ActionComponent component = (ActionComponent) tag.getComponent();
139
140 tag.doEndTag();
141
142 TestActionTagResult result = (TestActionTagResult) component.getProxy().getInvocation().getResult();
143
144 assertTrue(stack.getContext().containsKey(ServletActionContext.PAGE_CONTEXT));
145 assertTrue(stack.getContext().get(ServletActionContext.PAGE_CONTEXT)instanceof PageContext);
146 assertNull(result);
147 }
148
149 public void testIngoreContextParamsFalse() throws Exception {
150 ActionTag tag = new ActionTag();
151 tag.setPageContext(pageContext);
152 tag.setNamespace("");
153 tag.setName("testActionTagAction");
154 tag.setExecuteResult(false);
155 tag.setIgnoreContextParams(false);
156 ActionContext.getContext().getParameters().put("user", "Santa Claus");
157
158 tag.doStartTag();
159
160
161 ActionComponent component = (ActionComponent) tag.getComponent();
162
163 tag.doEndTag();
164
165
166 ActionInvocation ai = component.getProxy().getInvocation();
167 ActionContext ac = ai.getInvocationContext();
168 assertEquals(1, ac.getParameters().size());
169 }
170
171 public void testIngoreContextParamsTrue() throws Exception {
172 ActionTag tag = new ActionTag();
173 tag.setPageContext(pageContext);
174 tag.setNamespace("");
175 tag.setName("testActionTagAction");
176 tag.setExecuteResult(false);
177 tag.setIgnoreContextParams(true);
178 ActionContext.getContext().getParameters().put("user", "Santa Claus");
179
180 tag.doStartTag();
181
182
183 ActionComponent component = (ActionComponent) tag.getComponent();
184
185 tag.doEndTag();
186
187
188 ActionInvocation ai = component.getProxy().getInvocation();
189 ActionContext ac = ai.getInvocationContext();
190 assertEquals(0, ac.getParameters().size());
191 }
192
193 public void testNoNameDefined() throws Exception {
194 ActionTag tag = new ActionTag();
195 tag.setPageContext(pageContext);
196 tag.setNamespace("");
197 tag.setName(null);
198 tag.setExecuteResult(false);
199
200 try {
201 tag.doStartTag();
202 tag.doEndTag();
203 fail("Should have thrown RuntimeException");
204 } catch (StrutsException e) {
205 assertEquals("tag 'actioncomponent', field 'name': Action name is required. Example: updatePerson", e.getMessage());
206 }
207 }
208
209
210 public void testUnknownNameDefined() throws Exception {
211 ActionTag tag = new ActionTag();
212 tag.setPageContext(pageContext);
213 tag.setNamespace("");
214 tag.setName("UNKNOWN_NAME");
215 tag.setExecuteResult(false);
216
217 tag.doStartTag();
218 tag.doEndTag();
219
220 }
221
222 public void testActionMethodWithExecuteResult() throws Exception {
223 ActionTag tag = new ActionTag();
224 tag.setPageContext(pageContext);
225 tag.setNamespace("");
226 tag.setName("testActionTagAction!input");
227 tag.setExecuteResult(true);
228
229 tag.doStartTag();
230
231
232 ActionComponent component = (ActionComponent) tag.getComponent();
233
234 tag.doEndTag();
235
236 TestActionTagResult result = (TestActionTagResult) component.getProxy().getInvocation().getResult();
237
238 assertTrue(stack.getContext().containsKey(ServletActionContext.PAGE_CONTEXT));
239 assertTrue(stack.getContext().get(ServletActionContext.PAGE_CONTEXT)instanceof PageContext);
240 assertTrue(result.isExecuted());
241 }
242
243 protected void setUp() throws Exception {
244 super.setUp();
245
246 initDispatcher(new HashMap() {{ put("configProviders", TestConfigurationProvider.class.getName()); }});
247
248 ActionContext actionContext = new ActionContext(context);
249 actionContext.setValueStack(stack);
250 ActionContext.setContext(actionContext);
251 }
252
253 protected void tearDown() throws Exception {
254 configurationManager.destroyConfiguration();
255
256 ValueStack stack = ValueStackFactory.getFactory().createValueStack();
257 ActionContext.setContext(new ActionContext(stack.getContext()));
258 super.tearDown();
259 }
260 }