1   /*
2    * $Id: MultipleTests.java 329871 2005-10-31 17:50:55Z niallp $
3    * $Rev: 329871 $
4    * $Date: 2005-10-31 17:50:55 +0000 (Mon, 31 Oct 2005) $
5    *
6    * ====================================================================
7    * Copyright 2001-2005 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  
23  package org.apache.commons.validator;
24  
25  import java.io.IOException;
26  
27  import junit.framework.Test;
28  import junit.framework.TestSuite;
29  
30  import org.xml.sax.SAXException;
31  
32  /***
33   * Performs Validation Test.
34   */
35  public class MultipleTests extends TestCommon {
36  
37     /***
38      * The key used to retrieve the set of validation
39      * rules from the xml file.
40      */
41     protected static String FORM_KEY = "nameForm";
42  
43     /***
44      * The key used to retrieve the validator action.
45      */
46     protected static String ACTION = "required";
47  
48  
49  
50     public MultipleTests(String name) {
51         super(name);
52     }
53  
54     /***
55      * Start the tests.
56      *
57      * @param theArgs the arguments. Not used
58      */
59     public static void main(String[] theArgs) {
60         junit.awtui.TestRunner.main(new String[] {MultipleTests.class.getName()});
61     }
62  
63     /***
64      * @return a test suite (<code>TestSuite</code>) that includes all methods
65      *         starting with "test"
66      */
67     public static Test suite() {
68         // All methods starting with "test" will be executed in the test suite.
69         return new TestSuite(MultipleTests.class);
70     }
71  
72     /***
73      * Load <code>ValidatorResources</code> from
74      * validator-multipletest.xml.
75      */
76     protected void setUp() throws IOException, SAXException {
77        // Load resources
78        loadResources("MultipleTests-config.xml");
79     }
80  
81     protected void tearDown() {
82     }
83  
84     /***
85      * With nothing provided, we should fail both because both are required.
86      */
87     public void testBothBlank() throws ValidatorException {
88        // Create bean to run test on.
89        NameBean name = new NameBean();
90  
91        // Construct validator based on the loaded resources
92        // and the form key
93        Validator validator = new Validator(resources, FORM_KEY);
94        // add the name bean to the validator as a resource
95        // for the validations to be performed on.
96        validator.setParameter(Validator.BEAN_PARAM, name);
97  
98        // Get results of the validation.
99        ValidatorResults results = null;
100 
101       // throws ValidatorException,
102       // but we aren't catching for testing
103       // since no validation methods we use
104       // throw this
105       results = validator.validate();
106 
107       assertNotNull("Results are null.", results);
108 
109       ValidatorResult firstNameResult = results.getValidatorResult("firstName");
110       ValidatorResult lastNameResult = results.getValidatorResult("lastName");
111 
112       assertNotNull("First Name ValidatorResult should not be null.", firstNameResult);
113       assertTrue("First Name ValidatorResult should contain the '" + ACTION +"' action.", firstNameResult.containsAction(ACTION));
114       assertTrue("First Name ValidatorResult for the '" + ACTION +"' action should have failed.", !firstNameResult.isValid(ACTION));
115 
116       assertNotNull("Last Name ValidatorResult should not be null.", lastNameResult);
117       assertTrue("Last Name ValidatorResult should contain the '" + ACTION +"' action.", lastNameResult.containsAction(ACTION));
118       assertTrue("Last Name ValidatorResult for the '" + ACTION +"' action should have failed.", !lastNameResult.isValid(ACTION));
119       assertTrue("Last Name ValidatorResults should not contain the 'int' action.", !lastNameResult.containsAction("int"));
120    }
121 
122    /***
123     * If the first name fails required, and the second test fails int, we should get two errors.
124     */
125    public void testRequiredFirstNameBlankLastNameShort() throws ValidatorException {
126       // Create bean to run test on.
127       NameBean name = new NameBean();
128       name.setFirstName("");
129       name.setLastName("Test");
130 
131       // Construct validator based on the loaded resources
132       // and the form key
133       Validator validator = new Validator(resources, FORM_KEY);
134       // add the name bean to the validator as a resource
135       // for the validations to be performed on.
136       validator.setParameter(Validator.BEAN_PARAM, name);
137 
138       // Get results of the validation.
139       ValidatorResults results = null;
140 
141       results = validator.validate();
142 
143       assertNotNull("Results are null.", results);
144 
145       ValidatorResult firstNameResult = results.getValidatorResult("firstName");
146       ValidatorResult lastNameResult = results.getValidatorResult("lastName");
147 
148       assertNotNull("First Name ValidatorResult should not be null.", firstNameResult);
149       assertTrue("First Name ValidatorResult should contain the '" + ACTION +"' action.", firstNameResult.containsAction(ACTION));
150       assertTrue("First Name ValidatorResult for the '" + ACTION +"' action should have failed.", !firstNameResult.isValid(ACTION));
151 
152       assertNotNull("Last Name ValidatorResult should not be null.", lastNameResult);
153       assertTrue("Last Name ValidatorResult should contain the 'int' action.", lastNameResult.containsAction("int"));
154       assertTrue("Last Name ValidatorResult for the 'int' action should have failed.", !lastNameResult.isValid("int"));
155    }
156 
157    /***
158     * If the first name is there, and the last name fails int, we should get one error.
159     */
160    public void testRequiredLastNameShort() throws ValidatorException {
161       // Create bean to run test on.
162       NameBean name = new NameBean();
163       name.setFirstName("Test");
164       name.setLastName("Test");
165 
166       // Construct validator based on the loaded resources
167       // and the form key
168       Validator validator = new Validator(resources, FORM_KEY);
169       // add the name bean to the validator as a resource
170       // for the validations to be performed on.
171       validator.setParameter(Validator.BEAN_PARAM, name);
172 
173       // Get results of the validation.
174       ValidatorResults results = null;
175 
176       results = validator.validate();
177 
178       assertNotNull("Results are null.", results);
179 
180       ValidatorResult firstNameResult = results.getValidatorResult("firstName");
181       ValidatorResult lastNameResult = results.getValidatorResult("lastName");
182 
183       assertNotNull("First Name ValidatorResult should not be null.", firstNameResult);
184       assertTrue("First Name ValidatorResult should contain the '" + ACTION +"' action.", firstNameResult.containsAction(ACTION));
185       assertTrue("First Name ValidatorResult for the '" + ACTION +"' action should have passed.", firstNameResult.isValid(ACTION));
186 
187       assertNotNull("Last Name ValidatorResult should not be null.", lastNameResult);
188       assertTrue("Last Name ValidatorResult should contain the 'int' action.", lastNameResult.containsAction("int"));
189       assertTrue("Last Name ValidatorResult for the 'int' action should have failed.", !lastNameResult.isValid("int"));
190    }
191 
192    /***
193     * If first name is ok and last name is ok and is an int, no errors.
194     */
195    public void testRequiredLastNameLong() throws ValidatorException {
196       // Create bean to run test on.
197       NameBean name = new NameBean();
198       name.setFirstName("Joe");
199       name.setLastName("12345678");
200 
201       // Construct validator based on the loaded resources
202       // and the form key
203       Validator validator = new Validator(resources, FORM_KEY);
204       // add the name bean to the validator as a resource
205       // for the validations to be performed on.
206       validator.setParameter(Validator.BEAN_PARAM, name);
207 
208       // Get results of the validation.
209       ValidatorResults results = null;
210 
211       results = validator.validate();
212 
213       assertNotNull("Results are null.", results);
214 
215       ValidatorResult firstNameResult = results.getValidatorResult("firstName");
216       ValidatorResult lastNameResult = results.getValidatorResult("lastName");
217 
218       assertNotNull("First Name ValidatorResult should not be null.", firstNameResult);
219       assertTrue("First Name ValidatorResult should contain the '" + ACTION +"' action.", firstNameResult.containsAction(ACTION));
220       assertTrue("First Name ValidatorResult for the '" + ACTION +"' action should have passed.", firstNameResult.isValid(ACTION));
221 
222       assertNotNull("Last Name ValidatorResult should not be null.", lastNameResult);
223       assertTrue("Last Name ValidatorResult should contain the 'int' action.", lastNameResult.containsAction("int"));
224       assertTrue("Last Name ValidatorResult for the 'int' action should have passed.", lastNameResult.isValid("int"));
225    }
226 
227    /***
228     * If middle name is not there, then the required dependent test should fail.
229     * No other tests should run
230     *
231     * @throws ValidatorException
232     */
233    public void testFailingFirstDependentValidator() throws ValidatorException {
234        // Create bean to run test on.
235        NameBean name = new NameBean();
236 
237        // Construct validator based on the loaded resources
238        // and the form key
239        Validator validator = new Validator(resources, FORM_KEY);
240        // add the name bean to the validator as a resource
241        // for the validations to be performed on.
242        validator.setParameter(Validator.BEAN_PARAM, name);
243 
244        // Get results of the validation.
245        ValidatorResults results = null;
246 
247        results = validator.validate();
248 
249        assertNotNull("Results are null.", results);
250 
251        ValidatorResult middleNameResult = results.getValidatorResult("middleName");
252 
253        assertNotNull("Middle Name ValidatorResult should not be null.", middleNameResult);
254 
255        assertTrue("Middle Name ValidatorResult should contain the 'required' action.", middleNameResult.containsAction("required"));
256        assertTrue("Middle Name ValidatorResult for the 'required' action should have failed", !middleNameResult.isValid("required"));
257 
258        assertTrue("Middle Name ValidatorResult should not contain the 'int' action.", !middleNameResult.containsAction("int"));
259 
260        assertTrue("Middle Name ValidatorResult should not contain the 'positive' action.", !middleNameResult.containsAction("positive"));
261    }
262 
263    /***
264     * If middle name is there but not int, then the required dependent test
265     * should pass, but the int dependent test should fail. No other tests should
266     * run.
267     *
268     * @throws ValidatorException
269     */
270    public void testFailingNextDependentValidator() throws ValidatorException {
271        // Create bean to run test on.
272        NameBean name = new NameBean();
273        name.setMiddleName("TEST");
274 
275        // Construct validator based on the loaded resources
276        // and the form key
277        Validator validator = new Validator(resources, FORM_KEY);
278        // add the name bean to the validator as a resource
279        // for the validations to be performed on.
280        validator.setParameter(Validator.BEAN_PARAM, name);
281 
282        // Get results of the validation.
283        ValidatorResults results = null;
284 
285        results = validator.validate();
286 
287        assertNotNull("Results are null.", results);
288 
289        ValidatorResult middleNameResult = results.getValidatorResult("middleName");
290 
291        assertNotNull("Middle Name ValidatorResult should not be null.", middleNameResult);
292 
293        assertTrue("Middle Name ValidatorResult should contain the 'required' action.", middleNameResult.containsAction("required"));
294        assertTrue("Middle Name ValidatorResult for the 'required' action should have passed", middleNameResult.isValid("required"));
295 
296        assertTrue("Middle Name ValidatorResult should contain the 'int' action.", middleNameResult.containsAction("int"));
297        assertTrue("Middle Name ValidatorResult for the 'int' action should have failed", !middleNameResult.isValid("int"));
298 
299        assertTrue("Middle Name ValidatorResult should not contain the 'positive' action.", !middleNameResult.containsAction("positive"));
300    }
301 
302    /***
303     * If middle name is there and a negative int, then the required and int
304     * dependent tests should pass, but the positive test should fail.
305     *
306     * @throws ValidatorException
307     */
308    public void testPassingDependentsFailingMain() throws ValidatorException {
309        // Create bean to run test on.
310        NameBean name = new NameBean();
311        name.setMiddleName("-2534");
312 
313        // Construct validator based on the loaded resources
314        // and the form key
315        Validator validator = new Validator(resources, FORM_KEY);
316        // add the name bean to the validator as a resource
317        // for the validations to be performed on.
318        validator.setParameter(Validator.BEAN_PARAM, name);
319 
320        // Get results of the validation.
321        ValidatorResults results = null;
322 
323        results = validator.validate();
324 
325        assertNotNull("Results are null.", results);
326 
327        ValidatorResult middleNameResult = results.getValidatorResult("middleName");
328 
329        assertNotNull("Middle Name ValidatorResult should not be null.", middleNameResult);
330 
331        assertTrue("Middle Name ValidatorResult should contain the 'required' action.", middleNameResult.containsAction("required"));
332        assertTrue("Middle Name ValidatorResult for the 'required' action should have passed", middleNameResult.isValid("required"));
333 
334        assertTrue("Middle Name ValidatorResult should contain the 'int' action.", middleNameResult.containsAction("int"));
335        assertTrue("Middle Name ValidatorResult for the 'int' action should have passed", middleNameResult.isValid("int"));
336 
337        assertTrue("Middle Name ValidatorResult should contain the 'positive' action.", middleNameResult.containsAction("positive"));
338        assertTrue("Middle Name ValidatorResult for the 'positive' action should have failed", !middleNameResult.isValid("positive"));
339    }
340 
341    /***
342     * If middle name is there and a positve int, then the required and int
343     * dependent tests should pass, and the positive test should pass.
344     *
345     * @throws ValidatorException
346     */
347    public void testPassingDependentsPassingMain() throws ValidatorException {
348        // Create bean to run test on.
349        NameBean name = new NameBean();
350        name.setMiddleName("2534");
351 
352        // Construct validator based on the loaded resources
353        // and the form key
354        Validator validator = new Validator(resources, FORM_KEY);
355        // add the name bean to the validator as a resource
356        // for the validations to be performed on.
357        validator.setParameter(Validator.BEAN_PARAM, name);
358 
359        // Get results of the validation.
360        ValidatorResults results = null;
361 
362        results = validator.validate();
363 
364        assertNotNull("Results are null.", results);
365 
366        ValidatorResult middleNameResult = results.getValidatorResult("middleName");
367 
368        assertNotNull("Middle Name ValidatorResult should not be null.", middleNameResult);
369 
370        assertTrue("Middle Name ValidatorResult should contain the 'required' action.", middleNameResult.containsAction("required"));
371        assertTrue("Middle Name ValidatorResult for the 'required' action should have passed", middleNameResult.isValid("required"));
372 
373        assertTrue("Middle Name ValidatorResult should contain the 'int' action.", middleNameResult.containsAction("int"));
374        assertTrue("Middle Name ValidatorResult for the 'int' action should have passed", middleNameResult.isValid("int"));
375 
376        assertTrue("Middle Name ValidatorResult should contain the 'positive' action.", middleNameResult.containsAction("positive"));
377        assertTrue("Middle Name ValidatorResult for the 'positive' action should have passed", middleNameResult.isValid("positive"));
378    }
379 }