1 /*
2 * $Header: /home/cvs/jakarta-commons/validator/src/test/org/apache/commons/validator/ValidatorTest.java,v 1.17 2004/02/21 17:10:30 rleland Exp $
3 * $Revision: 1.17 $
4 * $Date: 2004/02/21 17:10:30 $
5 *
6 * ====================================================================
7 * Copyright 2000-2004 The Apache Software Foundation
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 */
21
22 package org.apache.commons.validator;
23
24 import java.text.DateFormat;
25 import java.text.ParseException;
26 import java.util.ArrayList;
27 import java.util.Date;
28 import java.util.List;
29 import java.util.Locale;
30
31 import junit.framework.Test;
32 import junit.framework.TestCase;
33 import junit.framework.TestSuite;
34
35 import org.apache.commons.validator.util.ValidatorUtils;
36
37 /***
38 * Performs Validation Test.
39 */
40 public class ValidatorTest extends TestCase {
41
42 public ValidatorTest(String name) {
43 super(name);
44 }
45
46 /***
47 * Start the tests.
48 *
49 * @param theArgs the arguments. Not used
50 */
51 public static void main(String[] theArgs) {
52 junit.awtui.TestRunner.main(new String[] {ValidatorTest.class.getName()});
53 }
54
55 /***
56 * @return a test suite (<code>TestSuite</code>) that includes all methods
57 * starting with "test"
58 */
59 public static Test suite() {
60 // All methods starting with "test" will be executed in the test suite.
61 return new TestSuite(ValidatorTest.class);
62 }
63
64 protected void setUp() {
65 }
66
67 protected void tearDown() {
68 }
69
70 /***
71 * Verify that one value generates an error and the other passes. The validation
72 * method being tested returns an object (<code>null</code> will be considered an error).
73 */
74 public void testManualObject() {
75 // property name of the method we are validating
76 String property = "date";
77 // name of ValidatorAction
78 String action = "date";
79 ValidatorResources resources = setupDateResources(property, action);
80
81 TestBean bean = new TestBean();
82 bean.setDate("2/3/1999");
83
84 Validator validator = new Validator(resources, "testForm");
85 validator.setParameter(Validator.BEAN_PARAM, bean);
86
87 try {
88 ValidatorResults results = validator.validate();
89
90 assertNotNull("Results are null.", results);
91
92 ValidatorResult result = results.getValidatorResult(property);
93
94 assertNotNull("Results are null.", results);
95
96 assertTrue("ValidatorResult does not contain '" + action + "' validator result.", result.containsAction(action));
97
98 assertTrue("Validation of the date formatting has failed.", result.isValid(action));
99 } catch (Exception e) {
100 fail("An exception was thrown while calling Validator.validate()");
101 }
102
103 bean.setDate("2/30/1999");
104
105 try {
106 ValidatorResults results = validator.validate();
107
108 assertNotNull("Results are null.", results);
109
110 ValidatorResult result = results.getValidatorResult(property);
111
112 assertNotNull("Results are null.", results);
113
114 assertTrue("ValidatorResult does not contain '" + action + "' validator result.", result.containsAction(action));
115
116 assertTrue("Validation of the date formatting has passed when it should have failed.", !result.isValid(action));
117 } catch (Exception e) {
118 fail("An exception was thrown while calling Validator.validate()");
119 }
120
121 }
122
123 public void testOnlyReturnErrors() throws ValidatorException {
124 // property name of the method we are validating
125 String property = "date";
126 // name of ValidatorAction
127 String action = "date";
128 ValidatorResources resources = setupDateResources(property, action);
129
130 TestBean bean = new TestBean();
131 bean.setDate("2/3/1999");
132
133 Validator validator = new Validator(resources, "testForm");
134 validator.setParameter(Validator.BEAN_PARAM, bean);
135
136 ValidatorResults results = validator.validate();
137
138 assertNotNull(results);
139
140 // Field passed and should be in results
141 assertTrue(results.getPropertyNames().contains(property));
142
143 // Field passed but should not be in results
144 validator.setOnlyReturnErrors(true);
145 results = validator.validate();
146 assertFalse(results.getPropertyNames().contains(property));
147 }
148
149 private ValidatorResources setupDateResources(String property, String action) {
150
151 ValidatorResources resources = new ValidatorResources();
152
153 ValidatorAction va = new ValidatorAction();
154 va.setName(action);
155 va.setClassname("org.apache.commons.validator.ValidatorTest");
156 va.setMethod("formatDate");
157 va.setMethodParams("java.lang.Object,org.apache.commons.validator.Field");
158
159 FormSet fs = new FormSet();
160 Form form = new Form();
161 form.setName("testForm");
162 Field field = new Field();
163 field.setProperty(property);
164 field.setDepends(action);
165 form.addField(field);
166 fs.addForm(form);
167
168 resources.addValidatorAction(va);
169 resources.addFormSet(fs);
170 resources.process();
171
172 return resources;
173 }
174
175 /***
176 * Verify that one value generates an error and the other passes. The validation
177 * method being tested returns a <code>boolean</code> value.
178 */
179 public void testManualBoolean() {
180 ValidatorResources resources = new ValidatorResources();
181
182 ValidatorAction va = new ValidatorAction();
183 va.setName("capLetter");
184 va.setClassname("org.apache.commons.validator.ValidatorTest");
185 va.setMethod("isCapLetter");
186 va.setMethodParams("java.lang.Object,org.apache.commons.validator.Field,java.util.List");
187
188 FormSet fs = new FormSet();
189 Form form = new Form();
190 form.setName("testForm");
191 Field field = new Field();
192 field.setProperty("letter");
193 field.setDepends("capLetter");
194 form.addField(field);
195 fs.addForm(form);
196
197 resources.addValidatorAction(va);
198 resources.addFormSet(fs);
199 resources.process();
200
201 List l = new ArrayList();
202
203 TestBean bean = new TestBean();
204 bean.setLetter("A");
205
206 Validator validator = new Validator(resources, "testForm");
207 validator.setParameter(Validator.BEAN_PARAM, bean);
208 validator.setParameter("java.util.List", l);
209
210 try {
211 validator.validate();
212 } catch (Exception e) {
213 fail("An exception was thrown while calling Validator.validate()");
214 }
215
216 assertEquals("Validation of the letter 'A'.", 0, l.size());
217
218 l.clear();
219 bean.setLetter("AA");
220
221 try {
222 validator.validate();
223 } catch (Exception e) {
224 fail("An exception was thrown while calling Validator.validate()");
225 }
226
227 assertEquals("Validation of the letter 'AA'.", 1, l.size());
228 }
229
230 /***
231 * Checks if the field is one upper case letter between 'A' and 'Z'.
232 */
233 public static boolean isCapLetter(Object bean, Field field, List l) {
234 String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
235
236 if (value != null && value.length() == 1) {
237 if (value.charAt(0) >= 'A' && value.charAt(0) <= 'Z') {
238 return true;
239 } else {
240 l.add("Error");
241 return false;
242 }
243 } else {
244 l.add("Error");
245 return false;
246 }
247 }
248
249 /***
250 * Formats a <code>String</code> to a <code>Date</code>.
251 * The <code>Validator</code> will interpret a <code>null</code>
252 * as validation having failed.
253 */
254 public static Date formatDate(Object bean, Field field) {
255 String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
256 Date date = null;
257
258 try {
259 DateFormat formatter = null;
260 formatter = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
261
262 formatter.setLenient(false);
263
264 date = formatter.parse(value);
265 } catch (ParseException e) {
266 System.out.println("ValidatorTest.formatDate() - " + e.getMessage());
267 }
268
269 return date;
270 }
271
272 public class TestBean {
273 private String letter = null;
274 private String date = null;
275
276 public String getLetter() {
277 return letter;
278 }
279
280 public void setLetter(String letter) {
281 this.letter = letter;
282 }
283
284 public String getDate() {
285 return date;
286 }
287
288 public void setDate(String date) {
289 this.date = date;
290 }
291 }
292
293 }
This page was automatically generated by Maven