1   /*
2    * Copyright 2004-2010 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  
17  package org.seasar.cubby.tags;
18  
19  import static org.junit.Assert.assertEquals;
20  import static org.junit.Assert.assertTrue;
21  import static org.junit.Assert.fail;
22  
23  import java.util.HashMap;
24  import java.util.LinkedHashMap;
25  import java.util.Map;
26  
27  import org.jdom.Element;
28  import org.junit.Before;
29  import org.junit.Test;
30  import org.seasar.cubby.internal.util.StringUtils;
31  
32  public class SelectTagMapTest extends SimpleTagTestCase {
33  
34  	private SelectTag tag;
35  
36  	private Map<Integer, String> items = new LinkedHashMap<Integer, String>();
37  
38  	@Before
39  	public void setUp() throws Exception {
40  		tag = new SelectTag();
41  		setupSimpleTag(tag);
42  		setupErrors(context);
43  		items.put(1, "name1");
44  		items.put(2, "name2");
45  		items.put(3, "name3");
46  	}
47  
48  	@Test
49  	public void doTag1() throws Exception {
50  		Map<String, String[]> map = new HashMap<String, String[]>();
51  		map.put("stringField", new String[] { "1" });
52  		tag.setParent(new MockFormTag(map));
53  		tag.setName("stringField");
54  		tag.setDynamicAttribute(null, "id", "stringField");
55  		tag.setItems(items);
56  		tag.doTag();
57  
58  		Element element = getResultAsElementFromContext();
59  		String message = "基本";
60  		assertEquals(message, 2, element.getAttributes().size());
61  		assertEquals(message, "stringField", element.getAttributeValue("name"));
62  		assertEquals(message, "stringField", element.getAttributeValue("id"));
63  		assertEquals(message, 4, element.getChildren().size());
64  		for (Object o : element.getChildren("option")) {
65  			Element child = (Element) o;
66  			String value = child.getValue();
67  			if (StringUtils.isEmpty(value)) {
68  				assertEquals(message, 1, child.getAttributes().size());
69  				assertTrue(message, StringUtils.isEmpty(child
70  						.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, "selected", child
75  						.getAttributeValue("selected"));
76  			} else if ("name2".equals(value)) {
77  				assertEquals(message, 1, child.getAttributes().size());
78  				assertEquals(message, "2", child.getAttributeValue("value"));
79  			} else if ("name3".equals(value)) {
80  				assertEquals(message, 1, child.getAttributes().size());
81  				assertEquals(message, "3", child.getAttributeValue("value"));
82  			} else {
83  				fail(message);
84  			}
85  		}
86  		// assertEquals("基本",
87  		// "<select name=\"stringField\" id=\"stringField\" >\n" +
88  		// "<option value=\"\"></option>\n" +
89  		// "<option value=\"1\" selected=\"true\">name1</option>\n" +
90  		// "<option value=\"2\" >name2</option>\n" +
91  		// "<option value=\"3\" >name3</option>\n" +
92  		// "</select>\n", context.getResult());
93  	}
94  
95  	@Test
96  	public void doTag2() throws Exception {
97  		Map<String, String[]> map = new HashMap<String, String[]>();
98  		map.put("integerArrayField", new String[] { "1", "3" });
99  		tag.setParent(new MockFormTag(map));
100 		tag.setName("integerArrayField");
101 		tag.setDynamicAttribute(null, "size", "5");
102 		tag.setItems(items);
103 		tag.doTag();
104 
105 		Element element = getResultAsElementFromContext();
106 		String message = "selectedの対象が2つ";
107 		assertEquals(message, 2, element.getAttributes().size());
108 		assertEquals(message, "integerArrayField", element
109 				.getAttributeValue("name"));
110 		assertEquals(message, "5", element.getAttributeValue("size"));
111 		assertEquals(message, 4, element.getChildren().size());
112 		for (Object o : element.getChildren("option")) {
113 			Element child = (Element) o;
114 			String value = child.getValue();
115 			if (StringUtils.isEmpty(value)) {
116 				assertEquals(message, 1, child.getAttributes().size());
117 				assertTrue(message, StringUtils.isEmpty(child
118 						.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, "selected", child
123 						.getAttributeValue("selected"));
124 			} else if ("name2".equals(value)) {
125 				assertEquals(message, 1, child.getAttributes().size());
126 				assertEquals(message, "2", child.getAttributeValue("value"));
127 			} else if ("name3".equals(value)) {
128 				assertEquals(message, 2, child.getAttributes().size());
129 				assertEquals(message, "3", child.getAttributeValue("value"));
130 				assertEquals(message, "selected", child
131 						.getAttributeValue("selected"));
132 			} else {
133 				fail(message);
134 			}
135 		}
136 		// assertEquals("selectedの対象が2つ",
137 		// "<select size=\"5\" name=\"integerArrayField\" >\n" +
138 		// "<option value=\"\"></option>\n" +
139 		// "<option value=\"1\" selected=\"true\">name1</option>\n" +
140 		// "<option value=\"2\" >name2</option>\n" +
141 		// "<option value=\"3\" selected=\"true\">name3</option>\n" +
142 		// "</select>\n", context.getResult());
143 	}
144 
145 	@Test
146 	public void doTag4() throws Exception {
147 		Map<String, String[]> map = new HashMap<String, String[]>();
148 		map.put("stringField", new String[] { "1" });
149 		tag.setParent(new MockFormTag(map));
150 		tag.setName("stringField");
151 		tag.setItems(items);
152 		tag.setEmptyOption(false);
153 		tag.doTag();
154 
155 		Element element = getResultAsElementFromContext();
156 		String message = "emptyOption=false";
157 		assertEquals(message, 1, element.getAttributes().size());
158 		assertEquals(message, "stringField", element.getAttributeValue("name"));
159 		assertEquals(message, 3, element.getChildren().size());
160 		for (Object o : element.getChildren("option")) {
161 			Element child = (Element) o;
162 			String value = child.getValue();
163 			if ("name1".equals(value)) {
164 				assertEquals(message, 2, child.getAttributes().size());
165 				assertEquals(message, "1", child.getAttributeValue("value"));
166 				assertEquals(message, "selected", child
167 						.getAttributeValue("selected"));
168 			} else if ("name2".equals(value)) {
169 				assertEquals(message, 1, child.getAttributes().size());
170 				assertEquals(message, "2", child.getAttributeValue("value"));
171 			} else if ("name3".equals(value)) {
172 				assertEquals(message, 1, child.getAttributes().size());
173 				assertEquals(message, "3", child.getAttributeValue("value"));
174 			} else {
175 				fail(message);
176 			}
177 		}
178 		// assertEquals("emptyOption=false",
179 		// "<select name=\"stringField\" >\n" +
180 		// "<option value=\"1\" selected=\"true\">name1</option>\n" +
181 		// "<option value=\"2\" >name2</option>\n" +
182 		// "<option value=\"3\" >name3</option>\n" +
183 		// "</select>\n", context.getResult());
184 	}
185 
186 	@Test
187 	public void doTag5() throws Exception {
188 		Map<String, String[]> map = new HashMap<String, String[]>();
189 		map.put("stringField", new String[] { "1" });
190 		tag.setParent(new MockFormTag(map));
191 		tag.setName("stringField");
192 		tag.setItems(items);
193 		tag.setEmptyOptionLabel("empty label");
194 		tag.doTag();
195 
196 		Element element = getResultAsElementFromContext();
197 		String message = "emptyOption=true, emptyOptionLabel=empty label";
198 		assertEquals(message, 1, element.getAttributes().size());
199 		assertEquals(message, "stringField", element.getAttributeValue("name"));
200 		assertEquals(message, 4, element.getChildren().size());
201 		for (Object o : element.getChildren("option")) {
202 			Element child = (Element) o;
203 			String value = child.getValue();
204 			if ("empty label".equals(value)) {
205 				assertEquals(message, 1, child.getAttributes().size());
206 				assertTrue(message, StringUtils.isEmpty(child
207 						.getAttributeValue("value")));
208 			} else if ("name1".equals(value)) {
209 				assertEquals(message, 2, child.getAttributes().size());
210 				assertEquals(message, "1", child.getAttributeValue("value"));
211 				assertEquals(message, "selected", child
212 						.getAttributeValue("selected"));
213 			} else if ("name2".equals(value)) {
214 				assertEquals(message, 1, child.getAttributes().size());
215 				assertEquals(message, "2", child.getAttributeValue("value"));
216 			} else if ("name3".equals(value)) {
217 				assertEquals(message, 1, child.getAttributes().size());
218 				assertEquals(message, "3", child.getAttributeValue("value"));
219 			} else {
220 				fail(message);
221 			}
222 		}
223 		// assertEquals("emptyOption=true, emptyOptionLabel=empty label",
224 		// "<select name=\"stringField\" >\n" +
225 		// "<option value=\"\">empty label</option>\n" +
226 		// "<option value=\"1\" selected=\"true\">name1</option>\n" +
227 		// "<option value=\"2\" >name2</option>\n" +
228 		// "<option value=\"3\" >name3</option>\n" +
229 		// "</select>\n", context.getResult());
230 	}
231 
232 	@Test
233 	public void doTag11() throws Exception {
234 		Map<String, String[]> map = new HashMap<String, String[]>();
235 		map.put("stringField", new String[] { "1" });
236 		tag.setParent(new MockFormTag(map));
237 		tag.setName("stringField");
238 		tag.setDynamicAttribute(null, "id", "stringField");
239 		tag.setItems(items);
240 		tag.setLabelProperty("name");
241 		tag.doTag();
242 
243 		Element element = getResultAsElementFromContext();
244 		String message = "labelProperty設定";
245 		assertEquals(message, 2, element.getAttributes().size());
246 		assertEquals(message, "stringField", element.getAttributeValue("name"));
247 		assertEquals(message, "stringField", element.getAttributeValue("id"));
248 		assertEquals(message, 4, element.getChildren().size());
249 		for (Object o : element.getChildren("option")) {
250 			Element child = (Element) o;
251 			String value = child.getValue();
252 			if (StringUtils.isEmpty(value)) {
253 				assertEquals(message, 1, child.getAttributes().size());
254 				assertTrue(message, StringUtils.isEmpty(child
255 						.getAttributeValue("value")));
256 			} else if ("name1".equals(value)) {
257 				assertEquals(message, 2, child.getAttributes().size());
258 				assertEquals(message, "1", child.getAttributeValue("value"));
259 				assertEquals(message, "selected", child
260 						.getAttributeValue("selected"));
261 			} else if ("name2".equals(value)) {
262 				assertEquals(message, 1, child.getAttributes().size());
263 				assertEquals(message, "2", child.getAttributeValue("value"));
264 			} else if ("name3".equals(value)) {
265 				assertEquals(message, 1, child.getAttributes().size());
266 				assertEquals(message, "3", child.getAttributeValue("value"));
267 			} else {
268 				fail(message);
269 			}
270 		}
271 		// assertEquals("labelPropertyを設定",
272 		// "<select name=\"stringField\" id=\"stringField\" >\n" +
273 		// "<option value=\"\"></option>\n" +
274 		// "<option value=\"1\" selected=\"true\">name1</option>\n" +
275 		// "<option value=\"2\" >name2</option>\n" +
276 		// "<option value=\"3\" >name3</option>\n" +
277 		// "</select>\n", context.getResult());
278 	}
279 
280 	@Test
281 	public void doTag12() throws Exception {
282 		Map<String, String[]> map = new HashMap<String, String[]>();
283 		map.put("stringField", new String[] { "1" });
284 		tag.setParent(new MockFormTag(map));
285 		tag.setName("stringField");
286 		tag.setDynamicAttribute(null, "id", "stringField");
287 		tag.setItems(items);
288 		tag.setValueProperty("id");
289 		tag.doTag();
290 
291 		Element element = getResultAsElementFromContext();
292 		String message = "valuePropertyを設定";
293 		assertEquals(message, 2, element.getAttributes().size());
294 		assertEquals(message, "stringField", element.getAttributeValue("name"));
295 		assertEquals(message, "stringField", element.getAttributeValue("id"));
296 		assertEquals(message, 4, element.getChildren().size());
297 		for (Object o : element.getChildren("option")) {
298 			Element child = (Element) o;
299 			String value = child.getValue();
300 			if (StringUtils.isEmpty(value)) {
301 				assertEquals(message, 1, child.getAttributes().size());
302 				assertTrue(message, StringUtils.isEmpty(child
303 						.getAttributeValue("value")));
304 			} else if ("name1".equals(value)) {
305 				assertEquals(message, 2, child.getAttributes().size());
306 				assertEquals(message, "1", child.getAttributeValue("value"));
307 				assertEquals(message, "selected", child
308 						.getAttributeValue("selected"));
309 			} else if ("name2".equals(value)) {
310 				assertEquals(message, 1, child.getAttributes().size());
311 				assertEquals(message, "2", child.getAttributeValue("value"));
312 			} else if ("name3".equals(value)) {
313 				assertEquals(message, 1, child.getAttributes().size());
314 				assertEquals(message, "3", child.getAttributeValue("value"));
315 			} else {
316 				fail(message);
317 			}
318 		}
319 		// assertEquals("valuePropertyを設定",
320 		// "<select name=\"stringField\" id=\"stringField\" >\n" +
321 		// "<option value=\"\"></option>\n" +
322 		// "<option value=\"1\" selected=\"true\">name1</option>\n" +
323 		// "<option value=\"2\" >name2</option>\n" +
324 		// "<option value=\"3\" >name3</option>\n" +
325 		// "</select>\n", context.getResult());
326 	}
327 
328 	@Test
329 	public void doTag13() throws Exception {
330 		Map<String, String[]> map = new HashMap<String, String[]>();
331 		map.put("stringField", new String[] { "1" });
332 		tag.setParent(new MockFormTag(map));
333 		tag.setName("stringField");
334 		tag.setDynamicAttribute(null, "id", "stringField");
335 		tag.setItems(items);
336 		tag.setValueProperty("id");
337 		tag.setLabelProperty("name");
338 		tag.doTag();
339 
340 		Element element = getResultAsElementFromContext();
341 		String message = "valuePropertyとlabelPropertyを設定";
342 		assertEquals(message, 2, element.getAttributes().size());
343 		assertEquals(message, "stringField", element.getAttributeValue("name"));
344 		assertEquals(message, "stringField", element.getAttributeValue("id"));
345 		assertEquals(message, 4, element.getChildren().size());
346 		for (Object o : element.getChildren("option")) {
347 			Element child = (Element) o;
348 			String value = child.getValue();
349 			if (StringUtils.isEmpty(value)) {
350 				assertEquals(message, 1, child.getAttributes().size());
351 				assertTrue(message, StringUtils.isEmpty(child
352 						.getAttributeValue("value")));
353 			} else if ("name1".equals(value)) {
354 				assertEquals(message, 2, child.getAttributes().size());
355 				assertEquals(message, "1", child.getAttributeValue("value"));
356 				assertEquals(message, "selected", child
357 						.getAttributeValue("selected"));
358 			} else if ("name2".equals(value)) {
359 				assertEquals(message, 1, child.getAttributes().size());
360 				assertEquals(message, "2", child.getAttributeValue("value"));
361 			} else if ("name3".equals(value)) {
362 				assertEquals(message, 1, child.getAttributes().size());
363 				assertEquals(message, "3", child.getAttributeValue("value"));
364 			} else {
365 				fail(message);
366 			}
367 		}
368 		// assertEquals("valuePropertyとlabelPropertyを設定",
369 		// "<select name=\"stringField\" id=\"stringField\" >\n" +
370 		// "<option value=\"\"></option>\n" +
371 		// "<option value=\"1\" selected=\"true\">name1</option>\n" +
372 		// "<option value=\"2\" >name2</option>\n" +
373 		// "<option value=\"3\" >name3</option>\n" +
374 		// "</select>\n", context.getResult());
375 	}
376 
377 }