View Javadoc

1   /*
2    * $Id: IfTagTest.java 474191 2006-11-13 08:30:40Z mrdon $
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.struts2.views.jsp;
22  
23  import javax.servlet.jsp.JspException;
24  import javax.servlet.jsp.tagext.TagSupport;
25  
26  import junit.framework.TestCase;
27  
28  import org.apache.struts2.ServletActionContext;
29  import org.apache.struts2.StrutsTestCase;
30  
31  import com.mockobjects.servlet.MockJspWriter;
32  import com.mockobjects.servlet.MockPageContext;
33  import com.opensymphony.xwork2.ActionContext;
34  import com.opensymphony.xwork2.util.ValueStack;
35  import com.opensymphony.xwork2.util.ValueStackFactory;
36  
37  
38  /***
39   */
40  public class IfTagTest extends StrutsTestCase {
41  
42      IfTag tag;
43      MockPageContext pageContext;
44      ValueStack stack;
45  
46  
47      public void testNonBooleanTest() {
48          // set up the stack
49          Foo foo = new Foo();
50          foo.setNum(1);
51          stack.push(foo);
52  
53          // set up the test
54          tag.setTest("num");
55  
56          int result = 0;
57  
58          try {
59              result = tag.doStartTag();
60          } catch (JspException e) {
61              e.printStackTrace();
62              fail();
63          }
64  
65          assertEquals(TagSupport.EVAL_BODY_INCLUDE, result);
66  
67          try {
68              result = tag.doEndTag();
69          } catch (JspException e) {
70              e.printStackTrace();
71              fail();
72          }
73      }
74  
75      public void testTestError() {
76          // set up the stack
77          Foo foo = new Foo();
78          foo.setNum(2);
79          stack.push(foo);
80  
81          // set up the test
82          tag.setTest("nuuuuum == 2");
83  
84          int result = 0;
85  
86          try {
87              result = tag.doStartTag();
88          } catch (JspException e) {
89              e.printStackTrace();
90              fail();
91          }
92  
93          assertEquals(TagSupport.SKIP_BODY, result);
94  
95          try {
96              result = tag.doEndTag();
97          } catch (JspException e) {
98              e.printStackTrace();
99              fail();
100         }
101     }
102 
103     public void testTestFalse() {
104         // set up the stack
105         Foo foo = new Foo();
106         foo.setNum(2);
107         stack.push(foo);
108 
109         // set up the test
110         tag.setTest("num != 2");
111 
112         int result = 0;
113 
114         try {
115             result = tag.doStartTag();
116         } catch (JspException e) {
117             e.printStackTrace();
118             fail();
119         }
120 
121         assertEquals(TagSupport.SKIP_BODY, result);
122 
123         try {
124             result = tag.doEndTag();
125         } catch (JspException e) {
126             e.printStackTrace();
127             fail();
128         }
129     }
130 
131     public void testTestTrue() {
132         // set up the stack
133         Foo foo = new Foo();
134         foo.setNum(2);
135         stack.push(foo);
136 
137         // set up the test
138         tag.setTest("num == 2");
139 
140         int result = 0;
141         //tag.setPageContext(pageContext);
142 
143         try {
144             result = tag.doStartTag();
145         } catch (JspException e) {
146             e.printStackTrace();
147             fail();
148         }
149 
150         assertEquals(TagSupport.EVAL_BODY_INCLUDE, result);
151 
152         try {
153             result = tag.doEndTag();
154         } catch (JspException e) {
155             e.printStackTrace();
156             fail();
157         }
158     }
159 
160 
161     public void testIfElse1() throws Exception {
162         IfTag ifTag = new IfTag();
163         ifTag.setPageContext(pageContext);
164         ifTag.setTest("true");
165 
166         ElseTag elseTag = new ElseTag();
167         elseTag.setPageContext(pageContext);
168 
169         int r1 = ifTag.doStartTag();
170         ifTag.doEndTag();
171         int r2 = elseTag.doStartTag();
172         elseTag.doEndTag();
173 
174         assertEquals(TagSupport.EVAL_BODY_INCLUDE, r1);
175         assertEquals(TagSupport.SKIP_BODY, r2);
176     }
177 
178     public void testIfElse2() throws Exception {
179         IfTag ifTag = new IfTag();
180         ifTag.setPageContext(pageContext);
181         ifTag.setTest("false");
182 
183         ElseTag elseTag = new ElseTag();
184         elseTag.setPageContext(pageContext);
185 
186         int r1 = ifTag.doStartTag();
187         ifTag.doEndTag();
188         int r2 = elseTag.doStartTag();
189         elseTag.doEndTag();
190 
191         assertEquals(TagSupport.SKIP_BODY, r1);
192         assertEquals(TagSupport.EVAL_BODY_INCLUDE, r2);
193     }
194 
195     public void testIfElseIf() throws Exception {
196         IfTag ifTag = new IfTag();
197         ifTag.setPageContext(pageContext);
198         ifTag.setTest("false");
199 
200         ElseIfTag elseIfTag1 = new ElseIfTag();
201         elseIfTag1.setPageContext(pageContext);
202         elseIfTag1.setTest("false");
203 
204         ElseIfTag elseIfTag2 = new ElseIfTag();
205         elseIfTag2.setPageContext(pageContext);
206         elseIfTag2.setTest("true");
207 
208         ElseIfTag elseIfTag3 = new ElseIfTag();
209         elseIfTag3.setPageContext(pageContext);
210         elseIfTag3.setTest("true");
211 
212         int r1 = ifTag.doStartTag();
213         ifTag.doEndTag();
214         int r2 = elseIfTag1.doStartTag();
215         elseIfTag1.doEndTag();
216         int r3 = elseIfTag2.doStartTag();
217         elseIfTag2.doEndTag();
218         int r4 = elseIfTag3.doStartTag();
219         elseIfTag3.doEndTag();
220 
221         assertEquals(TagSupport.SKIP_BODY, r1);
222         assertEquals(TagSupport.SKIP_BODY, r2);
223         assertEquals(TagSupport.EVAL_BODY_INCLUDE, r3);
224         assertEquals(TagSupport.SKIP_BODY, r4);
225     }
226 
227     public void testIfElseIfElse() throws Exception {
228         IfTag ifTag = new IfTag();
229         ifTag.setPageContext(pageContext);
230         ifTag.setTest("false");
231 
232         ElseIfTag elseIfTag1 = new ElseIfTag();
233         elseIfTag1.setPageContext(pageContext);
234         elseIfTag1.setTest("false");
235 
236         ElseIfTag elseIfTag2 = new ElseIfTag();
237         elseIfTag2.setPageContext(pageContext);
238         elseIfTag2.setTest("false");
239 
240         ElseIfTag elseIfTag3 = new ElseIfTag();
241         elseIfTag3.setPageContext(pageContext);
242         elseIfTag3.setTest("false");
243 
244         ElseTag elseTag = new ElseTag();
245         elseTag.setPageContext(pageContext);
246 
247         int r1 = ifTag.doStartTag();
248         ifTag.doEndTag();
249         int r2 = elseIfTag1.doStartTag();
250         elseIfTag1.doEndTag();
251         int r3 = elseIfTag2.doStartTag();
252         elseIfTag2.doEndTag();
253         int r4 = elseIfTag3.doStartTag();
254         elseIfTag3.doEndTag();
255         int r5 = elseTag.doStartTag();
256         elseTag.doEndTag();
257 
258         assertEquals(TagSupport.SKIP_BODY, r1);
259         assertEquals(TagSupport.SKIP_BODY, r2);
260         assertEquals(TagSupport.SKIP_BODY, r3);
261         assertEquals(TagSupport.SKIP_BODY, r4);
262         assertEquals(TagSupport.EVAL_BODY_INCLUDE, r5);
263     }
264 
265 
266     public void testNestedIfElse1() throws Exception {
267         IfTag ifTag = new IfTag();
268         ifTag.setPageContext(pageContext);
269         ifTag.setTest("true");
270 
271         IfTag nestedIfTag = new IfTag();
272         nestedIfTag.setPageContext(pageContext);
273         nestedIfTag.setTest("true");
274 
275         ElseTag elseTag = new ElseTag();
276         elseTag.setPageContext(pageContext);
277 
278         int r1 = ifTag.doStartTag();
279         int r2 = nestedIfTag.doStartTag();
280         int r3 = nestedIfTag.doEndTag();
281         int r4 = ifTag.doEndTag();
282         int r5 = elseTag.doStartTag();
283         int r6 = elseTag.doEndTag();
284 
285         assertEquals(TagSupport.EVAL_BODY_INCLUDE, r1);
286         assertEquals(TagSupport.EVAL_BODY_INCLUDE, r2);
287         assertEquals(TagSupport.EVAL_PAGE, r3);
288         assertEquals(TagSupport.EVAL_PAGE, r4);
289         assertEquals(TagSupport.SKIP_BODY, r5);
290         assertEquals(TagSupport.EVAL_PAGE, r6);
291     }
292 
293     public void testNestedIfElse2() throws Exception {
294         IfTag ifTag = new IfTag();
295         ifTag.setPageContext(pageContext);
296         ifTag.setTest("true");
297 
298         IfTag nestedIfTag = new IfTag();
299         nestedIfTag.setPageContext(pageContext);
300         nestedIfTag.setTest("false");
301 
302         ElseTag elseTag = new ElseTag();
303         elseTag.setPageContext(pageContext);
304 
305         int r1 = ifTag.doStartTag();
306         int r2 = nestedIfTag.doStartTag();
307         int r3 = nestedIfTag.doEndTag();
308         int r4 = ifTag.doEndTag();
309         int r5 = elseTag.doStartTag();
310         int r6 = elseTag.doEndTag();
311 
312         assertEquals(TagSupport.EVAL_BODY_INCLUDE, r1);
313         assertEquals(TagSupport.SKIP_BODY, r2);
314         assertEquals(TagSupport.EVAL_PAGE, r3);
315         assertEquals(TagSupport.EVAL_PAGE, r4);
316         assertEquals(TagSupport.SKIP_BODY, r5);
317         assertEquals(TagSupport.EVAL_PAGE, r6);
318     }
319 
320 
321 
322 
323     protected void setUp() throws Exception {
324         super.setUp();
325         // create the needed objects
326         tag = new IfTag();
327         stack = ValueStackFactory.getFactory().createValueStack();
328 
329         // create the mock http servlet request
330         StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
331         ActionContext.getContext().setValueStack(stack);
332         request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
333 
334         // create the mock page context
335         pageContext = new MockPageContext();
336         pageContext.setRequest(request);
337         pageContext.setJspWriter(new MockJspWriter());
338 
339         // associate the tag with the mock page request
340         tag.setPageContext(pageContext);
341     }
342 
343 
344     class Foo {
345         int num;
346 
347         public void setNum(int num) {
348             this.num = num;
349         }
350 
351         public int getNum() {
352             return num;
353         }
354     }
355 }