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