You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2011/12/02 17:33:45 UTC

svn commit: r1209569 [48/50] - in /struts/struts2/branches/STRUTS_3_X: apps/blank/src/main/java/example/ apps/blank/src/test/java/example/ apps/jboss-blank/src/main/java/example/ apps/jboss-blank/src/test/java/example/ apps/mailreader/src/main/java/mai...

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/SimpleActionValidationTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/SimpleActionValidationTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/SimpleActionValidationTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/SimpleActionValidationTest.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,241 @@
+/*
+ * Copyright 2002-2003,2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.xwork2.validator;
+
+import org.apache.struts2.xwork2.config.providers.MockConfigurationProvider;
+import org.apache.struts2.xwork2.ActionContext;
+import org.apache.struts2.xwork2.config.providers.XmlConfigurationProvider;
+import org.apache.struts2.xwork2.ActionProxy;
+import org.apache.struts2.xwork2.util.ValueStack;
+import org.apache.struts2.xwork2.ValidationAware;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.validator.validators.ValidatorSupport;
+import org.apache.struts2.xwork2.SimpleAction;
+
+import java.util.*;
+
+
+/**
+ * SimpleActionValidationTest
+ * <p/>
+ * Created : Jan 20, 2003 11:04:25 PM
+ *
+ * @author Jason Carreira
+ */
+public class SimpleActionValidationTest extends XWorkTestCase {
+
+    private Locale origLocale;
+
+
+    public void testAliasValidation() {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+        params.put("baz", "10");
+
+        //valid values
+        params.put("bar", "7");
+        params.put("date", "12/23/2002");
+        params.put("percentage", "1.23456789");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        try {
+            ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.VALIDATION_ACTION_NAME, extraContext);
+            proxy.execute();
+
+            ValidationAware validationAware = (ValidationAware) proxy.getAction();
+            assertFalse(validationAware.hasFieldErrors());
+
+            // put in an out-of-range value to see if the old validators still work
+            ActionContext.setContext(new ActionContext(new HashMap<String, Object>()));
+            params.put("bar", "42");
+            proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.VALIDATION_ALIAS_NAME, extraContext);
+            proxy.execute();
+            validationAware = (ValidationAware) proxy.getAction();
+            assertTrue(validationAware.hasFieldErrors());
+
+            Map<String, List<String>> errors = validationAware.getFieldErrors();
+            assertTrue(errors.containsKey("baz"));
+
+            List<String> bazErrors = errors.get("baz");
+            assertEquals(1, bazErrors.size());
+
+            String message = bazErrors.get(0);
+            assertEquals("baz out of range.", message);
+            assertTrue(errors.containsKey("bar"));
+
+            List<String> barErrors = errors.get("bar");
+            assertEquals(1, barErrors.size());
+            message = barErrors.get(0);
+            assertEquals("bar must be between 6 and 10, current value is 42.", message);
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+
+    public void testLookingUpFieldNameAsTextKey() {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+
+        // should cause a message
+        params.put("baz", "-1");
+
+        //valid values
+        params.put("bar", "7");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        try {
+            ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.VALIDATION_ACTION_NAME, extraContext);
+            proxy.execute();
+            assertTrue(((ValidationAware) proxy.getAction()).hasFieldErrors());
+
+            Map<String, List<String>> errors = ((ValidationAware) proxy.getAction()).getFieldErrors();
+            List<String> bazErrors = errors.get("baz");
+            assertEquals(1, bazErrors.size());
+
+            String errorMessage = bazErrors.get(0);
+            assertNotNull(errorMessage);
+            assertEquals("Baz Field must be greater than 0", errorMessage);
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+
+    public void testMessageKey() {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+        params.put("foo", "200");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        try {
+            ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.VALIDATION_ACTION_NAME, extraContext);
+            ValueStack stack = ActionContext.getContext().getValueStack();
+            ActionContext.setContext(new ActionContext(stack.getContext()));
+            ActionContext.getContext().setLocale(Locale.US);
+            proxy.execute();
+            assertTrue(((ValidationAware) proxy.getAction()).hasFieldErrors());
+
+            Map<String, List<String>> errors = ((ValidationAware) proxy.getAction()).getFieldErrors();
+            List<String> fooErrors = errors.get("foo");
+            assertEquals(1, fooErrors.size());
+
+            String errorMessage = fooErrors.get(0);
+            assertNotNull(errorMessage);
+            assertEquals("Foo Range Message", errorMessage);
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+
+    public void testMessageKeyIsReturnedIfNoOtherDefault() throws ValidationException {
+        Validator validator = new ValidatorSupport() {
+            public void validate(Object object) throws ValidationException {
+                addActionError(object);
+            }
+        };
+        validator.setValueStack(ActionContext.getContext().getValueStack());
+
+        String messageKey = "does.not.exist";
+        validator.setMessageKey(messageKey);
+
+        ValidatorContext validatorContext = new DelegatingValidatorContext(new SimpleAction());
+        validator.setValidatorContext(validatorContext);
+        validator.validate(this);
+        assertTrue(validatorContext.hasActionErrors());
+
+        Collection<String> errors = validatorContext.getActionErrors();
+        assertEquals(1, errors.size());
+        assertEquals(messageKey, errors.toArray()[0]);
+    }
+
+    public void testParamterizedMessage() {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+        params.put("bar", "42");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        try {
+            ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.VALIDATION_ACTION_NAME, extraContext);
+            proxy.execute();
+            assertTrue(((ValidationAware) proxy.getAction()).hasFieldErrors());
+
+            Map<String, List<String>> errors = ((ValidationAware) proxy.getAction()).getFieldErrors();
+            List<String> barErrors = errors.get("bar");
+            assertEquals(1, barErrors.size());
+
+            String errorMessage = barErrors.get(0);
+            assertNotNull(errorMessage);
+            assertEquals("bar must be between 6 and 10, current value is 42.", errorMessage);
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+
+    public void testSubPropertiesAreValidated() {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+        params.put("baz", "10");
+
+        //valid values
+        params.put("foo", "8");
+        params.put("bar", "7");
+        params.put("date", "12/23/2002");
+
+        params.put("bean.name", "Name should be valid");
+
+        // this should cause a message
+        params.put("bean.count", "100");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        try {
+            ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.VALIDATION_SUBPROPERTY_NAME, extraContext);
+            proxy.execute();
+            assertTrue(((ValidationAware) proxy.getAction()).hasFieldErrors());
+
+            Map<String, List<String>> errors = ((ValidationAware) proxy.getAction()).getFieldErrors();
+            List<String> beanCountErrors = errors.get("bean.count");
+            assertEquals(1, beanCountErrors.size());
+
+            String errorMessage = beanCountErrors.get(0);
+            assertNotNull(errorMessage);
+            assertEquals("bean.count out of range.", errorMessage);
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        origLocale = Locale.getDefault();
+        Locale.setDefault(Locale.US);
+
+        loadConfigurationProviders(new XmlConfigurationProvider("xwork-test-beans.xml"), new MockConfigurationProvider());
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        Locale.setDefault(origLocale);
+    }
+}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/StringLengthFieldValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/StringLengthFieldValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/StringLengthFieldValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/StringLengthFieldValidatorTest.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2002-2006,2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.xwork2.validator;
+
+import org.apache.struts2.xwork2.ActionContext;
+import org.apache.struts2.xwork2.ActionSupport;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.validator.validators.StringLengthFieldValidator;
+
+/**
+ * 
+ * @author tm_jee
+ * @version $Date: 2011-12-02 12:24:48 +0100 (Fri, 02 Dec 2011) $ $Id: StringLengthFieldValidatorTest.java 1209415 2011-12-02 11:24:48Z lukaszlenart $
+ */
+public class StringLengthFieldValidatorTest extends XWorkTestCase {
+
+	protected InternalActionSupport action;
+	protected StringLengthFieldValidator validator;
+	
+	public void testStringLengthEmptyNoTrim1() throws Exception {
+		action.setMyField("");
+		
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "");
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testStringLengthNullNoTrim() throws Exception {
+		action.setMyField(null);
+
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), null);
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testStringLengthEmptyTrim1() throws Exception {
+		action.setMyField("   ");
+		
+		validator.setTrim(true);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "   ");
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testStringLengthEmptyNoTrim2() throws Exception {
+		action.setMyField("          ");
+		
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "          ");
+		assertTrue(action.hasFieldErrors());
+	}
+	
+	
+	public void testStringLengthNullTrim() throws Exception {
+		action.setMyField(null);
+
+		validator.setTrim(true);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), null);
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testInvalidStringLengthNoTrim() throws Exception {
+		action.setMyField("abcdefghijklmn");
+		
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "abcdefghijklmn");
+		assertTrue(action.hasFieldErrors());
+	}
+	
+	public void testInvalidStringLengthTrim() throws Exception {
+		action.setMyField("abcdefghijklmn   ");
+		
+		validator.setTrim(true);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "abcdefghijklmn   ");
+		assertTrue(action.hasFieldErrors());
+	}
+	
+	public void testValidStringLengthNoTrim() throws Exception {
+		action.setMyField("   ");
+		
+		validator.setTrim(false);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "   ");
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	public void testValidStringLengthTrim() throws Exception {
+		action.setMyField("asd          ");
+		
+		validator.setTrim(true);
+		validator.validate(action);
+		
+		assertEquals(action.getMyField(), "asd          ");
+		assertFalse(action.hasFieldErrors());
+	}
+	
+	
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		action = new InternalActionSupport();
+		validator = new StringLengthFieldValidator();
+		validator.setFieldName("myField");
+		validator.setMessageKey("error");
+		validator.setValidatorContext(new DelegatingValidatorContext(action));
+		validator.setMaxLength(5);
+		validator.setMinLength(2);
+        validator.setValueStack(ActionContext.getContext().getValueStack());
+    }
+	
+	
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		action = null;
+		validator = null;
+	}
+	
+	public static class InternalActionSupport extends ActionSupport {
+
+		private static final long serialVersionUID = 1L;
+		
+		private String myField;
+		public String getMyField() { return this.myField; }
+		public void setMyField(String myField) { this.myField = myField; }
+	}
+}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/StringValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/StringValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/StringValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/StringValidatorTest.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2002-2006,2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.xwork2.validator;
+
+import org.apache.struts2.xwork2.config.providers.MockConfigurationProvider;
+import org.apache.struts2.xwork2.Action;
+import org.apache.struts2.xwork2.ActionContext;
+import org.apache.struts2.xwork2.ActionInvocation;
+import org.apache.struts2.xwork2.ActionProxy;
+import org.apache.struts2.xwork2.ValidationAwareSupport;
+import org.apache.struts2.xwork2.config.entities.ActionConfig;
+import org.apache.struts2.xwork2.test.Equidae;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.validator.validators.RequiredStringValidator;
+
+import java.util.List;
+import java.util.Map;
+
+import org.easymock.EasyMock;
+
+/**
+ * @author Mark Woon
+ * @author tm_jee (tm_jee (at) yahoo.co.uk )
+ */
+public class StringValidatorTest extends XWorkTestCase {
+
+    public void testRequiredStringWithNullValue() throws Exception {
+        Equidae equidae = new Equidae();
+        equidae.setHorse(null);
+
+        DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
+        container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
+
+        assertTrue(context.hasFieldErrors());
+    }
+
+
+    public void testRequiredString() throws Exception {
+        Equidae equidae = new Equidae();
+
+        // everything should fail
+        equidae.setHorse("");
+        ActionContext.getContext().getValueStack().push(equidae);
+
+        DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
+        container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
+
+        assertTrue(context.hasFieldErrors());
+
+        Map fieldErrors = context.getFieldErrors();
+        assertTrue(fieldErrors.containsKey("horse"));
+        assertEquals(2, ((List) fieldErrors.get("horse")).size());
+
+        // trim = false should fail
+        equidae.setHorse("  ");
+        ActionContext.getContext().getValueStack().push(equidae);
+        context = new DelegatingValidatorContext(new ValidationAwareSupport());
+        container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
+
+        assertTrue(context.hasFieldErrors());
+        fieldErrors = context.getFieldErrors();
+        assertTrue(fieldErrors.containsKey("horse"));
+
+        List errors = (List) fieldErrors.get("horse");
+        assertEquals(1, errors.size());
+        assertEquals("trim", (String) errors.get(0));
+    }
+
+    public void testStringLength() throws Exception {
+        Equidae equidae = new Equidae();
+
+        equidae.setCow("asdf");
+        equidae.setDonkey("asdf");
+        ActionContext.getContext().getValueStack().push(equidae);
+
+        DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
+        container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
+        assertTrue(context.hasFieldErrors());
+
+        Map fieldErrors = context.getFieldErrors();
+
+        // cow
+        assertTrue(fieldErrors.containsKey("cow"));
+
+        List errors = (List) fieldErrors.get("cow");
+        assertEquals(2, errors.size());
+        assertEquals("noTrim-min5", errors.get(0));
+        assertEquals("noTrim-min5-max10", errors.get(1));
+
+        // donkey
+        assertTrue(fieldErrors.containsKey("donkey"));
+        errors = (List) fieldErrors.get("donkey");
+        assertEquals(2, errors.size());
+        assertEquals("trim-min5", errors.get(0));
+        assertEquals("trim-min5-max10", errors.get(1));
+
+        equidae.setCow("asdf  ");
+        equidae.setDonkey("asdf  ");
+        ActionContext.getContext().getValueStack().push(equidae);
+        context = new DelegatingValidatorContext(new ValidationAwareSupport());
+        container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
+        assertTrue(context.hasFieldErrors());
+
+        fieldErrors = context.getFieldErrors();
+
+        // cow
+        assertFalse(fieldErrors.containsKey("cow"));
+
+        // donkey
+        assertTrue(fieldErrors.containsKey("donkey"));
+        errors = (List) fieldErrors.get("donkey");
+        assertEquals(2, errors.size());
+        assertEquals("trim-min5", errors.get(0));
+        assertEquals("trim-min5-max10", errors.get(1));
+
+        equidae.setCow("asdfasdf");
+        equidae.setDonkey("asdfasdf");
+        ActionContext.getContext().getValueStack().push(equidae);
+        context = new DelegatingValidatorContext(new ValidationAwareSupport());
+        container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
+        assertTrue(context.hasFieldErrors());
+
+        fieldErrors = context.getFieldErrors();
+
+        // cow
+        assertFalse(fieldErrors.containsKey("cow"));
+
+        // donkey
+        assertFalse(fieldErrors.containsKey("donkey"));
+
+        equidae.setCow("asdfasdf   ");
+        equidae.setDonkey("asdfasdf   ");
+        ActionContext.getContext().getValueStack().push(equidae);
+        context = new DelegatingValidatorContext(new ValidationAwareSupport());
+        container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
+        assertTrue(context.hasFieldErrors());
+
+        fieldErrors = context.getFieldErrors();
+
+        // cow
+        assertTrue(fieldErrors.containsKey("cow"));
+        errors = (List) fieldErrors.get("cow");
+        assertEquals(2, errors.size());
+        assertEquals("noTrim-min5-max10", errors.get(0));
+        assertEquals("noTrim-max10", errors.get(1));
+
+        // donkey
+        assertFalse(fieldErrors.containsKey("donkey"));
+
+        equidae.setCow("asdfasdfasdf");
+        equidae.setDonkey("asdfasdfasdf");
+        ActionContext.getContext().getValueStack().push(equidae);
+        context = new DelegatingValidatorContext(new ValidationAwareSupport());
+        container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
+        assertTrue(context.hasFieldErrors());
+
+        fieldErrors = context.getFieldErrors();
+
+        // cow
+        assertTrue(fieldErrors.containsKey("cow"));
+        errors = (List) fieldErrors.get("cow");
+        assertEquals(2, errors.size());
+        assertEquals("noTrim-min5-max10", errors.get(0));
+        assertEquals("noTrim-max10", errors.get(1));
+
+        // donkey
+        assertTrue(fieldErrors.containsKey("donkey"));
+        errors = (List) fieldErrors.get("donkey");
+        assertEquals(2, errors.size());
+        assertEquals("trim-min5-max10", errors.get(0));
+        assertEquals("trim-max10", errors.get(1));
+    }
+
+    public void testGetSetTrim() {
+        RequiredStringValidator val = new RequiredStringValidator();
+
+        val.setTrim(true);
+        assertEquals(true, val.getTrim());
+
+        val.setTrim(false);
+        assertEquals(false, val.getTrim());
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        loadConfigurationProviders(new MockConfigurationProvider());
+
+        ActionConfig config = new ActionConfig.Builder("", "name", "").build();
+        ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class);
+        ActionProxy proxy = EasyMock.createNiceMock(ActionProxy.class);
+
+        EasyMock.expect(invocation.getProxy()).andReturn(proxy).anyTimes();
+        EasyMock.expect(invocation.getAction()).andReturn(null).anyTimes();
+        EasyMock.expect(invocation.invoke()).andReturn(Action.SUCCESS).anyTimes();
+        EasyMock.expect(proxy.getMethod()).andReturn("execute").anyTimes();
+        EasyMock.expect(proxy.getConfig()).andReturn(config).anyTimes();
+
+
+        EasyMock.replay(invocation);
+        EasyMock.replay(proxy);
+
+        ActionContext.getContext().setActionInvocation(invocation);
+    }
+}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/URLValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/URLValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/URLValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/URLValidatorTest.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2002-2003,2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.xwork2.validator;
+
+import org.apache.struts2.xwork2.ActionContext;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.util.ValueStack;
+import org.apache.struts2.xwork2.validator.validators.URLValidator;
+
+/**
+ * Test case for URLValidator
+ * 
+ * @author tm_jee
+ * @version $Date: 2011-12-02 12:24:48 +0100 (Fri, 02 Dec 2011) $ $Id: URLValidatorTest.java 1209415 2011-12-02 11:24:48Z lukaszlenart $
+ */
+public class URLValidatorTest extends XWorkTestCase {
+
+	
+	ValueStack stack;
+	ActionContext actionContext;
+	
+	public void testAcceptNullValueForMutualExclusionOfValidators() throws Exception {
+		
+		URLValidator validator = new URLValidator();
+		validator.setValidatorContext(new GenericValidatorContext(new Object()));
+		validator.setFieldName("testingUrl1");
+        validator.setValueStack(ActionContext.getContext().getValueStack());
+        validator.validate(new MyObject());
+		
+		assertFalse(validator.getValidatorContext().hasErrors());
+		assertFalse(validator.getValidatorContext().hasActionErrors());
+		assertFalse(validator.getValidatorContext().hasActionMessages());
+		assertFalse(validator.getValidatorContext().hasFieldErrors());
+	}
+	
+	public void testInvalidEmptyValue() throws Exception {
+		
+		URLValidator validator = new URLValidator();
+		validator.setValidatorContext(new GenericValidatorContext(new Object()));
+		validator.setFieldName("testingUrl2");
+        validator.setValueStack(ActionContext.getContext().getValueStack());
+        validator.validate(new MyObject());
+		
+		assertFalse(validator.getValidatorContext().hasErrors());
+		assertFalse(validator.getValidatorContext().hasActionErrors());
+		assertFalse(validator.getValidatorContext().hasActionMessages());
+		assertFalse(validator.getValidatorContext().hasFieldErrors());
+	}
+	
+	public void testInvalidValue() throws Exception {
+		
+		URLValidator validator = new URLValidator();
+		validator.setValidatorContext(new GenericValidatorContext(new Object()));
+		validator.setFieldName("testingUrl3");
+        validator.setValueStack(ActionContext.getContext().getValueStack());
+        validator.validate(new MyObject());
+		
+		assertTrue(validator.getValidatorContext().hasErrors());
+		assertFalse(validator.getValidatorContext().hasActionErrors());
+		assertFalse(validator.getValidatorContext().hasActionMessages());
+		assertTrue(validator.getValidatorContext().hasFieldErrors());
+	}
+	
+	
+	public void testValidUrl1() throws Exception {
+		
+		URLValidator validator = new URLValidator();
+		validator.setValidatorContext(new GenericValidatorContext(new Object()));
+		validator.setFieldName("testingUrl4");
+        validator.setValueStack(ActionContext.getContext().getValueStack());
+        validator.validate(new MyObject());
+		
+		assertFalse(validator.getValidatorContext().hasErrors());
+		assertFalse(validator.getValidatorContext().hasActionErrors());
+		assertFalse(validator.getValidatorContext().hasActionMessages());
+		assertFalse(validator.getValidatorContext().hasFieldErrors());
+	}
+	
+	public void testValidUrl2() throws Exception {
+		
+		URLValidator validator = new URLValidator();
+		validator.setValidatorContext(new GenericValidatorContext(new Object()));
+		validator.setFieldName("testingUrl5");
+        validator.setValueStack(ActionContext.getContext().getValueStack());
+        validator.validate(new MyObject());
+		
+		assertFalse(validator.getValidatorContext().hasErrors());
+		assertFalse(validator.getValidatorContext().hasActionErrors());
+		assertFalse(validator.getValidatorContext().hasActionMessages());
+		assertFalse(validator.getValidatorContext().hasFieldErrors());
+	}
+	
+	@Override
+    protected void setUp() throws Exception {
+	    super.setUp();
+		stack = ActionContext.getContext().getValueStack();
+		actionContext = ActionContext.getContext();
+	}
+	
+	@Override
+    protected void tearDown() throws Exception {
+	    super.tearDown();
+		stack = null;
+		actionContext = null;
+	}
+	
+	
+	class MyObject {
+		public String getTestingUrl1() {
+			return null;
+		}
+		
+		public String getTestingUrl2() {
+			return "";
+		}
+		
+		public String getTestingUrl3() {
+			return "sasdasd@asddd";
+		}
+		
+		public String getTestingUrl4() {
+			//return "http://yahoo.com/";
+			return "http://www.jroller.com1?qwe=qwe";
+		}
+		
+		public String getTestingUrl5() {
+			return "http://yahoo.com/articles?id=123";
+		}
+	}
+}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ValidatorAnnotationTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ValidatorAnnotationTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ValidatorAnnotationTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ValidatorAnnotationTest.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,116 @@
+package org.apache.struts2.xwork2.validator;
+
+import org.apache.struts2.xwork2.ActionContext;
+import org.apache.struts2.xwork2.ActionProxy;
+import org.apache.struts2.xwork2.ValidationAware;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.config.providers.XmlConfigurationProvider;
+
+import java.util.Collection;
+import java.util.HashMap;
+
+/**
+ * Unit test for annotated Validators.
+ *
+ * @author Rainer Hermanns
+ */
+public class ValidatorAnnotationTest extends XWorkTestCase {
+
+    public void testNotAnnotatedMethodSuccess() throws Exception {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+        params.put("date", "12/23/2002");
+        params.put("foo", "5");
+        params.put("bar", "7");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", "notAnnotatedMethod", extraContext);
+        proxy.execute();
+        assertFalse(((ValidationAware) proxy.getAction()).hasActionErrors());
+
+        Collection errors = ((ValidationAware) proxy.getAction()).getActionErrors();
+        assertEquals(0, errors.size());
+    }
+
+    public void testNotAnnotatedMethodSuccess2() throws Exception {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", "notAnnotatedMethod", extraContext);
+        proxy.execute();
+        assertFalse(((ValidationAware) proxy.getAction()).hasActionErrors());
+
+        Collection errors = ((ValidationAware) proxy.getAction()).getActionErrors();
+        assertEquals(0, errors.size());
+    }
+
+    public void testAnnotatedMethodFailure() throws Exception {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", "annotatedMethod", extraContext);
+        proxy.execute();
+        assertTrue(((ValidationAware) proxy.getAction()).hasActionErrors());
+        Collection errors = ((ValidationAware) proxy.getAction()).getActionErrors();
+        assertEquals(1, errors.size());
+
+        assertEquals("Need param1 or param2.", errors.iterator().next());
+
+    }
+
+    public void testAnnotatedMethodSuccess() throws Exception {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+
+        //make it not fail
+        params.put("param1", "key1");
+        params.put("param2", "key2");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", "annotatedMethod", extraContext);
+        proxy.execute();
+        assertFalse(((ValidationAware) proxy.getAction()).hasActionErrors());
+    }
+
+    public void testAnnotatedMethodSuccess2() throws Exception {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+
+        //make it not fail
+        params.put("param2", "key2");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", "annotatedMethod", extraContext);
+        proxy.execute();
+        assertFalse(((ValidationAware) proxy.getAction()).hasActionErrors());
+    }
+
+    public void testAnnotatedMethodSuccess3() throws Exception {
+        HashMap<String, Object> params = new HashMap<String, Object>();
+
+        //make it not fail
+        params.put("param1", "key1");
+
+        HashMap<String, Object> extraContext = new HashMap<String, Object>();
+        extraContext.put(ActionContext.PARAMETERS, params);
+
+        ActionProxy proxy = actionProxyFactory.createActionProxy("", "annotatedMethod", extraContext);
+        proxy.execute();
+        assertFalse(((ValidationAware) proxy.getAction()).hasActionErrors());
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        loadConfigurationProviders(new XmlConfigurationProvider("xwork-default.xml"), new XmlConfigurationProvider("xwork-test-validation.xml"));
+    }
+
+}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorFieldValidatorModelTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorFieldValidatorModelTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorFieldValidatorModelTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorFieldValidatorModelTest.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2002-2003,2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.xwork2.validator;
+
+import org.apache.struts2.xwork2.Action;
+import org.apache.struts2.xwork2.ActionContext;
+import org.apache.struts2.xwork2.ActionInvocation;
+import org.apache.struts2.xwork2.ActionProxy;
+import org.apache.struts2.xwork2.config.entities.ActionConfig;
+import org.apache.struts2.xwork2.test.TestBean2;
+
+import java.util.*;
+
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.TestBean;
+import org.easymock.EasyMock;
+
+
+/**
+ * VisitorFieldValidatorModelTest
+ *
+ * @author Jason Carreira
+ *         Date: Mar 18, 2004 2:51:42 PM
+ */
+public class VisitorFieldValidatorModelTest extends XWorkTestCase {
+
+    protected VisitorValidatorModelAction action;
+    private Locale origLocale;
+
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        origLocale = Locale.getDefault();
+        Locale.setDefault(Locale.US);
+
+        action = new VisitorValidatorModelAction();
+
+        TestBean bean = action.getBean();
+        Calendar cal = new GregorianCalendar(1900, 01, 01);
+        bean.setBirth(cal.getTime());
+        bean.setCount(-1);
+
+        ActionConfig config = new ActionConfig.Builder("", "name", "").build();
+        ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class);
+        ActionProxy proxy = EasyMock.createNiceMock(ActionProxy.class);
+
+        EasyMock.expect(invocation.getProxy()).andReturn(proxy).anyTimes();
+        EasyMock.expect(invocation.getAction()).andReturn(null).anyTimes();
+        EasyMock.expect(invocation.invoke()).andReturn(Action.SUCCESS).anyTimes();
+        EasyMock.expect(proxy.getMethod()).andReturn("execute").anyTimes();
+        EasyMock.expect(proxy.getConfig()).andReturn(config).anyTimes();
+
+
+        EasyMock.replay(invocation);
+        EasyMock.replay(proxy);
+
+        ActionContext.getContext().setActionInvocation(invocation);
+
+    }
+
+    public void testModelFieldErrorsAddedWithoutFieldPrefix() throws Exception {
+        container.getInstance(ActionValidatorManager.class).validate(action, null);
+        assertTrue(action.hasFieldErrors());
+
+        Map<String, List<String>> fieldErrors = action.getFieldErrors();
+
+        // the required string validation inherited from the VisitorValidatorTestAction
+        assertTrue(fieldErrors.containsKey("context"));
+
+        // the bean validation which is now at the top level because we set the appendPrefix to false
+        assertTrue(fieldErrors.containsKey("name"));
+
+        List<String> nameMessages = fieldErrors.get("name");
+        assertEquals(1, nameMessages.size());
+
+        String nameMessage = (String) nameMessages.get(0);
+        assertEquals("You must enter a name.", nameMessage);
+    }
+
+    public void testModelFieldErrorsAddedWithoutFieldPrefixForInterface() throws Exception {
+        TestBean origBean = action.getBean();
+        TestBean2 bean = new TestBean2();
+        bean.setBirth(origBean.getBirth());
+        bean.setCount(origBean.getCount());
+        action.setBean(bean);
+        assertTrue(action.getBean() instanceof TestBean2);
+
+        container.getInstance(ActionValidatorManager.class).validate(action, null);
+        assertTrue(action.hasFieldErrors());
+
+        Map<String, List<String>> fieldErrors = action.getFieldErrors();
+
+        // the required string validation inherited from the VisitorValidatorTestAction
+        assertTrue(fieldErrors.containsKey("context"));
+
+        // the bean validation which is now at the top level because we set the appendPrefix to false
+        assertTrue(fieldErrors.containsKey("name"));
+
+        List<String> nameMessages = fieldErrors.get("name");
+        assertEquals(1, nameMessages.size());
+
+        String nameMessage = nameMessages.get(0);
+        assertEquals("You must enter a name.", nameMessage);
+
+        // should also have picked up validation check for DataAware interface
+        assertTrue(fieldErrors.containsKey("data"));
+
+        List<String> dataMessages = fieldErrors.get("data");
+        assertEquals(1, dataMessages.size());
+
+        String dataMessage = dataMessages.get(0);
+        assertEquals("You must enter a value for data.", dataMessage);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        ActionContext.setContext(null);
+        Locale.setDefault(origLocale);
+    }
+}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorFieldValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorFieldValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorFieldValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorFieldValidatorTest.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2002-2003,2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.xwork2.validator;
+
+import org.apache.struts2.xwork2.Action;
+import org.apache.struts2.xwork2.ActionContext;
+import org.apache.struts2.xwork2.ActionInvocation;
+import org.apache.struts2.xwork2.ActionProxy;
+import org.apache.struts2.xwork2.config.entities.ActionConfig;
+
+import java.util.*;
+
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.TestBean;
+import org.easymock.EasyMock;
+
+
+/**
+ * VisitorFieldValidatorTest
+ *
+ * @author Jason Carreira
+ *         Created Aug 4, 2003 1:26:01 AM
+ */
+public class VisitorFieldValidatorTest extends XWorkTestCase {
+
+    protected VisitorValidatorTestAction action;
+    private Locale origLocale;
+
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        origLocale = Locale.getDefault();
+        Locale.setDefault(Locale.US);
+
+        action = new VisitorValidatorTestAction();
+
+        TestBean bean = action.getBean();
+        Calendar cal = new GregorianCalendar(1900, 01, 01);
+        bean.setBirth(cal.getTime());
+        bean.setCount(-1);
+
+        ActionConfig config = new ActionConfig.Builder("", "name", "").build();
+        ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class);
+        ActionProxy proxy = EasyMock.createNiceMock(ActionProxy.class);
+
+        EasyMock.expect(invocation.getProxy()).andReturn(proxy).anyTimes();
+        EasyMock.expect(invocation.getAction()).andReturn(action).anyTimes();
+        EasyMock.expect(invocation.invoke()).andReturn(Action.SUCCESS).anyTimes();
+        EasyMock.expect(proxy.getMethod()).andReturn("execute").anyTimes();
+        EasyMock.expect(proxy.getConfig()).andReturn(config).anyTimes();
+        
+
+        EasyMock.replay(invocation);
+        EasyMock.replay(proxy);
+
+        ActionContext.getContext().setActionInvocation(invocation);
+    }
+
+    public void testArrayValidation() throws Exception {
+        TestBean[] beanArray = action.getTestBeanArray();
+        TestBean testBean = beanArray[0];
+        testBean.setName("foo");
+        validate("validateArray");
+
+        assertTrue(action.hasFieldErrors());
+
+        Map<String, List<String>> fieldErrors = action.getFieldErrors();
+
+        //4 errors for the array, one for context
+        assertEquals(5, fieldErrors.size());
+        assertTrue(fieldErrors.containsKey("testBeanArray[1].name"));
+
+        //the error from the action should be there too
+        assertTrue(fieldErrors.containsKey("context"));
+
+        List<String> errors = fieldErrors.get("testBeanArray[1].name");
+        assertEquals(1, errors.size());
+        errors = fieldErrors.get("testBeanArray[2].name");
+        assertEquals(1, errors.size());
+        errors = fieldErrors.get("testBeanArray[3].name");
+        assertEquals(1, errors.size());
+        errors = fieldErrors.get("testBeanArray[4].name");
+        assertEquals(1, errors.size());
+    }
+
+    public void testBeanMessagesUseBeanResourceBundle() throws Exception {
+        validate("beanMessageBundle");
+        assertTrue(action.hasFieldErrors());
+
+        Map<String, List<String>> fieldErrors = action.getFieldErrors();
+        assertTrue(fieldErrors.containsKey("bean.count"));
+
+        List<String> beanCountMessages = fieldErrors.get("bean.count");
+        assertEquals(1, beanCountMessages.size());
+
+        String beanCountMessage = beanCountMessages.get(0);
+        assertEquals("bean: Count must be between 1 and 100, current value is -1.", beanCountMessage);
+    }
+
+    public void testCollectionValidation() throws Exception {
+        List testBeanList = action.getTestBeanList();
+        TestBean testBean = (TestBean) testBeanList.get(0);
+        testBean.setName("foo");
+        validate("validateList");
+
+        assertTrue(action.hasFieldErrors());
+
+        Map<String, List<String>> fieldErrors = action.getFieldErrors();
+
+        //4 for the list, 1 for context
+        assertEquals(5, fieldErrors.size());
+        assertTrue(fieldErrors.containsKey("testBeanList[1].name"));
+
+        //the error from the action should be there too
+        assertTrue(fieldErrors.containsKey("context"));
+
+        List<String> errors = fieldErrors.get("testBeanList[1].name");
+        assertEquals(1, errors.size());
+        errors = fieldErrors.get("testBeanList[2].name");
+        assertEquals(1, errors.size());
+        errors = fieldErrors.get("testBeanList[3].name");
+        assertEquals(1, errors.size());
+        errors = fieldErrors.get("testBeanList[4].name");
+        assertEquals(1, errors.size());
+    }
+
+    public void testContextIsOverriddenByContextParamInValidationXML() throws Exception {
+        validate("visitorValidationAlias");
+        assertTrue(action.hasFieldErrors());
+
+        Map<String, List<String>> fieldErrors = action.getFieldErrors();
+        assertEquals(3, fieldErrors.size());
+        assertTrue(fieldErrors.containsKey("bean.count"));
+        assertTrue(fieldErrors.containsKey("bean.name"));
+        assertTrue(!fieldErrors.containsKey("bean.birth"));
+
+        //the error from the action should be there too
+        assertTrue(fieldErrors.containsKey("context"));
+    }
+
+    public void testContextIsPropagated() throws Exception {
+        validate("visitorValidation");
+        assertTrue(action.hasFieldErrors());
+
+        Map<String, List<String>> fieldErrors = action.getFieldErrors();
+        assertEquals(3, fieldErrors.size());
+        assertTrue(!fieldErrors.containsKey("bean.count"));
+        assertTrue(fieldErrors.containsKey("bean.name"));
+        assertTrue(fieldErrors.containsKey("bean.birth"));
+
+        //the error from the action should be there too
+        assertTrue(fieldErrors.containsKey("context"));
+    }
+
+    public void testVisitorChildValidation() throws Exception {
+        validate("visitorChildValidation");
+        assertTrue(action.hasFieldErrors());
+
+        Map<String, List<String>> fieldErrors = action.getFieldErrors();
+        assertEquals(5, fieldErrors.size());
+        assertTrue(!fieldErrors.containsKey("bean.count"));
+        assertTrue(fieldErrors.containsKey("bean.name"));
+        assertTrue(fieldErrors.containsKey("bean.birth"));
+
+        assertTrue(fieldErrors.containsKey("bean.child.name"));
+        assertTrue(fieldErrors.containsKey("bean.child.birth"));
+        
+        //the error from the action should be there too
+        assertTrue(fieldErrors.containsKey("context"));
+    }
+    
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        ActionContext.setContext(null);
+        Locale.setDefault(origLocale);
+    }
+
+    private void validate(String context) throws ValidationException {
+        ActionContext actionContext = ActionContext.getContext();
+        actionContext.setName(context);
+        container.getInstance(ActionValidatorManager.class).validate(action, context);
+    }
+}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorValidatorModelAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorValidatorModelAction.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorValidatorModelAction.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorValidatorModelAction.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2002-2003,2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.xwork2.validator;
+
+import org.apache.struts2.xwork2.ModelDriven;
+
+
+/**
+ * VisitorValidatorModelAction
+ *
+ * @author Jason Carreira
+ *         Date: Mar 18, 2004 11:26:46 AM
+ */
+public class VisitorValidatorModelAction extends VisitorValidatorTestAction implements ModelDriven {
+
+    /**
+     * @return the model to be pushed onto the ValueStack instead of the Action itself
+     */
+    public Object getModel() {
+        return getBean();
+    }
+}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorValidatorTestAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorValidatorTestAction.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorValidatorTestAction.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/VisitorValidatorTestAction.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2002-2003,2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.xwork2.validator;
+
+import org.apache.struts2.xwork2.ActionSupport;
+import org.apache.struts2.xwork2.TestBean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * VisitorValidatorTestAction
+ *
+ * @author Jason Carreira
+ *         Created Aug 4, 2003 1:00:04 AM
+ */
+public class VisitorValidatorTestAction extends ActionSupport {
+
+    private List<TestBean> testBeanList = new ArrayList<TestBean>();
+    private String context;
+    private TestBean bean = new TestBean();
+    private TestBean[] testBeanArray;
+
+
+    public VisitorValidatorTestAction() {
+        testBeanArray = new TestBean[5];
+
+        for (int i = 0; i < 5; i++) {
+            testBeanArray[i] = new TestBean();
+            testBeanList.add(new TestBean());
+        }
+    }
+
+
+    public void setBean(TestBean bean) {
+        this.bean = bean;
+    }
+
+    public TestBean getBean() {
+        return bean;
+    }
+
+    public void setContext(String context) {
+        this.context = context;
+    }
+
+    public String getContext() {
+        return context;
+    }
+
+    public void setTestBeanArray(TestBean[] testBeanArray) {
+        this.testBeanArray = testBeanArray;
+    }
+
+    public TestBean[] getTestBeanArray() {
+        return testBeanArray;
+    }
+
+    public void setTestBeanList(List<TestBean> testBeanList) {
+        this.testBeanList = testBeanList;
+    }
+
+    public List<TestBean> getTestBeanList() {
+        return testBeanList;
+    }
+}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/validators/ValidatorSupportTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/validators/ValidatorSupportTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/validators/ValidatorSupportTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/validators/ValidatorSupportTest.java Fri Dec  2 16:33:03 2011
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2002-2006,2009 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.xwork2.validator.validators;
+
+import org.apache.struts2.xwork2.ActionContext;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.ognl.OgnlValueStack;
+import org.apache.struts2.xwork2.util.ValueStack;
+import org.apache.struts2.xwork2.util.ValueStackFactory;
+import org.apache.struts2.xwork2.validator.ValidationException;
+
+/**
+ * @author tmjee
+ * @version $Date: 2011-12-02 12:24:48 +0100 (Fri, 02 Dec 2011) $ $Id: ValidatorSupportTest.java 1209415 2011-12-02 11:24:48Z lukaszlenart $
+ */
+public class ValidatorSupportTest extends XWorkTestCase {
+
+	public void testConditionalParseExpression()  throws Exception {
+		ValueStack oldStack = ActionContext.getContext().getValueStack();
+		try {
+			OgnlValueStack stack = (OgnlValueStack) container.getInstance(ValueStackFactory.class).createValueStack();
+			stack.getContext().put(ActionContext.CONTAINER, container);
+			stack.getContext().put("something", "somevalue");
+			ActionContext.getContext().setValueStack(stack);
+			ValidatorSupport validator = new ValidatorSupport() {
+				public void validate(Object object) throws ValidationException {
+				}
+			};
+            validator.setValueStack(ActionContext.getContext().getValueStack());
+
+            validator.setParse(true);
+			String result1 = validator.conditionalParse("${#something}").toString();
+
+			validator.setParse(false);
+			String result2 = validator.conditionalParse("${#something}").toString();
+
+			assertEquals(result1, "somevalue");
+			assertEquals(result2, "${#something}");
+		}
+		finally {
+			ActionContext.getContext().setValueStack(oldStack);
+		}
+	}
+
+}

