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