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