Modified: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/includeTest.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/includeTest.xml?rev=1209569&r1=1209568&r2=1209569&view=diff
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/includeTest.xml (original)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/includeTest.xml Fri Dec  2 16:33:03 2011
@@ -5,6 +5,6 @@
 
 <xwork>
     <package name="includeTest" extends="default" namespace="includeTest">
-        <action name="includeTest" class="com.opensymphony.xwork2.SimpleAction"></action>
+        <action name="includeTest" class="org.apache.struts2.xwork2.SimpleAction"></action>
     </package>
 </xwork>

Modified: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/log4j.properties?rev=1209569&r1=1209568&r2=1209569&view=diff
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/log4j.properties (original)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/log4j.properties Fri Dec  2 16:33:03 2011
@@ -7,11 +7,11 @@ log4j.appender.stdout.layout = org.apach
 log4j.appender.stdout.layout.ConversionPattern = %d{ISO8601} %-5p [%F:%L] : %m%n
 
 # set to info to let the code be executed when doing unit test for this interceptor
-log4j.category.com.opensymphony.xwork2.interceptor.LoggingInterceptor=INFO
-log4j.category.com.opensymphony.xwork2.interceptor.TimerInterceptor=INFO
+log4j.category.org.apache.struts2.xwork2.interceptor.LoggingInterceptor=INFO
+log4j.category.org.apache.struts2.xwork2.interceptor.TimerInterceptor=INFO
 
 # set to debug to let the code be executed when doing unit test for this interceptor
