View Javadoc

1   /*
2    * $Id: IteratorGeneratorTagTest.java 651946 2008-04-27 13:41:38Z apetrelli $
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.struts2.views.jsp;
23  
24  import java.util.Iterator;
25  
26  import org.apache.struts2.util.IteratorGenerator.Converter;
27  import org.apache.struts2.views.jsp.iterator.IteratorGeneratorTag;
28  
29  import com.opensymphony.xwork2.Action;
30  import com.opensymphony.xwork2.ActionSupport;
31  
32  /***
33   * Test case for IteratorGeneratorTag.
34   *
35   */
36  public class IteratorGeneratorTagTest extends AbstractTagTest {
37  
38      public void testGeneratorBasic() throws Exception {
39          IteratorGeneratorTag tag = new IteratorGeneratorTag();
40  
41          tag.setPageContext(pageContext);
42          tag.setVal("%{'aaa,bbb,ccc,ddd,eee'}");
43          tag.doStartTag();
44          Object topOfStack = stack.findValue("top");
45  
46  
47          assertTrue(topOfStack instanceof Iterator);
48          // 1
49          assertTrue(((Iterator)topOfStack).hasNext());
50          assertEquals(((Iterator)topOfStack).next(), "aaa");
51          // 2
52          assertTrue(((Iterator)topOfStack).hasNext());
53          assertEquals(((Iterator)topOfStack).next(), "bbb");
54          // 3
55          assertTrue(((Iterator)topOfStack).hasNext());
56          assertEquals(((Iterator)topOfStack).next(), "ccc");
57          // 4
58          assertTrue(((Iterator)topOfStack).hasNext());
59          assertEquals(((Iterator)topOfStack).next(), "ddd");
60          // 5
61          assertTrue(((Iterator)topOfStack).hasNext());
62          assertEquals(((Iterator)topOfStack).next(),"eee");
63  
64          assertFalse(((Iterator)topOfStack).hasNext());
65  
66          tag.doEndTag();
67          Object afterTopOfStack = stack.findValue("top");
68  
69  
70          assertNotSame(afterTopOfStack, topOfStack);
71      }
72  
73      public void testGeneratorWithSeparator() throws Exception {
74          IteratorGeneratorTag tag = new IteratorGeneratorTag();
75  
76          tag.setPageContext(pageContext);
77          tag.setVal("%{'aaa|bbb|ccc|ddd|eee'}");
78          tag.setSeparator("|");
79          tag.doStartTag();
80          Object topOfStack = stack.findValue("top");
81          tag.doEndTag();
82          Object afterTopOfStack = stack.findValue("top");
83  
84          assertTrue(topOfStack instanceof Iterator);
85          // 1
86          assertTrue(((Iterator)topOfStack).hasNext());
87          assertEquals(((Iterator)topOfStack).next(), "aaa");
88          // 2
89          assertTrue(((Iterator)topOfStack).hasNext());
90          assertEquals(((Iterator)topOfStack).next(), "bbb");
91          // 3
92          assertTrue(((Iterator)topOfStack).hasNext());
93          assertEquals(((Iterator)topOfStack).next(), "ccc");
94          // 4
95          assertTrue(((Iterator)topOfStack).hasNext());
96          assertEquals(((Iterator)topOfStack).next(), "ddd");
97          // 5
98          assertTrue(((Iterator)topOfStack).hasNext());
99          assertEquals(((Iterator)topOfStack).next(), "eee");
100 
101         assertFalse(((Iterator)topOfStack).hasNext());
102         assertNotSame(afterTopOfStack, topOfStack);
103     }
104 
105     public void testGeneratorWithConverter() throws Exception {
106         IteratorGeneratorTag tag = new IteratorGeneratorTag();
107 
108         tag.setPageContext(pageContext);
109         tag.setVal("%{'aaa, bbb, ccc, ddd, eee'}");
110         tag.setConverter("myConverter");
111         tag.doStartTag();
112         Object topOfStack = stack.findValue("top");
113         tag.doEndTag();
114         Object afterTopOfStack = stack.findValue("top");
115 
116         assertTrue(topOfStack instanceof Iterator);
117         // 1.
118         assertTrue(((Iterator)topOfStack).hasNext());
119         assertEquals(((Iterator)topOfStack).next(), "myConverter-aaa");
120         // 2
121         assertTrue(((Iterator)topOfStack).hasNext());
122         assertEquals(((Iterator)topOfStack).next(), "myConverter-bbb");
123         // 3
124         assertTrue(((Iterator)topOfStack).hasNext());
125         assertEquals(((Iterator)topOfStack).next(), "myConverter-ccc");
126         // 4.
127         assertTrue(((Iterator)topOfStack).hasNext());
128         assertEquals(((Iterator)topOfStack).next(), "myConverter-ddd");
129         // 5.
130         assertTrue(((Iterator)topOfStack).hasNext());
131         assertEquals(((Iterator)topOfStack).next(), "myConverter-eee");
132 
133         assertFalse(((Iterator)topOfStack).hasNext());
134         assertNotSame(afterTopOfStack, topOfStack);
135     }
136 
137     public void testGeneratorWithId() throws Exception {
138         IteratorGeneratorTag tag = new IteratorGeneratorTag();
139         tag.setPageContext(pageContext);
140         tag.setVal("%{'aaa,bbb,ccc,ddd,eee'}");
141         tag.setId("myPageContextAttId");
142         tag.doStartTag();
143         tag.doEndTag();
144 
145         Object pageContextIterator = stack.findValue("myPageContextAttId");
146 
147         assertTrue(pageContextIterator instanceof Iterator);
148         // 1
149         assertTrue(((Iterator)pageContextIterator).hasNext());
150         assertEquals(((Iterator)pageContextIterator).next(), "aaa");
151         // 2.
152         assertTrue(((Iterator)pageContextIterator).hasNext());
153         assertEquals(((Iterator)pageContextIterator).next(), "bbb");
154         // 3.
155         assertTrue(((Iterator)pageContextIterator).hasNext());
156         assertEquals(((Iterator)pageContextIterator).next(), "ccc");
157         // 4
158         assertTrue(((Iterator)pageContextIterator).hasNext());
159         assertEquals(((Iterator)pageContextIterator).next(), "ddd");
160         // 5
161         assertTrue(((Iterator)pageContextIterator).hasNext());
162         assertEquals(((Iterator)pageContextIterator).next(), "eee");
163 
164         assertFalse(((Iterator)pageContextIterator).hasNext());
165     }
166 
167     public void testGeneratorWithCount() throws Exception {
168         IteratorGeneratorTag tag = new IteratorGeneratorTag();
169 
170         tag.setPageContext(pageContext);
171         tag.setVal("%{'aaa,bbb,ccc,ddd,eee'}");
172         tag.setCount("myCount");
173         tag.doStartTag();
174         Object topOfStack = stack.findValue("top");
175         tag.doEndTag();
176         Object afterTopOfStack = stack.findValue("top");
177 
178 
179         assertTrue(topOfStack instanceof Iterator);
180         // 1
181         assertTrue(((Iterator)topOfStack).hasNext());
182         assertEquals(((Iterator)topOfStack).next(), "aaa");
183         // 2
184         assertTrue(((Iterator)topOfStack).hasNext());
185         assertEquals(((Iterator)topOfStack).next(), "bbb");
186         // 3.
187         assertTrue(((Iterator)topOfStack).hasNext());
188         assertEquals(((Iterator)topOfStack).next(), "ccc");
189 
190         assertFalse(((Iterator)topOfStack).hasNext());
191         assertNotSame(topOfStack, afterTopOfStack);
192     }
193 
194 
195     public Action getAction() {
196         return new ActionSupport() {
197             public Converter getMyConverter() {
198                 return new Converter() {
199                     public Object convert(String value) throws Exception {
200                         return "myConverter-"+value;
201                     }
202                 };
203             }
204 
205             public int getMyCount() {
206                 return 3;
207             }
208         };
209     }
210 }
211