1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.tags;
17
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
22
23 import javax.servlet.jsp.JspTagException;
24 import javax.servlet.jsp.PageContext;
25
26 import org.jdom.Element;
27 import org.seasar.cubby.CubbyConstants;
28 import org.seasar.framework.util.StringUtil;
29
30 public class SelectTagTest extends JspTagTestCase {
31
32 SelectTag tag;
33 List<ItemBean> items = new ArrayList<ItemBean>();
34
35 @Override
36 protected void setUp() throws Exception {
37 super.setUp();
38 tag = new SelectTag();
39 setupSimpleTag(tag);
40 setupErrors(context);
41 items.add(new ItemBean(1, "name1"));
42 items.add(new ItemBean(2, "name2"));
43 items.add(new ItemBean(3, "name3"));
44 }
45
46 public void testDoTag1() throws Exception {
47 Map<String, String[]> map = new HashMap<String, String[]>();
48 map.put("stringField", new String[] { "1" });
49 context.setAttribute(CubbyConstants.ATTR_OUTPUT_VALUES, map, PageContext.PAGE_SCOPE);
50 tag.setName("stringField");
51 tag.setDynamicAttribute(null, "id", "stringField");
52 tag.setItems(items);
53 tag.setValueProperty("id");
54 tag.setLabelProperty("name");
55 tag.doTag();
56
57 System.out.println(context.getResult());
58
59 Element element = getResultAsElementFromContext();
60 String message = "基本";
61 assertEquals(message, 2, element.getAttributes().size());
62 assertEquals(message, "stringField", element.getAttributeValue("name"));
63 assertEquals(message, "stringField", element.getAttributeValue("id"));
64 assertEquals(message, 4, element.getChildren().size());
65 for (Object o : element.getChildren("option")) {
66 Element child = (Element) o;
67 String value = child.getValue();
68 if (StringUtil.isEmpty(value)) {
69 assertEquals(message, 1, child.getAttributes().size());
70 assertTrue(message, StringUtil.isEmpty(child.getAttributeValue("value")));
71 } else if ("name1".equals(value)) {
72 assertEquals(message, 2, child.getAttributes().size());
73 assertEquals(message, "1", child.getAttributeValue("value"));
74 assertEquals(message, "true", child.getAttributeValue("selected"));
75 } else if ("name2".equals(value)) {
76 assertEquals(message, 1, child.getAttributes().size());
77 assertEquals(message, "2", child.getAttributeValue("value"));
78 } else if ("name3".equals(value)) {
79 assertEquals(message, 1, child.getAttributes().size());
80 assertEquals(message, "3", child.getAttributeValue("value"));
81 } else {
82 fail(message);
83 }
84 }
85
86
87
88
89
90
91
92 }
93
94 public void testDoTag2() throws Exception {
95 Map<String, String[]> map = new HashMap<String, String[]>();
96 map.put("integerArrayField", new String[] { "1", "3" });
97 context.setAttribute(CubbyConstants.ATTR_OUTPUT_VALUES, map, PageContext.PAGE_SCOPE);
98 tag.setName("integerArrayField");
99 tag.setDynamicAttribute(null, "size", "5");
100 tag.setItems(items);
101 tag.setValueProperty("id");
102 tag.setLabelProperty("name");
103 tag.doTag();
104
105 System.out.println(context.getResult());
106
107 Element element = getResultAsElementFromContext();
108 String message = "selectedの対象が2つ";
109 assertEquals(message, 2, element.getAttributes().size());
110 assertEquals(message, "integerArrayField", element.getAttributeValue("name"));
111 assertEquals(message, "5", element.getAttributeValue("size"));
112 assertEquals(message, 4, element.getChildren().size());
113 for (Object o : element.getChildren("option")) {
114 Element child = (Element) o;
115 String value = child.getValue();
116 if (StringUtil.isEmpty(value)) {
117 assertEquals(message, 1, child.getAttributes().size());
118 assertTrue(message, StringUtil.isEmpty(child.getAttributeValue("value")));
119 } else if ("name1".equals(value)) {
120 assertEquals(message, 2, child.getAttributes().size());
121 assertEquals(message, "1", child.getAttributeValue("value"));
122 assertEquals(message, "true", child.getAttributeValue("selected"));
123 } else if ("name2".equals(value)) {
124 assertEquals(message, 1, child.getAttributes().size());
125 assertEquals(message, "2", child.getAttributeValue("value"));
126 } else if ("name3".equals(value)) {
127 assertEquals(message, 2, child.getAttributes().size());
128 assertEquals(message, "3", child.getAttributeValue("value"));
129 assertEquals(message, "true", child.getAttributeValue("selected"));
130 } else {
131 fail(message);
132 }
133 }
134
135
136
137
138
139
140
141 }
142
143 public void testDoTag3() throws Exception {
144 Map<String, String[]> map = new HashMap<String, String[]>();
145 map.put("stringField", new String[] { "1" });
146 context.setAttribute(CubbyConstants.ATTR_OUTPUT_VALUES, map, PageContext.PAGE_SCOPE);
147 tag.setName("stringField");
148 tag.setDynamicAttribute(null, "id", "stringField");
149 tag.setItems(items);
150 tag.setValueProperty("id");
151 tag.doTag();
152
153 Element element = getResultAsElementFromContext();
154 String message = "labelPropertyを省略";
155 assertEquals(message, 2, element.getAttributes().size());
156 assertEquals(message, "stringField", element.getAttributeValue("name"));
157 assertEquals(message, "stringField", element.getAttributeValue("id"));
158 assertEquals(message, 4, element.getChildren().size());
159 for (Object o : element.getChildren("option")) {
160 Element child = (Element) o;
161 String value = child.getValue();
162 if (StringUtil.isEmpty(value)) {
163 assertEquals(message, 1, child.getAttributes().size());
164 assertTrue(message, StringUtil.isEmpty(child.getAttributeValue("value")));
165 } else if ("1".equals(value)) {
166 assertEquals(message, 2, child.getAttributes().size());
167 assertEquals(message, "1", child.getAttributeValue("value"));
168 assertEquals(message, "true", child.getAttributeValue("selected"));
169 } else if ("2".equals(value)) {
170 assertEquals(message, 1, child.getAttributes().size());
171 assertEquals(message, "2", child.getAttributeValue("value"));
172 } else if ("3".equals(value)) {
173 assertEquals(message, 1, child.getAttributes().size());
174 assertEquals(message, "3", child.getAttributeValue("value"));
175 } else {
176 fail(message);
177 }
178 }
179
180
181
182
183
184
185
186 }
187
188 public void testDoTag4() throws Exception {
189 Map<String, String[]> map = new HashMap<String, String[]>();
190 map.put("stringField", new String[] { "1" });
191 context.setAttribute(CubbyConstants.ATTR_OUTPUT_VALUES, map, PageContext.PAGE_SCOPE);
192 tag.setName("stringField");
193 tag.setItems(items);
194 tag.setValueProperty("id");
195 tag.setLabelProperty("name");
196 tag.setEmptyOption(false);
197 tag.doTag();
198
199 Element element = getResultAsElementFromContext();
200 String message = "emptyOption=false";
201 assertEquals(message, 1, element.getAttributes().size());
202 assertEquals(message, "stringField", element.getAttributeValue("name"));
203 assertEquals(message, 3, element.getChildren().size());
204 for (Object o : element.getChildren("option")) {
205 Element child = (Element) o;
206 String value = child.getValue();
207 if ("name1".equals(value)) {
208 assertEquals(message, 2, child.getAttributes().size());
209 assertEquals(message, "1", child.getAttributeValue("value"));
210 assertEquals(message, "true", child.getAttributeValue("selected"));
211 } else if ("name2".equals(value)) {
212 assertEquals(message, 1, child.getAttributes().size());
213 assertEquals(message, "2", child.getAttributeValue("value"));
214 } else if ("name3".equals(value)) {
215 assertEquals(message, 1, child.getAttributes().size());
216 assertEquals(message, "3", child.getAttributeValue("value"));
217 } else {
218 fail(message);
219 }
220 }
221
222
223
224
225
226
227 }
228
229 public void testDoTag5() throws Exception {
230 Map<String, String[]> map = new HashMap<String, String[]>();
231 map.put("stringField", new String[] { "1" });
232 context.setAttribute(CubbyConstants.ATTR_OUTPUT_VALUES, map, PageContext.PAGE_SCOPE);
233 tag.setName("stringField");
234 tag.setItems(items);
235 tag.setValueProperty("id");
236 tag.setLabelProperty("name");
237 tag.setEmptyOptionLabel("empty label");
238 tag.doTag();
239
240 Element element = getResultAsElementFromContext();
241 String message = "emptyOption=true, emptyOptionLabel=empty label";
242 assertEquals(message, 1, element.getAttributes().size());
243 assertEquals(message, "stringField", element.getAttributeValue("name"));
244 assertEquals(message, 4, element.getChildren().size());
245 for (Object o : element.getChildren("option")) {
246 Element child = (Element) o;
247 String value = child.getValue();
248 if ("empty label".equals(value)) {
249 assertEquals(message, 1, child.getAttributes().size());
250 assertTrue(message, StringUtil.isEmpty(child.getAttributeValue("value")));
251 } else if ("name1".equals(value)) {
252 assertEquals(message, 2, child.getAttributes().size());
253 assertEquals(message, "1", child.getAttributeValue("value"));
254 assertEquals(message, "true", child.getAttributeValue("selected"));
255 } else if ("name2".equals(value)) {
256 assertEquals(message, 1, child.getAttributes().size());
257 assertEquals(message, "2", child.getAttributeValue("value"));
258 } else if ("name3".equals(value)) {
259 assertEquals(message, 1, child.getAttributes().size());
260 assertEquals(message, "3", child.getAttributeValue("value"));
261 } else {
262 fail(message);
263 }
264 }
265
266
267
268
269
270
271
272 }
273
274 public void testDoTagNotSetValueProperty() throws Exception {
275 Map<String, String[]> map = new HashMap<String, String[]>();
276 map.put("stringField", new String[] { "1" });
277 context.setAttribute(CubbyConstants.ATTR_OUTPUT_VALUES, map, PageContext.PAGE_SCOPE);
278 tag.setName("stringField");
279 tag.setItems(items);
280 tag.setEmptyOptionLabel("empty label");
281 try {
282 tag.doTag();
283 fail();
284 } catch (JspTagException e) {
285
286 }
287 }
288
289 public static class ItemBean {
290 private Integer id;
291 private String name;
292 public ItemBean(int id, String name) {
293 this.id = id;
294 this.name = name;
295 }
296 public Integer getId() {
297 return id;
298 }
299 public void setId(Integer id) {
300 this.id = id;
301 }
302 public String getName() {
303 return name;
304 }
305 public void setName(String name) {
306 this.name = name;
307 }
308 }
309 }