-log4j.category.com.opensymphony.xwork2.interceptor.ParametersInterceptor=DEBUG
+log4j.category.org.apache.struts2.xwork2.interceptor.ParametersInterceptor=DEBUG
 
 # set to debug for testing timer interceptor with custom log category
 log4j.category.com.mycompany.myapp.actiontiming=DEBUG

Modified: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/my-validators.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/my-validators.xml?rev=1209569&r1=1209568&r2=1209569&view=diff
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/my-validators.xml (original)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/my-validators.xml Fri Dec  2 16:33:03 2011
@@ -3,5 +3,5 @@
         "-//Apache Struts//XWork Validator Config 1.0//EN"
         "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
 <validators>
-    <validator name="requiredAdditional" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
+    <validator name="requiredAdditional" class="org.apache.struts2.xwork2.validator.validators.RequiredFieldValidator"/>
 </validators>

Modified: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/myOther-validators.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/myOther-validators.xml?rev=1209569&r1=1209568&r2=1209569&view=diff
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/myOther-validators.xml (original)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/myOther-validators.xml Fri Dec  2 16:33:03 2011
@@ -3,5 +3,5 @@
         "-//Apache Struts//XWork Validator Config 1.0//EN"
         "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
 <validators>
-    <validator name="requiredAnother" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
+    <validator name="requiredAnother" class="org.apache.struts2.xwork2.validator.validators.RequiredFieldValidator"/>
 </validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ActionSupportTest$MyActionSupport_da.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ActionSupportTest%24MyActionSupport_da.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ActionSupportTest$MyActionSupport_da.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ActionSupportTest$MyActionSupport_da.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1,8 @@
