1   /*
2    * Copyright 2004-2010 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  
17  package org.seasar.cubby.tags;
18  
19  import static org.junit.Assert.assertEquals;
20  import static org.junit.Assert.assertTrue;
21  import static org.junit.Assert.fail;
22  
23  import java.util.HashMap;
24  import java.util.Map;
25  
26  import javax.servlet.jsp.JspContext;
27  import javax.servlet.jsp.JspException;
28  import javax.servlet.jsp.PageContext;
29  
30  import org.jdom.Element;
31  import org.junit.Before;
32  import org.junit.Test;
33  import org.seasar.cubby.CubbyConstants;
34  import org.seasar.cubby.internal.util.StringUtils;
35  
36  public class InputTagTest extends SimpleTagTestCase {
37  
38  	private InputTag tag;
39  
40  	@Before
41  	public void setup() throws Exception {
42  		tag = new InputTag();
43  		setupSimpleTag(tag);
44  		setupErrors(context);
45  		setUpParams(context);
46  		Map<String, String[]> map = new HashMap<String, String[]>();
47  		map.put("stringField", new String[] { "outputValue" });
48  		tag.setParent(new MockFormTag(map));
49  	}
50  
51  	void setUpParams(JspContext context) {
52  		Map<String, Object[]> map = new HashMap<String, Object[]>();
53  		map.put("stringField", new String[] { "paramsValue" });
54  		context.setAttribute(CubbyConstants.ATTR_PARAMS, map,
55  				PageContext.REQUEST_SCOPE);
56  	}
57  
58  	void setValidationFail() {
59  		context.setAttribute(CubbyConstants.ATTR_VALIDATION_FAIL, Boolean.TRUE,
60  				PageContext.REQUEST_SCOPE);
61  	}
62  
63  	@Test
64  	public void doTagCheckboxValueRequred() throws Exception {
65  		tag.setName("stringField");
66  		tag.setCheckedValue("value1");
67  		tag.setType("checkbox");
68  		try {
69  			tag.doTag();
70  			fail("checkboxではvalue属性は必須");
71  		} catch (JspException ex) {
72  			System.out.println(ex);
73  			assertTrue(true);
74  		}
75  	}
76  
77  	@Test
78  	public void doTagCheckbox1() throws Exception {
79  		tag.setType("checkbox");
80  		tag.setName("stringField");
81  		tag.setValue("outputValue");
82  		tag.doTag();
83  
84  		System.out.println(context.getResult());
85  
86  		Element element = getResultAsElementFromContext();
87  		String message = "valueが指定";
88  		assertTrue(message, StringUtils.isEmpty(element.getValue()));
89  		assertEquals(message, 4, element.getAttributes().size());
90  		assertEquals(message, "checkbox", element.getAttributeValue("type"));
91  		assertEquals(message, "outputValue", element.getAttributeValue("value"));
92  		assertEquals(message, "stringField", element.getAttributeValue("name"));
93  		assertEquals(message, "checked", element.getAttributeValue("checked"));
94  		// assertEquals("valueが指定",
95  		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
96  		// checked=\"true\"/>\n", context.getResult());
97  	}
98  
99  	@Test
100 	public void doTagCheckbox2() throws Exception {
101 		tag.setType("checkbox");
102 		tag.setName("stringField");
103 		tag.setValue("value1");
104 		tag.doTag();
105 
106 		System.out.println(context.getResult());
107 
108 		Element element = getResultAsElementFromContext();
109 		String message = "valueが指定";
110 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
111 		assertEquals(message, 3, element.getAttributes().size());
112 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
113 		assertEquals(message, "value1", element.getAttributeValue("value"));
114 		assertEquals(message, "stringField", element.getAttributeValue("name"));
115 		// assertEquals("valueが指定",
116 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
117 		// />\n", context.getResult());
118 	}
119 
120 	@Test
121 	public void doTagCheckboxWithCheckedValue1() throws Exception {
122 		tag.setType("checkbox");
123 		tag.setName("stringField");
124 		tag.setValue("value1");
125 		tag.setCheckedValue("checkedValue");
126 		tag.doTag();
127 
128 		System.out.println(context.getResult());
129 
130 		Element element = getResultAsElementFromContext();
131 		String message = "valueが指定";
132 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
133 		assertEquals(message, 3, element.getAttributes().size());
134 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
135 		assertEquals(message, "value1", element.getAttributeValue("value"));
136 		assertEquals(message, "stringField", element.getAttributeValue("name"));
137 		// assertEquals("valueが指定",
138 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
139 		// />\n", context.getResult());
140 	}
141 
142 	@Test
143 	public void doTagCheckboxWithCheckedValue2() throws Exception {
144 		tag.setType("checkbox");
145 		tag.setName("stringField");
146 		tag.setValue("value1");
147 		tag.setCheckedValue("value1");
148 		tag.doTag();
149 
150 		System.out.println(context.getResult());
151 
152 		Element element = getResultAsElementFromContext();
153 		String message = "valueが指定";
154 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
155 		assertEquals(message, 4, element.getAttributes().size());
156 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
157 		assertEquals(message, "value1", element.getAttributeValue("value"));
158 		assertEquals(message, "stringField", element.getAttributeValue("name"));
159 		assertEquals(message, "checked", element.getAttributeValue("checked"));
160 		// assertEquals("valueが指定",
161 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
162 		// />\n", context.getResult());
163 	}
164 
165 	@Test
166 	public void doTagCheckboxWithCheckedValueError1() throws Exception {
167 		setValidationFail();
168 
169 		tag.setType("checkbox");
170 		tag.setName("stringField");
171 		tag.setValue("value1");
172 		tag.setCheckedValue("value1");
173 		tag.doTag();
174 		System.out.println(context.getResult());
175 
176 		Element element = getResultAsElementFromContext();
177 		String message = "valueが指定";
178 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
179 		assertEquals(message, 3, element.getAttributes().size());
180 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
181 		assertEquals(message, "value1", element.getAttributeValue("value"));
182 		assertEquals(message, "stringField", element.getAttributeValue("name"));
183 		// assertEquals("valueが指定",
184 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
185 		// />\n", context.getResult());
186 	}
187 
188 	@Test
189 	public void doTagCheckboxError1() throws Exception {
190 		setValidationFail();
191 
192 		tag.setType("checkbox");
193 		tag.setName("stringField");
194 		tag.setValue("paramsValue");
195 		tag.doTag();
196 
197 		System.out.println(context.getResult());
198 
199 		Element element = getResultAsElementFromContext();
200 		String message = "valueが指定";
201 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
202 		assertEquals(message, 4, element.getAttributes().size());
203 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
204 		assertEquals(message, "paramsValue", element.getAttributeValue("value"));
205 		assertEquals(message, "stringField", element.getAttributeValue("name"));
206 		assertEquals(message, "checked", element.getAttributeValue("checked"));
207 		// assertEquals("valueが指定",
208 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
209 		// checked=\"true\"/>\n", context.getResult());
210 	}
211 
212 	@Test
213 	public void doTagCheckboxError2() throws Exception {
214 		setValidationFail();
215 
216 		tag.setType("checkbox");
217 		tag.setName("stringField");
218 		tag.setValue("value1");
219 		tag.doTag();
220 
221 		System.out.println(context.getResult());
222 
223 		Element element = getResultAsElementFromContext();
224 		String message = "valueが指定";
225 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
226 		assertEquals(message, 3, element.getAttributes().size());
227 		assertEquals(message, "checkbox", element.getAttributeValue("type"));
228 		assertEquals(message, "value1", element.getAttributeValue("value"));
229 		assertEquals(message, "stringField", element.getAttributeValue("name"));
230 		// assertEquals("valueが指定",
231 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
232 		// />\n", context.getResult());
233 	}
234 
235 	@Test
236 	public void doTagRadioValueRequred() throws Exception {
237 		tag.setName("stringField");
238 		tag.setCheckedValue("value1");
239 		tag.setType("radio");
240 		try {
241 			tag.doTag();
242 			fail("radioではvalue属性は必須");
243 		} catch (JspException ex) {
244 			assertTrue(true);
245 		}
246 	}
247 
248 	@Test
249 	public void doTagRadio1() throws Exception {
250 		tag.setType("radio");
251 		tag.setName("stringField");
252 		tag.setValue("outputValue");
253 		tag.doTag();
254 
255 		System.out.println(context.getResult());
256 
257 		Element element = getResultAsElementFromContext();
258 		String message = "valueが指定";
259 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
260 		assertEquals(message, 4, element.getAttributes().size());
261 		assertEquals(message, "radio", element.getAttributeValue("type"));
262 		assertEquals(message, "outputValue", element.getAttributeValue("value"));
263 		assertEquals(message, "stringField", element.getAttributeValue("name"));
264 		assertEquals(message, "checked", element.getAttributeValue("checked"));
265 		// assertEquals("valueが指定",
266 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
267 		// checked=\"true\"/>\n", context.getResult());
268 	}
269 
270 	@Test
271 	public void doTagRadio2() throws Exception {
272 		tag.setType("radio");
273 		tag.setName("stringField");
274 		tag.setValue("value1");
275 		tag.doTag();
276 
277 		System.out.println(context.getResult());
278 
279 		Element element = getResultAsElementFromContext();
280 		String message = "valueが指定";
281 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
282 		assertEquals(message, 3, element.getAttributes().size());
283 		assertEquals(message, "radio", element.getAttributeValue("type"));
284 		assertEquals(message, "value1", element.getAttributeValue("value"));
285 		assertEquals(message, "stringField", element.getAttributeValue("name"));
286 		// assertEquals("valueが指定",
287 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
288 		// />\n", context.getResult());
289 	}
290 
291 	@Test
292 	public void doTagRadioError1() throws Exception {
293 		setValidationFail();
294 
295 		tag.setType("radio");
296 		tag.setName("stringField");
297 		tag.setValue("paramsValue");
298 		tag.doTag();
299 
300 		System.out.println(context.getResult());
301 
302 		Element element = getResultAsElementFromContext();
303 		String message = "valueが指定";
304 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
305 		assertEquals(message, 4, element.getAttributes().size());
306 		assertEquals(message, "radio", element.getAttributeValue("type"));
307 		assertEquals(message, "paramsValue", element.getAttributeValue("value"));
308 		assertEquals(message, "stringField", element.getAttributeValue("name"));
309 		assertEquals(message, "checked", element.getAttributeValue("checked"));
310 		// assertEquals("valueが指定",
311 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
312 		// checked=\"true\"/>\n", context.getResult());
313 	}
314 
315 	@Test
316 	public void doTagRadioError2() throws Exception {
317 		setValidationFail();
318 
319 		tag.setType("radio");
320 		tag.setName("stringField");
321 		tag.setValue("value1");
322 		tag.doTag();
323 
324 		System.out.println(context.getResult());
325 
326 		Element element = getResultAsElementFromContext();
327 		String message = "valueが指定";
328 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
329 		assertEquals(message, 3, element.getAttributes().size());
330 		assertEquals(message, "radio", element.getAttributeValue("type"));
331 		assertEquals(message, "value1", element.getAttributeValue("value"));
332 		assertEquals(message, "stringField", element.getAttributeValue("name"));
333 		// assertEquals("valueが指定",
334 		// "<input type=\"checkbox\" value=\"value1\" name=\"stringField\"
335 		// />\n", context.getResult());
336 	}
337 
338 	@Test
339 	public void doTagText1() 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, StringUtils.isEmpty(element.getValue()));
350 		assertEquals(message, 3, element.getAttributes().size());
351 		assertEquals(message, "text", element.getAttributeValue("type"));
352 		assertEquals(message, "value1", 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 	@Test
360 	public void doTagText2() throws Exception {
361 		tag.setType("text");
362 		tag.setName("stringField");
363 		// tag.setValue("value1");
364 		tag.doTag();
365 
366 		System.out.println(context.getResult());
367 
368 		Element element = getResultAsElementFromContext();
369 		String message = "valueが指定";
370 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
371 		assertEquals(message, 3, element.getAttributes().size());
372 		assertEquals(message, "text", element.getAttributeValue("type"));
373 		assertEquals(message, "outputValue", element.getAttributeValue("value"));
374 		assertEquals(message, "stringField", element.getAttributeValue("name"));
375 		// assertEquals("valueが指定",
376 		// "<input type=\"text\" value=\"value1\" name=\"stringField\" />\n",
377 		// context.getResult());
378 	}
379 
380 	@Test
381 	public void doTagTextError1() 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, StringUtils.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 	@Test
404 	public void doTagTextError2() throws Exception {
405 		setValidationFail();
406 
407 		tag.setType("text");
408 		tag.setName("stringField");
409 		// tag.setValue("value1");
410 		tag.doTag();
411 
412 		System.out.println(context.getResult());
413 
414 		Element element = getResultAsElementFromContext();
415 		String message = "valueが指定";
416 		assertTrue(message, StringUtils.isEmpty(element.getValue()));
417 		assertEquals(message, 3, element.getAttributes().size());
418 		assertEquals(message, "text", element.getAttributeValue("type"));
419 		assertEquals(message, "paramsValue", element.getAttributeValue("value"));
420 		assertEquals(message, "stringField", element.getAttributeValue("name"));
421 		// assertEquals("valueが指定",
422 		// "<input type=\"text\" value=\"value1\" name=\"stringField\" />\n",
423 		// context.getResult());
424 	}
425 
426 }