1   package org.seasar.cubby.tags;
2   
3   import java.util.ArrayList;
4   import java.util.HashMap;
5   import java.util.List;
6   
7   import javax.servlet.jsp.PageContext;
8   
9   import org.jdom.Element;
10  import org.seasar.framework.util.StringUtil;
11  
12  public class SelectTagTest extends JspTagTestCase {
13  
14  	SelectTag tag;
15  	List<ItemBean> items = new ArrayList<ItemBean>();
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.add(new ItemBean(1, "name1"));
24  		items.add(new ItemBean(2, "name2"));
25  		items.add(new ItemBean(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.setValueProperty("id");
36  		tag.setLabelProperty("name");
37  		tag.doTag();
38  
39  		Element element = getResultAsElementFromContext();
40  		String message = "基本";
41  		assertEquals(message, 2, element.getAttributes().size());
42  		assertEquals(message, "stringField", element.getAttributeValue("name"));
43  		assertEquals(message, "stringField", element.getAttributeValue("id"));
44  		assertEquals(message, 4, element.getChildren().size());
45  		for (Object o : element.getChildren("option")) {
46  			Element child = (Element) o;
47  			String value = child.getValue();
48  			if (StringUtil.isEmpty(value)) {
49  				assertEquals(message, 1, child.getAttributes().size());
50  				assertTrue(message, StringUtil.isEmpty(child.getAttributeValue("value")));
51  			} else if ("name1".equals(value)) {
52  				assertEquals(message, 2, child.getAttributes().size());
53  				assertEquals(message, "1", child.getAttributeValue("value"));
54  				assertEquals(message, "true", child.getAttributeValue("selected"));
55  			} else if ("name2".equals(value)) {
56  				assertEquals(message, 1, child.getAttributes().size());
57  				assertEquals(message, "2", child.getAttributeValue("value"));
58  			} else if ("name3".equals(value)) {
59  				assertEquals(message, 1, child.getAttributes().size());
60  				assertEquals(message, "3", child.getAttributeValue("value"));
61  			} else {
62  				fail(message);
63  			}
64  		}
65  //		assertEquals("基本",
66  //				"<select name=\"stringField\" id=\"stringField\" >\n" +
67  //				"<option value=\"\"></option>\n" +
68  //				"<option value=\"1\" selected=\"true\">name1</option>\n" +
69  //				"<option value=\"2\" >name2</option>\n" +
70  //				"<option value=\"3\" >name3</option>\n" +
71  //				"</select>\n", context.getResult());
72  	}
73  
74  	public void testDoTag2() throws Exception {
75  		FormDto form = new FormDto();
76  		form.setIntegerArrayField(new Integer[] {1, 3});
77  		context.setAttribute("__form", form, PageContext.REQUEST_SCOPE);
78  		tag.setDynamicAttribute(null, "name", "integerArrayField");
79  		tag.setDynamicAttribute(null, "size", "5");
80  		tag.setItems(items);
81  		tag.setValueProperty("id");
82  		tag.setLabelProperty("name");
83  		tag.doTag();
84  
85  		Element element = getResultAsElementFromContext();
86  		String message = "selectedの対象が2つ";
87  		assertEquals(message, 2, element.getAttributes().size());
88  		assertEquals(message, "integerArrayField", element.getAttributeValue("name"));
89  		assertEquals(message, "5", element.getAttributeValue("size"));
90  		assertEquals(message, 4, element.getChildren().size());
91  		for (Object o : element.getChildren("option")) {
92  			Element child = (Element) o;
93  			String value = child.getValue();
94  			if (StringUtil.isEmpty(value)) {
95  				assertEquals(message, 1, child.getAttributes().size());
96  				assertTrue(message, StringUtil.isEmpty(child.getAttributeValue("value")));
97  			} else if ("name1".equals(value)) {
98  				assertEquals(message, 2, child.getAttributes().size());
99  				assertEquals(message, "1", child.getAttributeValue("value"));
100 				assertEquals(message, "true", child.getAttributeValue("selected"));
101 			} else if ("name2".equals(value)) {
102 				assertEquals(message, 1, child.getAttributes().size());
103 				assertEquals(message, "2", child.getAttributeValue("value"));
104 			} else if ("name3".equals(value)) {
105 				assertEquals(message, 2, child.getAttributes().size());
106 				assertEquals(message, "3", child.getAttributeValue("value"));
107 				assertEquals(message, "true", child.getAttributeValue("selected"));
108 			} else {
109 				fail(message);
110 			}
111 		}
112 //		assertEquals("selectedの対象が2つ",
113 //				"<select size=\"5\" name=\"integerArrayField\" >\n" +
114 //				"<option value=\"\"></option>\n" +
115 //				"<option value=\"1\" selected=\"true\">name1</option>\n" +
116 //				"<option value=\"2\" >name2</option>\n" +
117 //				"<option value=\"3\" selected=\"true\">name3</option>\n" +
118 //				"</select>\n", context.getResult());
119 	}
120 
121 	public void testDoTag3() throws Exception {
122 		FormDto form = new FormDto();
123 		form.setStringField("1");
124 		context.setAttribute("__form", form, PageContext.REQUEST_SCOPE);
125 		tag.setDynamicAttribute(null, "name", "stringField");
126 		tag.setDynamicAttribute(null, "id", "stringField");
127 		tag.setItems(items);
128 		tag.setValueProperty("id");
129 		tag.doTag();
130 
131 		Element element = getResultAsElementFromContext();
132 		String message = "labelPropertyを省略";
133 		assertEquals(message, 2, element.getAttributes().size());
134 		assertEquals(message, "stringField", element.getAttributeValue("name"));
135 		assertEquals(message, "stringField", element.getAttributeValue("id"));
136 		assertEquals(message, 4, element.getChildren().size());
137 		for (Object o : element.getChildren("option")) {
138 			Element child = (Element) o;
139 			String value = child.getValue();
140 			if (StringUtil.isEmpty(value)) {
141 				assertEquals(message, 1, child.getAttributes().size());
142 				assertTrue(message, StringUtil.isEmpty(child.getAttributeValue("value")));
143 			} else if ("1".equals(value)) {
144 				assertEquals(message, 2, child.getAttributes().size());
145 				assertEquals(message, "1", child.getAttributeValue("value"));
146 				assertEquals(message, "true", child.getAttributeValue("selected"));
147 			} else if ("2".equals(value)) {
148 				assertEquals(message, 1, child.getAttributes().size());
149 				assertEquals(message, "2", child.getAttributeValue("value"));
150 			} else if ("3".equals(value)) {
151 				assertEquals(message, 1, child.getAttributes().size());
152 				assertEquals(message, "3", child.getAttributeValue("value"));
153 			} else {
154 				fail(message);
155 			}
156 		}
157 //		assertEquals("labelPropertyを省略",
158 //				"<select name=\"stringField\" id=\"stringField\" >\n" +
159 //				"<option value=\"\"></option>\n" +
160 //				"<option value=\"1\" selected=\"true\">1</option>\n" +
161 //				"<option value=\"2\" >2</option>\n" +
162 //				"<option value=\"3\" >3</option>\n" +
163 //				"</select>\n", context.getResult());
164 	}
165 
166 	public void testDoTag4() throws Exception {
167 		FormDto form = new FormDto();
168 		form.setStringField("1");
169 		context.setAttribute("__form", form, PageContext.REQUEST_SCOPE);
170 		tag.setDynamicAttribute(null, "name", "stringField");
171 		tag.setItems(items);
172 		tag.setValueProperty("id");
173 		tag.setLabelProperty("name");
174 		tag.setEmptyOption(false);
175 		tag.doTag();
176 
177 		Element element = getResultAsElementFromContext();
178 		String message = "emptyOption=false";
179 		assertEquals(message, 1, element.getAttributes().size());
180 		assertEquals(message, "stringField", element.getAttributeValue("name"));
181 		assertEquals(message, 3, element.getChildren().size());
182 		for (Object o : element.getChildren("option")) {
183 			Element child = (Element) o;
184 			String value = child.getValue();
185 			if ("name1".equals(value)) {
186 				assertEquals(message, 2, child.getAttributes().size());
187 				assertEquals(message, "1", child.getAttributeValue("value"));
188 				assertEquals(message, "true", child.getAttributeValue("selected"));
189 			} else if ("name2".equals(value)) {
190 				assertEquals(message, 1, child.getAttributes().size());
191 				assertEquals(message, "2", child.getAttributeValue("value"));
192 			} else if ("name3".equals(value)) {
193 				assertEquals(message, 1, child.getAttributes().size());
194 				assertEquals(message, "3", child.getAttributeValue("value"));
195 			} else {
196 				fail(message);
197 			}
198 		}
199 //		assertEquals("emptyOption=false",
200 //				"<select name=\"stringField\" >\n" +
201 //				"<option value=\"1\" selected=\"true\">name1</option>\n" +
202 //				"<option value=\"2\" >name2</option>\n" +
203 //				"<option value=\"3\" >name3</option>\n" +
204 //				"</select>\n", context.getResult());
205 	}
206 
207 	public void testDoTag5() throws Exception {
208 		FormDto form = new FormDto();
209 		form.setStringField("1");
210 		context.setAttribute("__form", form, PageContext.REQUEST_SCOPE);
211 		tag.setDynamicAttribute(null, "name", "stringField");
212 		tag.setItems(items);
213 		tag.setValueProperty("id");
214 		tag.setLabelProperty("name");
215 		tag.setEmptyOptionLabel("empty label");
216 		tag.doTag();
217 
218 		Element element = getResultAsElementFromContext();
219 		String message = "emptyOption=true, emptyOptionLabel=empty label";
220 		assertEquals(message, 1, element.getAttributes().size());
221 		assertEquals(message, "stringField", element.getAttributeValue("name"));
222 		assertEquals(message, 4, element.getChildren().size());
223 		for (Object o : element.getChildren("option")) {
224 			Element child = (Element) o;
225 			String value = child.getValue();
226 			if ("empty label".equals(value)) {
227 				assertEquals(message, 1, child.getAttributes().size());
228 				assertTrue(message, StringUtil.isEmpty(child.getAttributeValue("value")));
229 			} else if ("name1".equals(value)) {
230 				assertEquals(message, 2, child.getAttributes().size());
231 				assertEquals(message, "1", child.getAttributeValue("value"));
232 				assertEquals(message, "true", child.getAttributeValue("selected"));
233 			} else if ("name2".equals(value)) {
234 				assertEquals(message, 1, child.getAttributes().size());
235 				assertEquals(message, "2", child.getAttributeValue("value"));
236 			} else if ("name3".equals(value)) {
237 				assertEquals(message, 1, child.getAttributes().size());
238 				assertEquals(message, "3", child.getAttributeValue("value"));
239 			} else {
240 				fail(message);
241 			}
242 		}
243 //		assertEquals("emptyOption=true, emptyOptionLabel=empty label",
244 //				"<select name=\"stringField\" >\n" +
245 //				"<option value=\"\">empty label</option>\n" +
246 //				"<option value=\"1\" selected=\"true\">name1</option>\n" +
247 //				"<option value=\"2\" >name2</option>\n" +
248 //				"<option value=\"3\" >name3</option>\n" +
249 //				"</select>\n", context.getResult());
250 	}
251 
252 	public static class ItemBean {
253 		private Integer id;
254 		private String name;
255 		public ItemBean(int id, String name) {
256 			this.id = id;
257 			this.name = name;
258 		}
259 		public Integer getId() {
260 			return id;
261 		}
262 		public void setId(Integer id) {
263 			this.id = id;
264 		}
265 		public String getName() {
266 			return name;
267 		}
268 		public void setName(String name) {
269 			this.name = name;
270 		}
271 	}
272 }