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.Map;
20  
21  import javax.servlet.jsp.JspContext;
22  import javax.servlet.jsp.JspException;
23  import javax.servlet.jsp.PageContext;
24  
25  import org.jdom.Element;
26  import org.seasar.cubby.CubbyConstants;
27  import org.seasar.framework.util.StringUtil;
28  
29  public class InputTagTest extends SimpleTagTestCase {
30  
31  	private InputTag tag;
32  
33  	@Override
34  	protected void setUp() throws Exception {
35  		super.setUp();
36  		tag = new InputTag();
37  		setupSimpleTag(tag);
38  		setupErrors(context);
39  		setUpParams(context);
40  		Map<String, String[]> map = new HashMap<String, String[]>();
41  		map.put("stringField", new String[] { "outputValue" });
42  		tag.setParent(new MockFormTag(map));
43  	}
44  
45  	void setUpParams(JspContext context) {
46  		Map<String, Object[]> map = new HashMap<String, Object[]>();
47  		map.put("stringField", new String[] { "paramsValue" });
48  		context.setAttribute(CubbyConstants.ATTR_PARAMS, map,
49  				PageContext.REQUEST_SCOPE);
50  	}
51  
52  	void setValidationFail() {
53  		context.setAttribute(CubbyConstants.ATTR_VALIDATION_FAIL, Boolean.TRUE,
54  				PageContext.REQUEST_SCOPE);
55  	}
56  
57  	public void testDoTagCheckboxValueRequred() throws Exception {
58  		tag.setName("stringField");
59  		tag.setCheckedValue("value1");
60  		tag.setType("checkbox");
61  		try {
62  			tag.doTag();
63  			fail("checkboxではvalue属性は必須");
64  		} catch (JspException ex) {
65  			System.out.println(ex);
66  			assertTrue(true);
67  		}
68  	}
69  
70  	public void testDoTagCheckbox1() throws Exception {
71  		tag.setType("checkbox");
72  		tag.setName("stringField");
73  		tag.setValue("outputValue");
74  		tag.doTag();
75  
76  		System.out.println(context.getResult());
77  
78  		Element element = getResultAsElementFromContext();
79  		String message = "valueが指定";
80  		assertTrue(message, StringUtil.isEmpty(element.getValue()));
81  		assertEquals(message, 4, element.getAttributes().size());
82  		assertEquals(message, "checkbox", element.getAttributeValue("type"));
83  		assertEquals(message, "outputValue", element.getAttributeValue("value"));
84  		assertEquals(message, "stringField", element.getAttributeValue("name"));
85  		assertEquals(message, "checked", element.getAttributeValue("checked"));
86  		// assertEquals("valueが指定",
87  		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
88  		// checked=\"true\"/>\n", context.getResult());
89  	}
90  
91  	public void testDoTagCheckbox2() throws Exception {
92  		tag.setType("checkbox");
93  		tag.setName("stringField");
94  		tag.setValue("value1");
95  		tag.doTag();
96  
97  		System.out.println(context.getResult());
98  
99  		Element element = getResultAsElementFromContext();
100 		String message = "valueが指定";
101 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
102 		assertEquals(message, 3, element.getAttributes().size());
103 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
104 		assertEquals(message, "value1", element.getAttributeValue("value"));
105 		assertEquals(message, "stringField", element.getAttributeValue("name"));
106 		// assertEquals("valueが指定",
107 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
108 		// />\n", context.getResult());
109 	}
110 
111 	public void testDoTagCheckboxWithCheckedValue1() throws Exception {
112 		tag.setType("checkbox");
113 		tag.setName("stringField");
114 		tag.setValue("value1");
115 		tag.setCheckedValue("checkedValue");
116 		tag.doTag();
117 
118 		System.out.println(context.getResult());
119 
120 		Element element = getResultAsElementFromContext();
121 		String message = "valueが指定";
122 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
123 		assertEquals(message, 3, element.getAttributes().size());
124 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
125 		assertEquals(message, "value1", element.getAttributeValue("value"));
126 		assertEquals(message, "stringField", element.getAttributeValue("name"));
127 		// assertEquals("valueが指定",
128 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
129 		// />\n", context.getResult());
130 	}
131 
132 	public void testDoTagCheckboxWithCheckedValue2() throws Exception {
133 		tag.setType("checkbox");
134 		tag.setName("stringField");
135 		tag.setValue("value1");
136 		tag.setCheckedValue("value1");
137 		tag.doTag();
138 
139 		System.out.println(context.getResult());
140 
141 		Element element = getResultAsElementFromContext();
142 		String message = "valueが指定";
143 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
144 		assertEquals(message, 4, element.getAttributes().size());
145 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
146 		assertEquals(message, "value1", element.getAttributeValue("value"));
147 		assertEquals(message, "stringField", element.getAttributeValue("name"));
148 		assertEquals(message, "checked", element.getAttributeValue("checked"));
149 		// assertEquals("valueが指定",
150 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
151 		// />\n", context.getResult());
152 	}
153 
154 	public void testDoTagCheckboxWithCheckedValueError1() throws Exception {
155 		setValidationFail();
156 
157 		tag.setType("checkbox");
158 		tag.setName("stringField");
159 		tag.setValue("value1");
160 		tag.setCheckedValue("value1");
161 		tag.doTag();
162 		System.out.println(context.getResult());
163 
164 		Element element = getResultAsElementFromContext();
165 		String message = "valueが指定";
166 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
167 		assertEquals(message, 3, element.getAttributes().size());
168 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
169 		assertEquals(message, "value1", element.getAttributeValue("value"));
170 		assertEquals(message, "stringField", element.getAttributeValue("name"));
171 		// assertEquals("valueが指定",
172 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
173 		// />\n", context.getResult());
174 	}
175 
176 	public void testDoTagCheckboxError1() throws Exception {
177 		setValidationFail();
178 
179 		tag.setType("checkbox");
180 		tag.setName("stringField");
181 		tag.setValue("paramsValue");
182 		tag.doTag();
183 
184 		System.out.println(context.getResult());
185 
186 		Element element = getResultAsElementFromContext();
187 		String message = "valueが指定";
188 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
189 		assertEquals(message, 4, element.getAttributes().size());
190 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
191 		assertEquals(message, "paramsValue", element.getAttributeValue("value"));
192 		assertEquals(message, "stringField", element.getAttributeValue("name"));
193 		assertEquals(message, "checked", element.getAttributeValue("checked"));
194 		// assertEquals("valueが指定",
195 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
196 		// checked=\"true\"/>\n", context.getResult());
197 	}
198 
199 	public void testDoTagCheckboxError2() throws Exception {
200 		setValidationFail();
201 
202 		tag.setType("checkbox");
203 		tag.setName("stringField");
204 		tag.setValue("value1");
205 		tag.doTag();
206 
207 		System.out.println(context.getResult());
208 
209 		Element element = getResultAsElementFromContext();
210 		String message = "valueが指定";
211 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
212 		assertEquals(message, 3, element.getAttributes().size());
213 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
214 		assertEquals(message, "value1", element.getAttributeValue("value"));
215 		assertEquals(message, "stringField", element.getAttributeValue("name"));
216 		// assertEquals("valueが指定",
217 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
218 		// />\n", context.getResult());
219 	}
220 
221 	public void testDoTagRadioValueRequred() throws Exception {
222 		tag.setName("stringField");
223 		tag.setCheckedValue("value1");
224 		tag.setType("radio");
225 		try {
226 			tag.doTag();
227 			fail("radioではvalue属性は必須");
228 		} catch (JspException ex) {
229 			assertTrue(true);
230 		}
231 	}
232 
233 	public void testDoTagRadio1() throws Exception {
234 		tag.setType("radio");
235 		tag.setName("stringField");
236 		tag.setValue("outputValue");
237 		tag.doTag();
238 
239 		System.out.println(context.getResult());
240 
241 		Element element = getResultAsElementFromContext();
242 		String message = "valueが指定";
243 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
244 		assertEquals(message, 4, element.getAttributes().size());
245 		assertEquals(message, "radio", element.getAttributeValue("type"));
246 		assertEquals(message, "outputValue", element.getAttributeValue("value"));
247 		assertEquals(message, "stringField", element.getAttributeValue("name"));
248 		assertEquals(message, "checked", element.getAttributeValue("checked"));
249 		// assertEquals("valueが指定",
250 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
251 		// checked=\"true\"/>\n", context.getResult());
252 	}
253 
254 	public void testDoTagRadio2() throws Exception {
255 		tag.setType("radio");
256 		tag.setName("stringField");
257 		tag.setValue("value1");
258 		tag.doTag();
259 
260 		System.out.println(context.getResult());
261 
262 		Element element = getResultAsElementFromContext();
263 		String message = "valueが指定";
264 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
265 		assertEquals(message, 3, element.getAttributes().size());
266 		assertEquals(message, "radio", element.getAttributeValue("type"));
267 		assertEquals(message, "value1", element.getAttributeValue("value"));
268 		assertEquals(message, "stringField", element.getAttributeValue("name"));
269 		// assertEquals("valueが指定",
270 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
271 		// />\n", context.getResult());
272 	}
273 
274 	public void testDoTagRadioError1() throws Exception {
275 		setValidationFail();
276 
277 		tag.setType("radio");
278 		tag.setName("stringField");
279 		tag.setValue("paramsValue");
280 		tag.doTag();
281 
282 		System.out.println(context.getResult());
283 
284 		Element element = getResultAsElementFromContext();
285 		String message = "valueが指定";
286 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
287 		assertEquals(message, 4, element.getAttributes().size());
288 		assertEquals(message, "radio", element.getAttributeValue("type"));
289 		assertEquals(message, "paramsValue", element.getAttributeValue("value"));
290 		assertEquals(message, "stringField", element.getAttributeValue("name"));
291 		assertEquals(message, "checked", element.getAttributeValue("checked"));
292 		// assertEquals("valueが指定",
293 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
294 		// checked=\"true\"/>\n", context.getResult());
295 	}
296 
297 	public void testDoTagRadioError2() throws Exception {
298 		setValidationFail();
299 
300 		tag.setType("radio");
301 		tag.setName("stringField");
302 		tag.setValue("value1");
303 		tag.doTag();
304 
305 		System.out.println(context.getResult());
306 
307 		Element element = getResultAsElementFromContext();
308 		String message = "valueが指定";
309 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
310 		assertEquals(message, 3, element.getAttributes().size());
311 		assertEquals(message, "radio", element.getAttributeValue("type"));
312 		assertEquals(message, "value1", element.getAttributeValue("value"));
313 		assertEquals(message, "stringField", element.getAttributeValue("name"));
314 		// assertEquals("valueが指定",
315 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
316 		// />\n", context.getResult());
317 	}
318 
319 	public void testDoTagText1() throws Exception {
320 		tag.setType("text");
321 		tag.setName("stringField");
322 		tag.setValue("value1");
323 		tag.doTag();
324 
325 		System.out.println(context.getResult());
326 
327 		Element element = getResultAsElementFromContext();
328 		String message = "valueが指定";
329 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
330 		assertEquals(message, 3, element.getAttributes().size());
331 		assertEquals(message, "text", element.getAttributeValue("type"));
332 		assertEquals(message, "value1", element.getAttributeValue("value"));
333 		assertEquals(message, "stringField", element.getAttributeValue("name"));
334 		// assertEquals("valueが指定",
335 		// "<input type=\"text\" value=\"value1\" name=\"stringField\" />\n",
336 		// context.getResult());
337 	}
338 
339 	public void testDoTagText2() throws Exception {
340 		tag.setType("text");
341 		tag.setName("stringField");
342 		// tag.setValue("value1");
343 		tag.doTag();
344 
345 		System.out.println(context.getResult());
346 
347 		Element element = getResultAsElementFromContext();
348 		String message = "valueが指定";
349 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
350 		assertEquals(message, 3, element.getAttributes().size());
351 		assertEquals(message, "text", element.getAttributeValue("type"));
352 		assertEquals(message, "outputValue", element.getAttributeValue("value"));
353 		assertEquals(message, "stringField", element.getAttributeValue("name"));
354 		// assertEquals("valueが指定",
355 		// "<input type=\"text\" value=\"value1\" name=\"stringField\" />\n",
356 		// context.getResult());
357 	}
358 
359 	public void testDoTagTextError1() throws Exception {
360 		setValidationFail();
361 
362 		tag.setType("text");
363 		tag.setName("stringField");
364 		tag.setValue("value1");
365 		tag.doTag();
366 
367 		System.out.println(context.getResult());
368 
369 		Element element = getResultAsElementFromContext();
370 		String message = "valueが指定";
371 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
372 		assertEquals(message, 3, element.getAttributes().size());
373 		assertEquals(message, "text", element.getAttributeValue("type"));
374 		assertEquals(message, "paramsValue", element.getAttributeValue("value"));
375 		assertEquals(message, "stringField", element.getAttributeValue("name"));
376 		// assertEquals("valueが指定",
377 		// "<input type=\"text\" value=\"value1\" name=\"stringField\" />\n",
378 		// context.getResult());
379 	}
380 
381 	public void testDoTagTextError2() throws Exception {
382 		setValidationFail();
383 
384 		tag.setType("text");
385 		tag.setName("stringField");
386 		// tag.setValue("value1");
387 		tag.doTag();
388 
389 		System.out.println(context.getResult());
390 
391 		Element element = getResultAsElementFromContext();
392 		String message = "valueが指定";
393 		assertTrue(message, StringUtil.isEmpty(element.getValue()));
394 		assertEquals(message, 3, element.getAttributes().size());
395 		assertEquals(message, "text", element.getAttributeValue("type"));
396 		assertEquals(message, "paramsValue", element.getAttributeValue("value"));
397 		assertEquals(message, "stringField", element.getAttributeValue("name"));
398 		// assertEquals("valueが指定",
399 		// "<input type=\"text\" value=\"value1\" name=\"stringField\" />\n",
400 		// context.getResult());
401 	}
402 
403 }