KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > springframework > web > servlet > tags > BindTagTests


1 /*
2  * Copyright 2002-2005 the original author or authors.
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, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.springframework.web.servlet.tags;
18
19 import java.beans.PropertyEditorSupport JavaDoc;
20 import java.text.DateFormat JavaDoc;
21 import java.text.SimpleDateFormat JavaDoc;
22 import java.util.Date JavaDoc;
23 import java.util.Set JavaDoc;
24
25 import javax.servlet.jsp.JspException JavaDoc;
26 import javax.servlet.jsp.PageContext JavaDoc;
27 import javax.servlet.jsp.tagext.Tag JavaDoc;
28
29 import org.springframework.beans.IndexedTestBean;
30 import org.springframework.beans.NestedTestBean;
31 import org.springframework.beans.TestBean;
32 import org.springframework.beans.propertyeditors.CustomDateEditor;
33 import org.springframework.validation.BindException;
34 import org.springframework.validation.DataBinder;
35 import org.springframework.web.bind.ServletRequestDataBinder;
36 import org.springframework.web.servlet.support.BindStatus;
37
38 /**
39  * @author Juergen Hoeller
40  * @author Alef Arendsen
41  */

42 public class BindTagTests extends AbstractTagTests {
43
44     public void testBindTagWithoutErrors() throws JspException JavaDoc {
45         PageContext JavaDoc pc = createPageContext();
46         BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors();
47         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
48         BindTag tag = new BindTag();
49         tag.setPageContext(pc);
50         tag.setPath("tb");
51         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
52         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
53         assertTrue("Has status variable", status != null);
54         assertTrue("Correct expression", status.getExpression() == null);
55         assertTrue("Correct value", status.getValue() == null);
56         assertTrue("Correct displayValue", "".equals(status.getDisplayValue()));
57         assertTrue("Correct isError", !status.isError());
58         assertTrue("Correct errorCodes", status.getErrorCodes().length == 0);
59         assertTrue("Correct errorMessages", status.getErrorMessages().length == 0);
60         assertTrue("Correct errorCode", "".equals(status.getErrorCode()));
61         assertTrue("Correct errorMessage", "".equals(status.getErrorMessage()));
62         assertTrue("Correct errorMessagesAsString", "".equals(status.getErrorMessagesAsString(",")));
63     }
64
65     public void testBindTagWithGlobalErrors() throws JspException JavaDoc {
66         PageContext JavaDoc pc = createPageContext();
67         BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors();
68         errors.reject("code1", null, "message1");
69         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
70
71         BindTag tag = new BindTag();
72         tag.setPageContext(pc);
73         tag.setPath("tb");
74         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
75         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
76         assertTrue("Has status variable", status != null);
77         assertTrue("Correct expression", status.getExpression() == null);
78         assertTrue("Correct value", status.getValue() == null);
79         assertTrue("Correct displayValue", "".equals(status.getDisplayValue()));
80         assertTrue("Correct isError", status.isError());
81         assertTrue("Correct errorCodes", status.getErrorCodes().length == 1);
82         assertTrue("Correct errorMessages", status.getErrorMessages().length == 1);
83         assertTrue("Correct errorCode", "code1".equals(status.getErrorCode()));
84         assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessage()));
85         assertTrue("Correct errorMessagesAsString", "message1".equals(status.getErrorMessagesAsString(",")));
86
87         tag = new BindTag();
88         tag.setPageContext(pc);
89         tag.setPath("tb.*");
90         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
91         status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
92         assertTrue("Has status variable", status != null);
93         assertTrue("Correct expression", "*".equals(status.getExpression()));
94         assertTrue("Correct value", status.getValue() == null);
95         assertTrue("Correct displayValue", "".equals(status.getDisplayValue()));
96         assertTrue("Correct isError", status.isError());
97         assertTrue("Correct errorCodes", status.getErrorCodes().length == 1);
98         assertTrue("Correct errorMessages", status.getErrorMessages().length == 1);
99         assertTrue("Correct errorCode", "code1".equals(status.getErrorCode()));
100         assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessage()));
101         assertTrue("Correct errorMessagesAsString", "message1".equals(status.getErrorMessagesAsString(",")));
102     }
103
104     public void testBindStatusGetErrorMessagesAsString() throws JspException JavaDoc {
105         // one error (should not include delimiter)
106
PageContext JavaDoc pc = createPageContext();
107         BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors();
108         errors.reject("code1", null, "message1");
109         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
110         BindTag tag = new BindTag();
111         tag.setPageContext(pc);
112         tag.setPath("tb");
113         tag.doStartTag();
114         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
115         assertEquals("Error messages String should be 'message1'",
116                 status.getErrorMessagesAsString(","), "message1");
117
118         // two errors
119
pc = createPageContext();
120         errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors();
121         errors.reject("code1", null, "message1");
122         errors.reject("code1", null, "message2");
123         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
124         tag = new BindTag();
125         tag.setPageContext(pc);
126         tag.setPath("tb");
127         tag.doStartTag();
128         status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
129         assertEquals("Error messages String should be 'message1,message2'",
130                 status.getErrorMessagesAsString(","), "message1,message2");
131
132         // no errors
133
pc = createPageContext();
134         errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors();
135         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
136         tag = new BindTag();
137         tag.setPageContext(pc);
138         tag.setPath("tb");
139         tag.doStartTag();
140         status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
141         assertEquals("Error messages String should be ''", status.getErrorMessagesAsString(","), "");
142     }
143
144     public void testBindTagWithFieldErrors() throws JspException JavaDoc {
145         PageContext JavaDoc pc = createPageContext();
146         TestBean tb = new TestBean();
147         tb.setName("name1");
148         BindException errors = new ServletRequestDataBinder(tb, "tb").getErrors();
149         errors.rejectValue("name", "code1", "message & 1");
150         errors.rejectValue("name", "code2", "message2");
151         errors.rejectValue("age", "code2", "message2");
152         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
153
154         BindTag tag = new BindTag();
155         tag.setPageContext(pc);
156         tag.setPath("tb.name");
157         tag.setHtmlEscape("true");
158         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
159         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
160         assertTrue("Has status variable", status != null);
161         assertTrue("Correct expression", "name".equals(status.getExpression()));
162         assertTrue("Correct value", "name1".equals(status.getValue()));
163         assertTrue("Correct displayValue", "name1".equals(status.getDisplayValue()));
164         assertTrue("Correct isError", status.isError());
165         assertTrue("Correct errorCodes", status.getErrorCodes().length == 2);
166         assertTrue("Correct errorMessages", status.getErrorMessages().length == 2);
167         assertTrue("Correct errorCode", "code1".equals(status.getErrorCode()));
168         assertTrue("Correct errorCode", "code1".equals(status.getErrorCodes()[0]));
169         assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[1]));
170         assertTrue("Correct errorMessage", "message & 1".equals(status.getErrorMessage()));
171         assertTrue("Correct errorMessage", "message & 1".equals(status.getErrorMessages()[0]));
172         assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[1]));
173         assertTrue("Correct errorMessagesAsString",
174                 "message & 1 - message2".equals(status.getErrorMessagesAsString(" - ")));
175
176         tag = new BindTag();
177         tag.setPageContext(pc);
178         tag.setPath("tb.age");
179         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
180         status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
181         assertTrue("Has status variable", status != null);
182         assertTrue("Correct expression", "age".equals(status.getExpression()));
183         assertTrue("Correct value", new Integer JavaDoc(0).equals(status.getValue()));
184         assertTrue("Correct displayValue", "0".equals(status.getDisplayValue()));
185         assertTrue("Correct isError", status.isError());
186         assertTrue("Correct errorCodes", status.getErrorCodes().length == 1);
187         assertTrue("Correct errorMessages", status.getErrorMessages().length == 1);
188         assertTrue("Correct errorCode", "code2".equals(status.getErrorCode()));
189         assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessage()));
190         assertTrue("Correct errorMessagesAsString", "message2".equals(status.getErrorMessagesAsString(" - ")));
191
192         tag = new BindTag();
193         tag.setPageContext(pc);
194         tag.setPath("tb.*");
195         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
196         status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
197         assertTrue("Has status variable", status != null);
198         assertTrue("Correct expression", "*".equals(status.getExpression()));
199         assertTrue("Correct value", status.getValue() == null);
200         assertTrue("Correct displayValue", "".equals(status.getDisplayValue()));
201         assertTrue("Correct isError", status.isError());
202         assertTrue("Correct errorCodes", status.getErrorCodes().length == 3);
203         assertTrue("Correct errorMessages", status.getErrorMessages().length == 3);
204         assertTrue("Correct errorCode", "code1".equals(status.getErrorCode()));
205         assertTrue("Correct errorCode", "code1".equals(status.getErrorCodes()[0]));
206         assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[1]));
207         assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[2]));
208         assertTrue("Correct errorMessage", "message & 1".equals(status.getErrorMessage()));
209         assertTrue("Correct errorMessage", "message & 1".equals(status.getErrorMessages()[0]));
210         assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[1]));
211         assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[2]));
212     }
213
214     public void testBindTagWithNestedFieldErrors() throws JspException JavaDoc {
215         PageContext JavaDoc pc = createPageContext();
216         TestBean tb = new TestBean();
217         tb.setName("name1");
218         TestBean spouse = new TestBean();
219         spouse.setName("name2");
220         tb.setSpouse(spouse);
221         BindException errors = new ServletRequestDataBinder(tb, "tb").getErrors();
222         errors.rejectValue("spouse.name", "code1", "message1");
223         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
224         BindTag tag = new BindTag();
225         tag.setPageContext(pc);
226         pc.setAttribute("myattr", "tb.spouse.name");
227         tag.setPath("${myattr}");
228         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
229         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
230         assertTrue("Has status variable", status != null);
231         assertTrue("Correct expression", "spouse.name".equals(status.getExpression()));
232         assertTrue("Correct value", "name2".equals(status.getValue()));
233         assertTrue("Correct displayValue", "name2".equals(status.getDisplayValue()));
234         assertTrue("Correct isError", status.isError());
235         assertTrue("Correct errorCodes", status.getErrorCodes().length == 1);
236         assertTrue("Correct errorMessages", status.getErrorMessages().length == 1);
237         assertTrue("Correct errorCode", "code1".equals(status.getErrorCode()));
238         assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessage()));
239         assertTrue("Correct errorMessagesAsString", "message1".equals(status.getErrorMessagesAsString(" - ")));
240     }
241
242     public void testPropertyExposing() throws JspException JavaDoc {
243         PageContext JavaDoc pc = createPageContext();
244         TestBean tb = new TestBean();
245         tb.setName("name1");
246         BindException errors = new BindException(tb, "tb");
247         errors.rejectValue("name", "code1", null, "message & 1");
248         errors.rejectValue("name", "code2", null, "message2");
249         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
250
251         // test global property (should be null)
252
BindTag tag = new BindTag();
253         tag.setPageContext(pc);
254         tag.setPath("tb");
255         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
256         assertNull(tag.getProperty());
257
258         // test property set (tb.name)
259
tag.release();
260         tag.setPageContext(pc);
261         tag.setPath("tb.name");
262         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
263         assertEquals("name", tag.getProperty());
264     }
265
266     public void testBindTagWithIndexedProperties() throws JspException JavaDoc {
267         PageContext JavaDoc pc = createPageContext();
268         IndexedTestBean tb = new IndexedTestBean();
269         BindException errors = new ServletRequestDataBinder(tb, "tb").getErrors();
270         errors.rejectValue("array[0]", "code1", "message1");
271         errors.rejectValue("array[0]", "code2", "message2");
272         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
273
274         BindTag tag = new BindTag();
275         tag.setPageContext(pc);
276         tag.setPath("tb.array[0]");
277         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
278         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
279         assertTrue("Has status variable", status != null);
280         assertTrue("Correct expression", "array[0]".equals(status.getExpression()));
281         assertTrue("Value is TestBean", status.getValue() instanceof TestBean);
282         assertTrue("Correct value", "name0".equals(((TestBean) status.getValue()).getName()));
283         assertTrue("Correct isError", status.isError());
284         assertTrue("Correct errorCodes", status.getErrorCodes().length == 2);
285         assertTrue("Correct errorMessages", status.getErrorMessages().length == 2);
286         assertTrue("Correct errorCode", "code1".equals(status.getErrorCodes()[0]));
287         assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[1]));
288         assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessages()[0]));
289         assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[1]));
290     }
291
292     public void testBindTagWithMappedProperties() throws JspException JavaDoc {
293         PageContext JavaDoc pc = createPageContext();
294         IndexedTestBean tb = new IndexedTestBean();
295         BindException errors = new ServletRequestDataBinder(tb, "tb").getErrors();
296         errors.rejectValue("map[key1]", "code1", "message1");
297         errors.rejectValue("map[key1]", "code2", "message2");
298         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
299
300         BindTag tag = new BindTag();
301         tag.setPageContext(pc);
302         tag.setPath("tb.map[key1]");
303         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
304         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
305         assertTrue("Has status variable", status != null);
306         assertTrue("Correct expression", "map[key1]".equals(status.getExpression()));
307         assertTrue("Value is TestBean", status.getValue() instanceof TestBean);
308         assertTrue("Correct value", "name4".equals(((TestBean) status.getValue()).getName()));
309         assertTrue("Correct isError", status.isError());
310         assertTrue("Correct errorCodes", status.getErrorCodes().length == 2);
311         assertTrue("Correct errorMessages", status.getErrorMessages().length == 2);
312         assertTrue("Correct errorCode", "code1".equals(status.getErrorCodes()[0]));
313         assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[1]));
314         assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessages()[0]));
315         assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[1]));
316     }
317
318     public void testBindTagWithIndexedPropertiesAndCustomEditor() throws JspException JavaDoc {
319         PageContext JavaDoc pc = createPageContext();
320         IndexedTestBean tb = new IndexedTestBean();
321         DataBinder binder = new ServletRequestDataBinder(tb, "tb");
322         binder.registerCustomEditor(TestBean.class, null, new PropertyEditorSupport JavaDoc() {
323             public String JavaDoc getAsText() {
324                 return "something";
325             }
326         });
327         BindException errors = binder.getErrors();
328         errors.rejectValue("array[0]", "code1", "message1");
329         errors.rejectValue("array[0]", "code2", "message2");
330         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
331
332         BindTag tag = new BindTag();
333         tag.setPageContext(pc);
334         tag.setPath("tb.array[0]");
335         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
336         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
337         assertTrue("Has status variable", status != null);
338         assertTrue("Correct expression", "array[0]".equals(status.getExpression()));
339         // because of the custom editor getValue() should return a String
340
assertTrue("Value is TestBean", status.getValue() instanceof String JavaDoc);
341         assertTrue("Correct value", "something".equals(status.getValue()));
342     }
343
344     public void testBindTagWithToStringAndHtmlEscaping() throws JspException JavaDoc {
345         PageContext JavaDoc pc = createPageContext();
346         BindTag tag = new BindTag();
347         tag.setPageContext(pc);
348         tag.setPath("tb.doctor");
349         tag.setHtmlEscape("true");
350         TestBean tb = new TestBean("somebody", 99);
351         NestedTestBean ntb = new NestedTestBean("juergen&eva");
352         tb.setDoctor(ntb);
353         pc.getRequest().setAttribute("tb", tb);
354         tag.doStartTag();
355         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
356         assertEquals("doctor", status.getExpression());
357         assertTrue(status.getValue() instanceof NestedTestBean);
358         assertTrue(status.getDisplayValue().indexOf("juergen&eva") != -1);
359     }
360
361     public void testBindTagWithSetValueAndHtmlEscaping() throws JspException JavaDoc {
362         PageContext JavaDoc pc = createPageContext();
363         BindTag tag = new BindTag();
364         tag.setPageContext(pc);
365         tag.setPath("tb.someSet");
366         tag.setHtmlEscape("true");
367         pc.getRequest().setAttribute("tb", new TestBean("juergen&eva", 99));
368         tag.doStartTag();
369         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
370         assertEquals("someSet", status.getExpression());
371         assertTrue(status.getValue() instanceof Set JavaDoc);
372     }
373
374     public void testBindTagWithFieldButWithoutErrorsInstance() throws JspException JavaDoc {
375         PageContext JavaDoc pc = createPageContext();
376         BindTag tag = new BindTag();
377         tag.setPageContext(pc);
378         tag.setPath("tb.name");
379         pc.getRequest().setAttribute("tb", new TestBean("juergen&eva", 99));
380         tag.doStartTag();
381         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
382         assertEquals("name", status.getExpression());
383         assertEquals("juergen&eva", status.getValue());
384     }
385
386     public void testBindTagWithFieldButWithoutErrorsInstanceAndHtmlEscaping() throws JspException JavaDoc {
387         PageContext JavaDoc pc = createPageContext();
388         BindTag tag = new BindTag();
389         tag.setPageContext(pc);
390         tag.setPath("tb.name");
391         tag.setHtmlEscape("true");
392         pc.getRequest().setAttribute("tb", new TestBean("juergen&eva", 99));
393         tag.doStartTag();
394         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
395         assertEquals("name", status.getExpression());
396         assertEquals("juergen&eva", status.getValue());
397     }
398
399     public void testBindTagWithBeanButWithoutErrorsInstance() throws JspException JavaDoc {
400         PageContext JavaDoc pc = createPageContext();
401         BindTag tag = new BindTag();
402         tag.setPageContext(pc);
403         tag.setPath("tb");
404         pc.getRequest().setAttribute("tb", new TestBean("juergen", 99));
405         tag.doStartTag();
406         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
407         assertNull(status.getExpression());
408         assertNull(status.getValue());
409     }
410
411     public void testBindTagWithoutBean() throws JspException JavaDoc {
412         PageContext JavaDoc pc = createPageContext();
413         BindTag tag = new BindTag();
414         tag.setPageContext(pc);
415         tag.setPath("tb");
416         try {
417             tag.doStartTag();
418             fail("Should have thrown JspException");
419         }
420         catch (JspException JavaDoc ex) {
421             // expected
422
}
423     }
424
425
426     public void testBindErrorsTagWithoutErrors() throws JspException JavaDoc {
427         PageContext JavaDoc pc = createPageContext();
428         BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors();
429         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
430         BindErrorsTag tag = new BindErrorsTag();
431         tag.setPageContext(pc);
432         tag.setName("tb");
433         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.SKIP_BODY);
434         assertTrue("Doesn't have errors variable", pc.getAttribute(BindErrorsTag.ERRORS_VARIABLE_NAME) == null);
435     }
436
437     public void testBindErrorsTagWithErrors() throws JspException JavaDoc {
438         PageContext JavaDoc pc = createPageContext();
439         BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors();
440         errors.reject("test", null, "test");
441         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
442         BindErrorsTag tag = new BindErrorsTag();
443         tag.setPageContext(pc);
444         tag.setName("tb");
445         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
446         assertTrue("Has errors variable", pc.getAttribute(BindErrorsTag.ERRORS_VARIABLE_NAME) == errors);
447     }
448
449     public void testBindErrorsTagWithoutBean() throws JspException JavaDoc {
450         PageContext JavaDoc pc = createPageContext();
451         BindErrorsTag tag = new BindErrorsTag();
452         tag.setPageContext(pc);
453         tag.setName("tb");
454         assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.SKIP_BODY);
455     }
456
457
458     public void testNestedPathDoEndTag() throws JspException JavaDoc {
459         PageContext JavaDoc pc = createPageContext();
460         NestedPathTag tag = new NestedPathTag();
461         tag.setPath("foo");
462         tag.setPageContext(pc);
463         tag.doStartTag();
464         int returnValue = tag.doEndTag();
465         assertEquals(Tag.EVAL_PAGE, returnValue);
466         assertEquals("", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE));
467     }
468
469     public void testNestedPathDoEndTagWithNesting() throws JspException JavaDoc {
470         PageContext JavaDoc pc = createPageContext();
471         NestedPathTag tag = new NestedPathTag();
472         tag.setPath("foo");
473         tag.setPageContext(pc);
474         tag.doStartTag();
475
476         NestedPathTag anotherTag = new NestedPathTag();
477         anotherTag.setPageContext(pc);
478         anotherTag.setPath("bar");
479         anotherTag.doStartTag();
480         anotherTag.doEndTag();
481
482         assertEquals("foo.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE));
483
484         tag.doEndTag();
485         assertEquals("", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE));
486     }
487
488     public void testNestedPathDoStartTagInternal() throws JspException JavaDoc {
489         PageContext JavaDoc pc = createPageContext();
490         NestedPathTag tag = new NestedPathTag();
491         tag.setPath("foo");
492         tag.setPageContext(pc);
493         int returnValue = tag.doStartTag();
494
495         assertEquals(Tag.EVAL_BODY_INCLUDE, returnValue);
496         assertEquals("foo.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE));
497     }
498
499     public void testNestedPathDoStartTagInternalWithNesting() throws JspException JavaDoc {
500         PageContext JavaDoc pc = createPageContext();
501         NestedPathTag tag = new NestedPathTag();
502         tag.setPath("foo");
503         tag.setPageContext(pc);
504         tag.doStartTag();
505         assertEquals("foo.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE));
506
507         NestedPathTag anotherTag = new NestedPathTag();
508         anotherTag.setPageContext(pc);
509         anotherTag.setPath("bar");
510         anotherTag.doStartTag();
511
512         assertEquals("foo.bar.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE));
513
514         NestedPathTag yetAnotherTag = new NestedPathTag();
515         yetAnotherTag.setPageContext(pc);
516         yetAnotherTag.setPath("boo");
517         yetAnotherTag.doStartTag();
518
519         assertEquals("foo.bar.boo.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE));
520
521         yetAnotherTag.doEndTag();
522
523         NestedPathTag andAnotherTag = new NestedPathTag();
524         andAnotherTag.setPageContext(pc);
525         andAnotherTag.setPath("boo2");
526         andAnotherTag.doStartTag();
527
528         assertEquals("foo.bar.boo2.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE));
529     }
530
531     public void testNestedPathWithBindTag() throws JspException JavaDoc {
532         PageContext JavaDoc pc = createPageContext();
533         BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors();
534         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors);
535
536         NestedPathTag nestedPathTag = new NestedPathTag();
537         nestedPathTag.setPath("tb");
538         nestedPathTag.setPageContext(pc);
539         nestedPathTag.doStartTag();
540
541         BindTag bindTag = new BindTag();
542         bindTag.setPageContext(pc);
543         bindTag.setPath("name");
544
545         assertTrue("Correct doStartTag return value", bindTag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
546         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
547         assertTrue("Has status variable", status != null);
548         assertEquals("tb.name", status.getPath());
549         assertEquals("Correct field value", "", status.getDisplayValue());
550
551         BindTag bindTag2 = new BindTag();
552         bindTag2.setPageContext(pc);
553         bindTag2.setPath("age");
554
555         assertTrue("Correct doStartTag return value", bindTag2.doStartTag() == Tag.EVAL_BODY_INCLUDE);
556         BindStatus status2 = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
557         assertTrue("Has status variable", status2 != null);
558         assertEquals("tb.age", status2.getPath());
559         assertEquals("Correct field value", "0", status2.getDisplayValue());
560
561         bindTag2.doEndTag();
562
563         BindStatus status3 = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
564         assertSame("Status matches previous status", status, status3);
565         assertEquals("tb.name", status.getPath());
566         assertEquals("Correct field value", "", status.getDisplayValue());
567
568         bindTag.doEndTag();
569         nestedPathTag.doEndTag();
570     }
571
572     public void testNestedPathWithBindTagWithIgnoreNestedPath() throws JspException JavaDoc {
573         PageContext JavaDoc pc = createPageContext();
574         BindException errors = new ServletRequestDataBinder(new TestBean(), "tb2").getErrors();
575         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb2", errors);
576
577         NestedPathTag tag = new NestedPathTag();
578         tag.setPath("tb");
579         tag.setPageContext(pc);
580         tag.doStartTag();
581
582         BindTag bindTag = new BindTag();
583         bindTag.setPageContext(pc);
584         bindTag.setIgnoreNestedPath(true);
585         bindTag.setPath("tb2.name");
586
587         assertTrue("Correct doStartTag return value", bindTag.doStartTag() == Tag.EVAL_BODY_INCLUDE);
588         BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME);
589         assertTrue("Has status variable", status != null);
590         assertEquals("tb2.name", status.getPath());
591     }
592
593     public void testTransformTagCorrectBehavior() throws JspException JavaDoc {
594         // first set up the pagecontext and the bean
595
PageContext JavaDoc pc = createPageContext();
596         TestBean tb = new TestBean();
597         DateFormat JavaDoc df = new SimpleDateFormat JavaDoc("yyyy-MM-dd");
598         ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb");
599         CustomDateEditor l = new CustomDateEditor(df, true);
600         binder.registerCustomEditor(Date JavaDoc.class, l);
601         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors());
602
603         // execute the bind tag using the date property
604
BindTag bind = new BindTag();
605         bind.setPageContext(pc);
606         bind.setPath("tb.date");
607         bind.doStartTag();
608
609         // transform stuff
610
TransformTag transform = new TransformTag();
611         transform.setPageContext(pc);
612         pc.setAttribute("date", tb.getDate());
613         transform.setParent(bind);
614         transform.setValue("${date}");
615         transform.setVar("theDate");
616         transform.doStartTag();
617
618         assertNotNull(pc.getAttribute("theDate"));
619         assertEquals(pc.getAttribute("theDate"), df.format(tb.getDate()));
620
621         // try another time, this time using Strings
622
bind = new BindTag();
623         bind.setPageContext(pc);
624         bind.setPath("tb.name");
625         bind.doStartTag();
626
627         transform = new TransformTag();
628         transform.setPageContext(pc);
629         pc.setAttribute("string", "name");
630         transform.setValue("${string}");
631         transform.setParent(bind);
632         transform.setVar("theString");
633         transform.doStartTag();
634
635         assertNotNull(pc.getAttribute("theString"));
636         assertEquals(pc.getAttribute("theString"), "name");
637     }
638
639     public void testTransformTagWithHtmlEscape() throws JspException JavaDoc {
640         // first set up the PageContext and the bean
641
PageContext JavaDoc pc = createPageContext();
642         TestBean tb = new TestBean();
643         DateFormat JavaDoc df = new SimpleDateFormat JavaDoc("yyyy-MM-dd");
644         ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb");
645         CustomDateEditor l = new CustomDateEditor(df, true);
646         binder.registerCustomEditor(Date JavaDoc.class, l);
647         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors());
648
649         // try another time, this time using Strings
650
BindTag bind = new BindTag();
651         bind.setPageContext(pc);
652         bind.setPath("tb.name");
653         bind.doStartTag();
654
655         TransformTag transform = new TransformTag();
656         transform.setPageContext(pc);
657         pc.setAttribute("string", "na<me");
658         transform.setValue("${string}");
659         transform.setParent(bind);
660         transform.setVar("theString");
661         transform.setHtmlEscape("true");
662         transform.doStartTag();
663
664         assertNotNull(pc.getAttribute("theString"));
665         assertEquals(pc.getAttribute("theString"), "na&lt;me");
666     }
667
668     public void testTransformTagOutsideBindTag() throws JspException JavaDoc {
669         // first set up the pagecontext and the bean
670
PageContext JavaDoc pc = createPageContext();
671         TestBean tb = new TestBean();
672         DateFormat JavaDoc df = new SimpleDateFormat JavaDoc("yyyy-MM-dd");
673         ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb");
674         CustomDateEditor l = new CustomDateEditor(df, true);
675         binder.registerCustomEditor(Date JavaDoc.class, l);
676         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors());
677
678         // now try to execute the tag outside a bindtag
679
TransformTag transform = new TransformTag();
680         transform.setPageContext(pc);
681         transform.setVar("var");
682         transform.setValue("bla");
683         try {
684             transform.doStartTag();
685             fail("Tag can be executed outside BindTag");
686         }
687         catch (JspException JavaDoc e) {
688             // this is ok!
689
}
690
691         // now try to execute the tag outside a bindtag, but inside a messageTag
692
MessageTag message = new MessageTag();
693         message.setPageContext(pc);
694         transform = new TransformTag();
695         transform.setPageContext(pc);
696         transform.setVar("var");
697         transform.setValue("bla");
698         transform.setParent(message);
699         try {
700             transform.doStartTag();
701             fail("Tag can be executed outside BindTag and inside messagtag");
702         }
703         catch (JspException JavaDoc e) {
704             // this is ok!
705
}
706     }
707
708     public void testTransformTagNonExistingValue() throws JspException JavaDoc {
709         // first set up the pagecontext and the bean
710
PageContext JavaDoc pc = createPageContext();
711         TestBean tb = new TestBean();
712         DateFormat JavaDoc df = new SimpleDateFormat JavaDoc("yyyy-MM-dd");
713         ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb");
714         CustomDateEditor l = new CustomDateEditor(df, true);
715         binder.registerCustomEditor(Date JavaDoc.class, l);
716         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors());
717
718         // try with non-existing value
719
BindTag bind = new BindTag();
720         bind.setPageContext(pc);
721         bind.setPath("tb.name");
722         bind.doStartTag();
723
724         TransformTag transform = new TransformTag();
725         transform.setPageContext(pc);
726         transform.setValue("${string2}");
727         transform.setParent(bind);
728         transform.setVar("theString2");
729         transform.doStartTag();
730
731         assertNull(pc.getAttribute("theString2"));
732     }
733
734     public void testTransformTagWithSettingOfScope() throws JspException JavaDoc {
735         // first set up the pagecontext and the bean
736
PageContext JavaDoc pc = createPageContext();
737         TestBean tb = new TestBean();
738         DateFormat JavaDoc df = new SimpleDateFormat JavaDoc("yyyy-MM-dd");
739         ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb");
740         CustomDateEditor l = new CustomDateEditor(df, true);
741         binder.registerCustomEditor(Date JavaDoc.class, l);
742         pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors());
743
744         // execute the bind tag using the date property
745
BindTag bind = new BindTag();
746         bind.setPageContext(pc);
747         bind.setPath("tb.date");
748         bind.doStartTag();
749
750         // transform stuff
751
TransformTag transform = new TransformTag();
752         transform.setPageContext(pc);
753         pc.setAttribute("date", tb.getDate());
754         transform.setParent(bind);
755         transform.setValue("${date}");
756         transform.setVar("theDate");
757         transform.setScope("page");
758         transform.doStartTag();
759
760         transform.release();
761
762         assertNotNull(pc.getAttribute("theDate"));
763         assertEquals(pc.getAttribute("theDate"), df.format(tb.getDate()));
764
765         // try another time, this time using Strings
766
bind = new BindTag();
767         bind.setPageContext(pc);
768         bind.setPath("tb.name");
769         bind.doStartTag();
770
771         transform = new TransformTag();
772         transform.setPageContext(pc);
773         pc.setAttribute("string", "name");
774         pc.setAttribute("scopy", "page");
775         transform.setValue("${string}");
776         transform.setParent(bind);
777         transform.setVar("theString");
778         transform.setScope("${scopy}");
779         transform.doStartTag();
780
781         transform.release();
782
783         assertNotNull(pc.getAttribute("theString"));
784         assertEquals(pc.getAttribute("theString"), "name");
785     }
786
787 }
788
Popular Tags