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