+#
+# Copyright (c) 2002-2006 by OpenSymphony
+# All rights reserved.
+#
+
+hello=Hello World
+hello.0=Hello World {0}
+hello.1=Hello World. This is {0} speaking {1}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/AnnotatedTestBean.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/AnnotatedTestBean.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/AnnotatedTestBean.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/AnnotatedTestBean.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1,6 @@
+#
+# Copyright (c) 2002-2006 by OpenSymphony
+# All rights reserved.
+#
+
+invalid.count=Count must be between ${min} and ${max}, current value is ${count}.

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/DefaultTextProviderTest_en_CA.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/DefaultTextProviderTest_en_CA.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/DefaultTextProviderTest_en_CA.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/DefaultTextProviderTest_en_CA.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1,8 @@
+#
+# Copyright (c) 2002-2006 by OpenSymphony
+# All rights reserved.
+#
+
+hello=Hello World
+hello.0=Hello World {0}
+hello.1=Hello World. This is {0} speaking {1}

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAction-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAction-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAction-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAction-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,13 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="count">
+        <field-validator type="required">
+            <message>You must enter a value for count.</message>
+        </field-validator>
+        <field-validator type="int">
+            <param name="min">1</param>
+            <param name="max">10</param>
+            <message>count must be between ${min} and ${max}, current value is ${count}.</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAction.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAction.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAction.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAction.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1 @@
+invalid.fieldvalue.birth=Invalid date for birth.

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAnnotationAction.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAnnotationAction.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAnnotationAction.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/ModelDrivenAnnotationAction.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1,6 @@
+#
+# Copyright (c) 2002-2006 by OpenSymphony
+# All rights reserved.
+#
+
+invalid.fieldvalue.birth=Invalid date for birth.

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-some-alias-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-some-alias-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-some-alias-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-some-alias-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,13 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="baz">
+        <field-validator type="required">
+            <message>You must enter a value for baz.</message>
+        </field-validator>
+        <field-validator type="int">
+            <param name="min">2</param>
+            <param name="max">4</param>
+            <message>baz out of range.</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-subproperty-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-subproperty-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-subproperty-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-subproperty-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,18 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="bean.name">
+        <field-validator type="required">
+            <message>You must enter a name for the bean.</message>
+        </field-validator>
+    </field>
+    <field name="bean.count">
+        <field-validator type="required">
+            <message>You must have a count for the bean.</message>
+        </field-validator>
+        <field-validator type="int">
+            <param name="min">0</param>
+            <param name="max">10</param>
+            <message>bean.count out of range.</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,58 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="bar">
+        <field-validator type="required">
+            <message>You must enter a value for bar.</message>
+        </field-validator>
+        <field-validator type="int">
+            <param name="min">6</param>
+            <param name="max">10</param>
+            <message>bar must be between ${min} and ${max}, current value is ${bar}.</message>
+        </field-validator>
+    </field>
+    <field name="percentage">
+        <field-validator type="double">
+            <param name="minExclusive">0.1</param>
+            <param name="maxExclusive">10.1</param>
+            <message>percentage must be between ${minExclusive} and ${maxExclusive}, current value is ${percentage}.</message>
+        </field-validator>
+    </field>
+    <field name="date">
+        <field-validator type="date">
+            <param name="min">12/22/2002</param>
+            <param name="max">12/25/2002</param>
+            <message>The date must be between 12-22-2002 and 12-25-2002.</message>
+        </field-validator>
+    </field>
+    <field name="foo">
+        <field-validator type="int">
+            <param name="min">0</param>
+            <param name="max">100</param>
+            <message key="foo.range">Could not find foo.range!</message>
+        </field-validator>
+    </field>
+    <field name="baz">
+        <field-validator type="int">
+            <param name="min">0</param>
+            <message key="baz.range">Could not find baz.range!</message>
+        </field-validator>
+    </field>
+    <field name="longFoo">
+        <field-validator type="long">
+            <param name="min">0</param>
+            <param name="max">100</param>
+            <message key="foo.range">Could not find foo.range!</message>
+        </field-validator>
+    </field>
+    <field name="shortFoo">
+        <field-validator type="short">
+            <param name="min">0</param>
+            <param name="max">100</param>
+            <message key="foo.range">Could not find foo.range!</message>
+        </field-validator>
+    </field>
+    <validator type="expression">
+        <param name="expression">foo > bar</param>
+        <message>Foo must be greater than Bar. Foo = ${foo}, Bar = ${bar}.</message>
+    </validator>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-validationAlias-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-validationAlias-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-validationAlias-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction-validationAlias-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,13 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="baz">
+        <field-validator type="required">
+            <message>You must enter a value for baz.</message>
+        </field-validator>
+        <field-validator type="int">
+            <param name="min">2</param>
+            <param name="max">4</param>
+            <message>baz out of range.</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1,3 @@
+foo.range=Foo Range Message
+baz.range=${getText(fieldName)} must be greater than ${min}
+baz=Baz Field

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction_de.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction_de.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction_de.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction_de.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1 @@
+foo.range=I don''t know German

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction_en.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAction_en.properties?rev=1209569&view=auto
==============================================================================
    (empty)

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1,8 @@
+#
+# Copyright (c) 2002-2006 by OpenSymphony
+# All rights reserved.
+#
+
+foo.range=Foo Range Message
+baz.range=${getText(fieldName)} must be greater than ${min}
+baz=Baz Field

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction_de.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction_de.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction_de.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction_de.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1,6 @@
+#
+# Copyright (c) 2002-2006 by OpenSymphony
+# All rights reserved.
+#
+
+foo.range=I don''t know German

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction_en.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction_en.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction_en.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/SimpleAnnotationAction_en.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1,5 @@
+#
+# Copyright (c) 2002-2006 by OpenSymphony
+# All rights reserved.
+#
+

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-anotherContext-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-anotherContext-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-anotherContext-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-anotherContext-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,10 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="count">
+        <field-validator type="int">
+            <param name="min">1</param>
+            <param name="max">100</param>
+            <message>Count must be between ${min} and ${max}, current value is ${count}.</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-badtest-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-badtest-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-badtest-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-badtest-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,8 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="name">
+        <field-validator type="requiredstring" foo="bar">
+            <message>You must enter a name.</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-beanMessageBundle-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-beanMessageBundle-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-beanMessageBundle-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-beanMessageBundle-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,15 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
+<validators>
+    <field name="count">
+        <field-validator type="int" short-circuit="true">
+            <param name="min">1</param>
+            <param name="max">100</param>
+            <message key="invalid.count">Invalid Count!</message>
+        </field-validator>
+        <field-validator type="int">
+            <param name="min">20</param>
+            <param name="max">80</param>
+            <message key="invalid.count.bad">Smaller Invalid Count: ${count}</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-expressionValidation-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-expressionValidation-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-expressionValidation-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-expressionValidation-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,9 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="name">
+        <field-validator type="fieldexpression">
+            <param name="expression">name.length() > 5</param>
+            <message>Name must be greater than 5 characters, it is currently '${name}'</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,8 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="name">
+        <field-validator type="requiredstring">
+            <message>You must enter a name.</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-visitorChildValidation-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-visitorChildValidation-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-visitorChildValidation-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-visitorChildValidation-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,14 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="birth">
+        <field-validator type="date">
+            <param name="min">01/01/1970</param>
+            <message>You must have been born after 1970.</message>
+        </field-validator>
+    </field>
+    <field name="child">
+        <field-validator type="visitor">
+            <message>child bean: </message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-visitorValidation-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-visitorValidation-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-visitorValidation-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean-visitorValidation-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,9 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
+<validators>
+    <field name="birth">
+        <field-validator type="date">
+            <param name="min">01/01/1970</param>
+            <message>You must have been born after 1970.</message>
+        </field-validator>
+    </field>
+</validators>

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean.properties
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean.properties?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean.properties (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestBean.properties Fri Dec  2 16:33:03 2011
@@ -0,0 +1 @@
+invalid.count=Count must be between ${min} and ${max}, current value is ${count}.

Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestChildBean-validation.xml
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestChildBean-validation.xml?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestChildBean-validation.xml (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/resources/org/apache/struts2/xwork2/TestChildBean-validation.xml Fri Dec  2 16:33:03 2011
@@ -0,0 +1,18 @@
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
+<validators>
+    <field name="name">
+        <field-validator type="requiredstring" short-circuit="true">
+            <message>You must enter a name.</message>
+        </field-validator>
+		<field-validator type="fieldexpression">
+			<param name="expression">name == 'test'</param>
+			<message>Name is invalid</message>
+		</field-validator> 
+    </field>
+    <field name="birth">
+	    <field-validator type="date">
+	        <param name="min">01/01/1970</param>
+	        <message>You must have been born after 1970.</message>
+	    </field-validator>
+    </field>
+</validators>