PageRenderTime 155ms CodeModel.GetById 35ms app.highlight 66ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/struts-2.2.1/src/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Java | 395 lines | 254 code | 86 blank | 55 comment | 1 complexity | e9ca1f218ed695e2a2bcf20ba951b078 MD5 | raw file
  1/*
  2 * Copyright 2002-2006,2009 The Apache Software Foundation.
  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 */
 16package com.opensymphony.xwork2.validator;
 17
 18import com.opensymphony.xwork2.*;
 19import com.opensymphony.xwork2.config.entities.ActionConfig;
 20import com.opensymphony.xwork2.test.AnnotationDataAware2;
 21import com.opensymphony.xwork2.test.AnnotationUser;
 22import com.opensymphony.xwork2.test.SimpleAnnotationAction2;
 23import com.opensymphony.xwork2.test.SimpleAnnotationAction3;
 24import com.opensymphony.xwork2.util.FileManager;
 25import com.opensymphony.xwork2.validator.validators.*;
 26
 27import java.util.List;
 28
 29import org.easymock.EasyMock;
 30
 31
 32/**
 33 * AnnotationActionValidatorManagerTest
 34 *
 35 * @author Rainer Hermanns
 36 * @author Jason Carreira
 37 * @author tm_jee ( tm_jee (at) yahoo.co.uk )
 38 *         Created Jun 9, 2003 11:03:01 AM
 39 */
 40public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
 41
 42    protected final String alias = "annotationValidationAlias";
 43
 44    AnnotationActionValidatorManager annotationActionValidatorManager;
 45
 46    @Override protected void setUp() throws Exception {
 47        super.setUp();
 48        annotationActionValidatorManager = (AnnotationActionValidatorManager) container.getInstance(ActionValidatorManager.class);
 49
 50        ActionConfig config = new ActionConfig.Builder("", "name", "").build();
 51        ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class);
 52        ActionProxy proxy = EasyMock.createNiceMock(ActionProxy.class);
 53
 54        EasyMock.expect(invocation.getProxy()).andReturn(proxy).anyTimes();
 55        EasyMock.expect(invocation.getAction()).andReturn(null).anyTimes();
 56        EasyMock.expect(invocation.invoke()).andReturn(Action.SUCCESS).anyTimes();
 57        EasyMock.expect(proxy.getMethod()).andReturn("execute").anyTimes();
 58        EasyMock.expect(proxy.getConfig()).andReturn(config).anyTimes();
 59
 60
 61        EasyMock.replay(invocation);
 62        EasyMock.replay(proxy);
 63
 64        ActionContext.getContext().setActionInvocation(invocation);
 65    }
 66
 67    @Override protected void tearDown() throws Exception {
 68        annotationActionValidatorManager = null;
 69        super.tearDown();
 70    }
 71
 72    public void testBuildValidatorKey() {
 73        String validatorKey = AnnotationActionValidatorManager.buildValidatorKey(SimpleAnnotationAction.class);
 74        assertEquals(SimpleAnnotationAction.class.getName() + "/name|execute", validatorKey);
 75    }
 76
 77    public void testBuildsValidatorsForAlias() {
 78        List validatorList = annotationActionValidatorManager.getValidators(SimpleAnnotationAction.class, alias);
 79
 80        // 17 in the class level + 0 in the alias
 81        // TODO: add alias tests
 82        assertEquals(17, validatorList.size());
 83    }
 84
 85    public void testGetValidatorsForGivenMethodNameWithoutReloading() throws ValidationException {
 86        List validatorList = annotationActionValidatorManager.getValidators(SimpleAnnotationAction.class, alias, "execute");
 87
 88        //disable configuration reload/devmode
 89        FileManager.setReloadingConfigs(false);
 90
 91        //17 in the class level + 0 in the alias
 92        assertEquals(12, validatorList.size());
 93        
 94        validatorList = annotationActionValidatorManager.getValidators(SimpleAnnotationAction.class, alias, "execute");
 95
 96        //expect same number of validators
 97        assertEquals(12, validatorList.size());
 98    }
 99    
