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