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