100    public void testDefaultMessageInterpolation() {
101        // get validators
102        List validatorList = annotationActionValidatorManager.getValidators(AnnotatedTestBean.class, "beanMessageBundle");
103        assertEquals(3, validatorList.size());
104
105        try {
106            AnnotatedTestBean bean = new AnnotatedTestBean();
107            bean.setName("foo");
108            bean.setCount(99);
109
110            ValidatorContext context = new GenericValidatorContext(bean);
111            annotationActionValidatorManager.validate(bean, "beanMessageBundle", context);
112            assertTrue(context.hasErrors());
113            assertTrue(context.hasFieldErrors());
114
115            List<String> l = context.getFieldErrors().get("count");
116            assertNotNull(l);
117            assertEquals(1, l.size());
118            assertEquals("Smaller Invalid Count: 99", l.get(0));
119        } catch (ValidationException ex) {
120            ex.printStackTrace();
121            fail("Validation error: " + ex.getMessage());
122        }
123    }
124
125    public void testGetValidatorsForInterface() {
126        List validatorList = annotationActionValidatorManager.getValidators(AnnotationDataAware2.class, alias);
127
128        // 1 in interface hierarchy, 2 from parent interface (1 default + 1 context)
129        assertEquals(3, validatorList.size());
130
131        final FieldValidator dataValidator1 = (FieldValidator) validatorList.get(0);
132        assertEquals("data", dataValidator1.getFieldName());
133        assertTrue(dataValidator1 instanceof RequiredFieldValidator);
134
135        final FieldValidator dataValidator2 = (FieldValidator) validatorList.get(1);
136        assertEquals("data", dataValidator2.getFieldName());
137        assertTrue(dataValidator2 instanceof RequiredStringValidator);
138
139        final FieldValidator blingValidator = (FieldValidator) validatorList.get(2);
140        assertEquals("bling", blingValidator.getFieldName());
141        assertTrue(blingValidator instanceof RequiredStringValidator);
142    }
143
144    public void no_testGetValidatorsFromInterface() {
145        List validatorList = annotationActionValidatorManager.getValidators(SimpleAnnotationAction3.class, alias);
146
147        // 17 in the class hierarchy + 1 in the interface + 1 in interface alias
148        assertEquals(19, validatorList.size());
149
150        final FieldValidator v = (FieldValidator) validatorList.get(0);
151        assertEquals("bar", v.getFieldName());
152        assertTrue(v instanceof RequiredFieldValidator);
153
154        final FieldValidator v1 = (FieldValidator) validatorList.get(1);
155        assertEquals("bar", v1.getFieldName());
156        assertTrue(v1 instanceof IntRangeFieldValidator);
157
158        final FieldValidator vdouble = (FieldValidator) validatorList.get(2);
159        assertEquals("percentage", vdouble.getFieldName());
160        assertTrue(vdouble instanceof DoubleRangeFieldValidator);
161
162        final FieldValidator v2 = (FieldValidator) validatorList.get(3);
163        assertEquals("baz", v2.getFieldName());
164        assertTrue(v2 instanceof IntRangeFieldValidator);
165
166        final FieldValidator v3 = (FieldValidator) validatorList.get(4);
167        assertEquals("date", v3.getFieldName());
168        assertTrue(v3 instanceof DateRangeFieldValidator);
169
170        // action-level validator comes first
171        final Validator v4 = (Validator) validatorList.get(5);
172        assertTrue(v4 instanceof ExpressionValidator);
173
174        // action-level validator comes first
175        final Validator v5 = (Validator) validatorList.get(6);
176        assertTrue(v5 instanceof ExpressionValidator);
177
178        // action-level validator comes first
179        final Validator v6 = (Validator) validatorList.get(7);
180        assertTrue(v6 instanceof ExpressionValidator);
181
182        // action-level validator comes first
183        final Validator v7 = (Validator) validatorList.get(8);
184        assertTrue(v7 instanceof ExpressionValidator);
185
186        // action-level validator comes first
187        final Validator v8 = (Validator) validatorList.get(9);
188        assertTrue(v8 instanceof ExpressionValidator);
189
190        final FieldValidator v9 = (FieldValidator) validatorList.get(10);
191        assertEquals("datefield", v9.getFieldName());
192        assertTrue(v9 instanceof DateRangeFieldValidator);
193
194        final FieldValidator v10 = (FieldValidator) validatorList.get(11);
195        assertEquals("emailaddress", v10.getFieldName());
196        assertTrue(v10 instanceof EmailValidator);
197
198        final FieldValidator v11 = (FieldValidator) validatorList.get(12);
199        assertEquals("intfield", v11.getFieldName());
200        assertTrue(v11 instanceof IntRangeFieldValidator);
201
202        final FieldValidator v12 = (FieldValidator) validatorList.get(13);
203        assertEquals("customfield", v12.getFieldName());
204        assertTrue(v12 instanceof RequiredFieldValidator);
205
206        final FieldValidator v13 = (FieldValidator) validatorList.get(14);
207        assertEquals("stringisrequired", v13.getFieldName());
208        assertTrue(v13 instanceof RequiredStringValidator);
209
210        final FieldValidator v14 = (FieldValidator) validatorList.get(15);
211        assertEquals("needstringlength", v14.getFieldName());
212        assertTrue(v14 instanceof StringLengthFieldValidator);
213
214        final FieldValidator v15 = (FieldValidator) validatorList.get(16);
215        assertEquals("hreflocation", v15.getFieldName());
216        assertTrue(v15 instanceof URLValidator);
217
218        final FieldValidator v16 = (FieldValidator) validatorList.get(17);
219        assertEquals("data", v16.getFieldName());
220        assertTrue(v16 instanceof RequiredFieldValidator);
221
222        final FieldValidator v17 = (FieldValidator) validatorList.get(18);
223        assertEquals("data", v17.getFieldName());
224        assertTrue(v17 instanceof RequiredStringValidator);
225
226    }
227
228    public void testMessageInterpolation() {
229        // get validators
230        List validatorList = annotationActionValidatorManager.getValidators(AnnotatedTestBean.class, "beanMessageBundle");
231        assertEquals(3, validatorList.size());
232
233        try {
234            AnnotatedTestBean bean = new AnnotatedTestBean();
235            bean.setName("foo");
236            bean.setCount(150);
237
238            ValidatorContext context = new GenericValidatorContext(bean);
239            annotationActionValidatorManager.validate(bean, "beanMessageBundle", context);
240            assertTrue(context.hasErrors());
241            assertTrue(context.hasFieldErrors());
242
243            List<String> l = context.getFieldErrors().get("count");
244            assertNotNull(l);
245            assertEquals(1, l.size());
246            assertEquals("Count must be between 1 and 100, current value is 150.", l.get(0));
247        } catch (ValidationException ex) {
248            ex.printStackTrace();
249            fail("Validation error: " + ex.getMessage());
250        }
251    }
252
253    public void testSameAliasWithDifferentClass() {
254        List validatorList = annotationActionValidatorManager.getValidators(SimpleAnnotationAction.class, alias);
255        List validatorList2 = annotationActionValidatorManager.getValidators(SimpleAnnotationAction2.class, alias);
256        assertFalse(validatorList.size() == validatorList2.size());
257    }
258
259    public void testSameAliasWithAliasWithSlashes() {
260        List validatorList = annotationActionValidatorManager.getValidators(SimpleAction.class, "some/alias");
261        assertNotNull(validatorList);
262        assertEquals(11, validatorList.size());
263    }
264
265    public void testSkipUserMarkerActionLevelShortCircuit() {
266        // get validators
267        List validatorList = annotationActionValidatorManager.getValidators(AnnotationUser.class, null);
268        assertEquals(10, validatorList.size());
269
270        try {
271            AnnotationUser user = new AnnotationUser();
272            user.setName("Mark");
273            user.setEmail("bad_email");
274            user.setEmail2("bad_email");
275
276            ValidatorContext context = new GenericValidatorContext(user);
277            annotationActionValidatorManager.validate(user, null, context);
278            assertTrue(context.hasFieldErrors());
279
280            // check field errors
281            List<String> l = context.getFieldErrors().get("email");
282            assertNotNull(l);
283            assertEquals(1, l.size());
284            assertEquals("Not a valid e-mail.", l.get(0));
285            l = context.getFieldErrors().get("email2");
286            assertNotNull(l);
287            assertEquals(2, l.size());
288            assertEquals("Not a valid e-mail2.", l.get(0));
289            assertEquals("Email2 not from the right company.", l.get(1));
290
291            // check action errors
292            assertTrue(context.hasActionErrors());
293            l = (List<String>) context.getActionErrors();
294            assertNotNull(l);
295            assertEquals(2, l.size()); // both expression test failed see AnnotationUser-validation.xml
296            assertEquals("Email does not start with mark", l.get(0));
297        } catch (ValidationException ex) {
298            ex.printStackTrace();
299            fail("Validation error: " + ex.getMessage());
300        }
301    }
302
303    public void testSkipAllActionLevelShortCircuit2() {
304        // get validators
305        List validatorList = annotationActionValidatorManager.getValidators(AnnotationUser.class, null);
306        assertEquals(10, validatorList.size());
307
308        try {
309            AnnotationUser user = new AnnotationUser();
310            user.setName("Mark");
311            // * mark both email to starts with mark to get pass the action-level validator,
312            // so we could concentrate on testing the field-level validators (AnnotationUser-validation.xml)
313            // * make both email the same to pass the action-level validator at 
314            // AnnotationUserMarker-validation.xml
315            user.setEmail("mark_bad_email_for_field_val@foo.com");
316            user.setEmail2("mark_bad_email_for_field_val@foo.com");
317
318            ValidatorContext context = new GenericValidatorContext(user);
319            annotationActionValidatorManager.validate(user, null, context);
320            assertTrue(context.hasFieldErrors());
321
322            // check field errors
323            // we have an error in this field level, email does not ends with mycompany.com
324            List l = (List) context.getFieldErrors().get("email");
325            assertNotNull(l);
326            assertEquals(1, l.size()); // because email-field-val is short-circuit
327            assertEquals("Email not from the right company.", l.get(0));
328
329            
330            // check action errors
331            l = (List) context.getActionErrors();
332            assertFalse(context.hasActionErrors());
333            assertEquals(0, l.size());
334            
335            
336        } catch (ValidationException ex) {
337            ex.printStackTrace();
338            fail("Validation error: " + ex.getMessage());
339        }
340    }
341
342    
343    public void testActionLevelShortCircuit() throws Exception {
344    	
345    	List validatorList = annotationActionValidatorManager.getValidators(AnnotationUser.class, null);
346        assertEquals(10, validatorList.size());
347        
348        AnnotationUser user = new AnnotationUser();
349        // all fields will trigger error, but sc of action-level, cause it to not appear
350        user.setName(null);		
351
352        user.setEmail("rainerh(at)example.com");
353        user.setEmail("rainer_h(at)example.com");
354
355
356        ValidatorContext context = new GenericValidatorContext(user);
357        annotationActionValidatorManager.validate(user, null, context);
358    	
359    	// check field level errors
360        // shouldn't have any because action error prevents validation of anything else
361        List l = (List) context.getFieldErrors().get("email2");
362        assertNull(l);
363    	
364    	
365        // check action errors
366        assertTrue(context.hasActionErrors());
367        l = (List) context.getActionErrors();
368        assertNotNull(l);
369        // we only get one, because AnnotationUserMarker-validation.xml action-level validator
370        // already sc it   :-)
371        assertEquals(1, l.size()); 
372        assertEquals("Email not the same as email2", l.get(0));
373    }
374    
375    
376    public void testShortCircuitNoErrors() {
377        // get validators
378        List validatorList = annotationActionValidatorManager.getValidators(AnnotationUser.class, null);
379        assertEquals(10, validatorList.size());
380
381        try {
382            AnnotationUser user = new AnnotationUser();
383            user.setName("Mark");
384            user.setEmail("mark@mycompany.com");
385            user.setEmail2("mark@mycompany.com");
386
387            ValidatorContext context = new GenericValidatorContext(user);
388            annotationActionValidatorManager.validate(user, null, context);
389            assertFalse(context.hasErrors());
390        } catch (ValidationException ex) {
391            ex.printStackTrace();
392            fail("Validation error: " + ex.getMessage());
393        }
394    }
395}