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