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 [47/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/DateRangeValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DateRangeValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DateRangeValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DateRangeValidatorTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,82 @@
+/*
+ * 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.ActionProxy;
+import org.apache.struts2.xwork2.ValidationAware;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.config.providers.MockConfigurationProvider;
+import org.apache.struts2.xwork2.validator.validators.DateRangeFieldValidator;
+
+import java.util.*;
+
+
+/**
+ * DateRangeValidatorTest
+ *
+ * @author Jason Carreira
+ * Created Feb 9, 2003 1:25:42 AM
+ */
+public class DateRangeValidatorTest extends XWorkTestCase {
+
+ private Locale origLocale;
+
+
+ /**
+ * Tests whether the date range validation is working. Should produce an validation error,
+ * because the action config sets date to 12/20/2002 while expected range is Dec 22-25.
+ */
+ public void testRangeValidation() throws Exception {
+ ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.VALIDATION_ACTION_NAME, null);
+ proxy.execute();
+ assertTrue(((ValidationAware) proxy.getAction()).hasFieldErrors());
+
+ Map errors = ((ValidationAware) proxy.getAction()).getFieldErrors();
+ Iterator it = errors.entrySet().iterator();
+
+ List errorMessages = (List) errors.get("date");
+ assertNotNull("Expected date range validation error message.", errorMessages);
+ assertEquals(1, errorMessages.size());
+
+ String errorMessage = (String) errorMessages.get(0);
+ assertNotNull(errorMessage);
+ }
+
+ public void testGetSetMinMax() throws Exception {
+ DateRangeFieldValidator val = new DateRangeFieldValidator();
+ Date max = new Date();
+ val.setMax(max);
+ assertEquals(max, val.getMax());
+
+ Date min = new Date();
+ val.setMin(min);
+ assertEquals(min, val.getMin());
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ origLocale = Locale.getDefault();
+ Locale.setDefault(Locale.US);
+ loadConfigurationProviders(new MockConfigurationProvider());
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ Locale.setDefault(origLocale);
+ }
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultActionValidatorManagerTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultActionValidatorManagerTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultActionValidatorManagerTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultActionValidatorManagerTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,353 @@
+/*
+ * 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 com.mockobjects.dynamic.C;
+import com.mockobjects.dynamic.Mock;
+import org.apache.struts2.xwork2.config.ConfigurationException;
+import org.apache.struts2.xwork2.test.DataAware2;
+import org.apache.struts2.xwork2.test.SimpleAction2;
+import org.apache.struts2.xwork2.StubValueStack;
+import org.apache.struts2.xwork2.test.SimpleAction3;
+import org.apache.struts2.xwork2.ActionContext;
+import org.apache.struts2.xwork2.util.ValueStack;
+import junit.framework.TestCase;
+import org.apache.struts2.xwork2.XWorkException;
+import org.apache.struts2.xwork2.SimpleAction;
+import org.apache.struts2.xwork2.TestBean;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+
+/**
+ * DefaultActionValidatorManagerTest
+ *
+ * @author Jason Carreira
+ * @author tm_jee
+ * @version $Date: 2011-12-02 12:24:48 +0100 (Fri, 02 Dec 2011) $ $Id: DefaultActionValidatorManagerTest.java 1209415 2011-12-02 11:24:48Z lukaszlenart $
+ */
+public class DefaultActionValidatorManagerTest extends TestCase {
+
+ protected final String alias = "validationAlias";
+
+ DefaultActionValidatorManager actionValidatorManager;
+ Mock mockValidatorFileParser;
+ Mock mockValidatorFactory;
+ ValueStack stubValueStack;
+
+ @Override
+ protected void setUp() throws Exception {
+ actionValidatorManager = new DefaultActionValidatorManager();
+ super.setUp();
+ mockValidatorFileParser = new Mock(ValidatorFileParser.class);
+ actionValidatorManager.setValidatorFileParser((ValidatorFileParser)mockValidatorFileParser.proxy());
+
+ mockValidatorFactory = new Mock(ValidatorFactory.class);
+ actionValidatorManager.setValidatorFactory((ValidatorFactory)mockValidatorFactory.proxy());
+
+ stubValueStack = new StubValueStack();
+ ActionContext.setContext(new ActionContext(new HashMap<String, Object>()));
+ ActionContext.getContext().setValueStack(stubValueStack);
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ actionValidatorManager = null;
+ super.tearDown();
+ mockValidatorFactory = null;
+ mockValidatorFileParser = null;
+ }
+
+
+ public void testBuildValidatorKey() {
+ String validatorKey = DefaultActionValidatorManager.buildValidatorKey(SimpleAction.class, alias);
+ assertEquals(SimpleAction.class.getName() + "/" + alias, validatorKey);
+ }
+
+ public void testBuildsValidatorsForAlias() {
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/SimpleAction-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/SimpleAction-validationAlias-validation.xml")),
+ new ArrayList());
+ actionValidatorManager.getValidators(SimpleAction.class, alias);
+ mockValidatorFileParser.verify();
+ }
+
+ public void testBuildsValidatorsForAliasError() {
+ boolean pass = false;
+ try {
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/TestBean-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndThrow("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/TestBean-badtest-validation.xml")),
+ new ConfigurationException());
+ List validatorList = actionValidatorManager.getValidators(TestBean.class, "badtest");
+ } catch (XWorkException ex) {
+ pass = true;
+ }
+ mockValidatorFileParser.verify();
+ assertTrue("Didn't throw exception on load failure", pass);
+ }
+
+
+ public void testGetValidatorsForInterface() {
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/test/DataAware-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/test/DataAware-validationAlias-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/test/DataAware2-validation.xml")),
+ new ArrayList());
+ actionValidatorManager.getValidators(DataAware2.class, alias);
+ mockValidatorFileParser.verify();
+ }
+
+ public void testGetValidatorsFromInterface() {
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/SimpleAction-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/SimpleAction-validationAlias-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/test/DataAware-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/test/DataAware-validationAlias-validation.xml")),
+ new ArrayList());
+ actionValidatorManager.getValidators(SimpleAction3.class, alias);
+ mockValidatorFileParser.verify();
+ }
+
+ public void testSameAliasWithDifferentClass() {
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/SimpleAction-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/SimpleAction-validationAlias-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/test/SimpleAction2-validation.xml")),
+ new ArrayList());
+ mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
+ C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/test/SimpleAction2-validationAlias-validation.xml")),
+ new ArrayList());
+ actionValidatorManager.getValidators(SimpleAction.class, alias);
+ actionValidatorManager.getValidators(SimpleAction2.class, alias);
+ mockValidatorFileParser.verify();
+ }
+
+ /*
+ // TODO: this all need to be converted to real unit tests
+
+ public void testSkipUserMarkerActionLevelShortCircuit() {
+ // get validators
+ List validatorList = actionValidatorManager.getValidators(User.class, null);
+ assertEquals(10, validatorList.size());
+
+ try {
+ User user = new User();
+ user.setName("Mark");
+ user.setEmail("bad_email");
+ user.setEmail2("bad_email");
+
+ ValidatorContext context = new GenericValidatorContext(user);
+ actionValidatorManager.validate(user, null, context);
+ assertTrue(context.hasFieldErrors());
+
+ // check field errors
+ List l = (List) context.getFieldErrors().get("email");
+ assertNotNull(l);
+ assertEquals(1, l.size());
+ assertEquals("Not a valid e-mail.", l.get(0));
+ l = (List) context.getFieldErrors().get("email2");
+ assertNotNull(l);
+ assertEquals(2, l.size());
+ assertEquals("Not a valid e-mail2.", l.get(0));
+ assertEquals("Email2 not from the right company.", l.get(1));
+
+ // check action errors
+ assertTrue(context.hasActionErrors());
+ l = (List) context.getActionErrors();
+ assertNotNull(l);
+ assertEquals(2, l.size()); // both expression test failed see User-validation.xml
+ assertEquals("Email does not start with mark", l.get(0));
+ } catch (ValidationException ex) {
+ ex.printStackTrace();
+ fail("Validation error: " + ex.getMessage());
+ }
+ }
+
+ public void testSkipAllActionLevelShortCircuit2() {
+ // get validators
+ List validatorList = actionValidatorManager.getValidators(User.class, null);
+ assertEquals(10, validatorList.size());
+
+ try {
+ User user = new User();
+ user.setName("Mark");
+ // * mark both email to starts with mark to get pass the action-level validator,
+ // so we could concentrate on testing the field-level validators (User-validation.xml)
+ // * make both email the same to pass the action-level validator at
+ // UserMarker-validation.xml
+ user.setEmail("mark_bad_email_for_field_val@foo.com");
+ user.setEmail2("mark_bad_email_for_field_val@foo.com");
+
+ ValidatorContext context = new GenericValidatorContext(user);
+ actionValidatorManager.validate(user, null, context);
+ assertTrue(context.hasFieldErrors());
+
+ // check field errors
+ // we have an error in this field level, email does not ends with mycompany.com
+ List l = (List) context.getFieldErrors().get("email");
+ assertNotNull(l);
+ assertEquals(1, l.size()); // because email-field-val is short-circuit
+ assertEquals("Email not from the right company.", l.get(0));
+
+
+ // check action errors
+ l = (List) context.getActionErrors();
+ assertFalse(context.hasActionErrors());
+ assertEquals(0, l.size());
+
+
+ } catch (ValidationException ex) {
+ ex.printStackTrace();
+ fail("Validation error: " + ex.getMessage());
+ }
+ }
+
+
+ public void testActionLevelShortCircuit() throws Exception {
+
+ List validatorList = actionValidatorManager.getValidators(User.class, null);
+ assertEquals(10, validatorList.size());
+
+ User user = new User();
+ // all fields will trigger error, but sc of action-level, cause it to not appear
+ user.setName(null);
+ user.setEmail("tmjee(at)yahoo.co.uk");
+ user.setEmail("tm_jee(at)yahoo.co.uk");
+
+ ValidatorContext context = new GenericValidatorContext(user);
+ actionValidatorManager.validate(user, null, context);
+
+ // check field level errors
+ // shouldn't have any because action error prevents validation of anything else
+ List l = (List) context.getFieldErrors().get("email2");
+ assertNull(l);
+
+
+ // check action errors
+ assertTrue(context.hasActionErrors());
+ l = (List) context.getActionErrors();
+ assertNotNull(l);
+ // we only get one, because UserMarker-validation.xml action-level validator
+ // already sc it :-)
+ assertEquals(1, l.size());
+ assertEquals("Email not the same as email2", l.get(0));
+ }
+
+
+ public void testShortCircuitNoErrors() {
+ // get validators
+ List validatorList = actionValidatorManager.getValidators(User.class, null);
+ assertEquals(10, validatorList.size());
+
+ try {
+ User user = new User();
+ user.setName("Mark");
+ user.setEmail("mark@mycompany.com");
+ user.setEmail2("mark@mycompany.com");
+
+ ValidatorContext context = new GenericValidatorContext(user);
+ actionValidatorManager.validate(user, null, context);
+ assertFalse(context.hasErrors());
+ } catch (ValidationException ex) {
+ ex.printStackTrace();
+ fail("Validation error: " + ex.getMessage());
+ }
+ }
+
+ public void testFieldErrorsOrder() throws Exception {
+ ValidationOrderAction action = new ValidationOrderAction();
+ actionValidatorManager.validate(action, "actionContext");
+ Map fieldErrors = action.getFieldErrors();
+ Iterator i = fieldErrors.entrySet().iterator();
+
+ assertNotNull(fieldErrors);
+ assertEquals(fieldErrors.size(), 12);
+
+
+ Map.Entry e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "username");
+ assertEquals(((List)e.getValue()).get(0), "username required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "password");
+ assertEquals(((List)e.getValue()).get(0), "password required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "confirmPassword");
+ assertEquals(((List)e.getValue()).get(0), "confirm password required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "firstName");
+ assertEquals(((List)e.getValue()).get(0), "first name required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "lastName");
+ assertEquals(((List)e.getValue()).get(0), "last name required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "city");
+ assertEquals(((List)e.getValue()).get(0), "city is required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "province");
+ assertEquals(((List)e.getValue()).get(0), "province is required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "country");
+ assertEquals(((List)e.getValue()).get(0), "country is required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "postalCode");
+ assertEquals(((List)e.getValue()).get(0), "postal code is required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "email");
+ assertEquals(((List)e.getValue()).get(0), "email is required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "website");
+ assertEquals(((List)e.getValue()).get(0), "website is required");
+
+ e = (Map.Entry) i.next();
+ assertEquals(e.getKey(), "passwordHint");
+ assertEquals(((List)e.getValue()).get(0), "password hint is required");
+
+ }
+ */
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultValidatorFactoryTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultValidatorFactoryTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultValidatorFactoryTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultValidatorFactoryTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,38 @@
+/*
+ * 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 com.mockobjects.dynamic.C;
+import com.mockobjects.dynamic.Mock;
+import junit.framework.TestCase;
+
+/**
+ * <code>DefaultValidatorFactoryTest</code>
+ *
+ * @author <a href="mailto:hermanns@aixcept.de">Rainer Hermanns</a>
+ * @version $Id: DefaultValidatorFactoryTest.java 1209415 2011-12-02 11:24:48Z lukaszlenart $
+ */
+public class DefaultValidatorFactoryTest extends TestCase {
+
+ public void testParseValidators() {
+ Mock mockValidatorFileParser = new Mock(ValidatorFileParser.class);
+ mockValidatorFileParser.expect("parseValidatorDefinitions", C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("org/apache/struts2/xwork2/validator/validators/default.xml")));
+ mockValidatorFileParser.expect("parseValidatorDefinitions", C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("validators.xml")));
+ mockValidatorFileParser.expect("parseValidatorDefinitions", C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("myOther-validators.xml")));
+ mockValidatorFileParser.expect("parseValidatorDefinitions", C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("my-validators.xml")));
+ DefaultValidatorFactory factory = new DefaultValidatorFactory(null, (ValidatorFileParser) mockValidatorFileParser.proxy());
+ }
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultValidatorFileParserTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultValidatorFileParserTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultValidatorFileParserTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DefaultValidatorFileParserTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,230 @@
+/*
+ * 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 com.mockobjects.dynamic.C;
+import com.mockobjects.dynamic.Mock;
+import org.apache.struts2.xwork2.XWorkException;
+import org.apache.struts2.xwork2.util.ClassLoaderUtil;
+import junit.framework.TestCase;
+import org.apache.struts2.xwork2.validator.validators.ExpressionValidator;
+import org.apache.struts2.xwork2.validator.validators.IntRangeFieldValidator;
+import org.apache.struts2.xwork2.validator.validators.RegexFieldValidator;
+import org.apache.struts2.xwork2.validator.validators.RequiredFieldValidator;
+import org.apache.struts2.xwork2.validator.validators.RequiredStringValidator;
+
+import java.io.InputStream;
+import java.util.List;
+
+
+/**
+ * DefaultValidatorFileParserTest
+ * <p/>
+ * Created : Jan 20, 2003 3:41:26 PM
+ *
+ * @author Jason Carreira
+ * @author James House
+ * @author tm_jee ( tm_jee (at) yahoo.co.uk )
+ * @author Martin Gilday
+ */
+public class DefaultValidatorFileParserTest extends TestCase {
+
+ private static final String testFileName = "org/apache/struts2/xwork2/validator/validator-parser-test.xml";
+ private static final String testFileName2 = "org/apache/struts2/xwork2/validator/validator-parser-test2.xml";
+ private static final String testFileName3 = "org/apache/struts2/xwork2/validator/validator-parser-test3.xml";
+ private static final String testFileName4 = "org/apache/struts2/xwork2/validator/validator-parser-test4.xml";
+ private static final String testFileName5 = "org/apache/struts2/xwork2/validator/validator-parser-test5.xml";
+ private static final String testFileName6 = "org/apache/struts2/xwork2/validator/validator-parser-test6.xml";
+ private static final String testFileNameFail = "org/apache/struts2/xwork2/validator/validators-fail.xml";
+ private Mock mockValidatorFactory;
+ private ValidatorFileParser parser;
+
+ public void testParserActionLevelValidatorsShouldBeBeforeFieldLevelValidators() throws Exception {
+ InputStream is = ClassLoaderUtil.getResourceAsStream(testFileName2, this.getClass());
+
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("expression")), ExpressionValidator.class.getName());
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("required")), RequiredFieldValidator.class.getName());
+ List configs = parser.parseActionValidatorConfigs((ValidatorFactory) mockValidatorFactory.proxy(), is, testFileName2);
+ mockValidatorFactory.verify();
+
+ ValidatorConfig valCfg0 = (ValidatorConfig) configs.get(0);
+ ValidatorConfig valCfg1 = (ValidatorConfig) configs.get(1);
+
+ assertNotNull(configs);
+ assertEquals(configs.size(), 2);
+
+ assertEquals("expression", valCfg0.getType());
+ assertFalse(valCfg0.isShortCircuit());
+ assertEquals(valCfg0.getDefaultMessage(), "an expression error message");
+ assertEquals(valCfg0.getParams().get("expression"), "false");
+
+ assertEquals("required", valCfg1.getType());
+ assertFalse(valCfg1.isShortCircuit());
+ assertEquals(valCfg1.getDefaultMessage(), "a field error message");
+ }
+
+
+ public void testParser() {
+ InputStream is = ClassLoaderUtil.getResourceAsStream(testFileName, this.getClass());
+
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("expression")), ExpressionValidator.class.getName());
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("expression")), ExpressionValidator.class.getName());
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("required")), RequiredFieldValidator.class.getName());
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("required")), RequiredFieldValidator.class.getName());
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("int")), IntRangeFieldValidator.class.getName());
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("regex")), RegexFieldValidator.class.getName());
+ List configs = parser.parseActionValidatorConfigs((ValidatorFactory) mockValidatorFactory.proxy(), is, testFileName);
+ mockValidatorFactory.verify();
+
+
+ assertNotNull(configs);
+ assertEquals(6, configs.size());
+
+
+ ValidatorConfig cfg = (ValidatorConfig) configs.get(0);
+ assertEquals("expression", cfg.getType());
+ assertFalse(cfg.isShortCircuit());
+
+ cfg = (ValidatorConfig) configs.get(1);
+ assertEquals("expression", cfg.getType());
+ assertTrue(cfg.isShortCircuit());
+
+ cfg = (ValidatorConfig) configs.get(2);
+ assertEquals("required", cfg.getType());
+ assertEquals("foo", cfg.getParams().get("fieldName"));
+ assertEquals("You must enter a value for foo.", cfg.getDefaultMessage());
+ assertEquals(4, cfg.getLocation().getLineNumber());
+
+ cfg = (ValidatorConfig) configs.get(3);
+ assertEquals("required", cfg.getType());
+ assertTrue(cfg.isShortCircuit());
+
+ cfg = (ValidatorConfig) configs.get(4);
+ assertEquals("int", cfg.getType());
+ assertFalse(cfg.isShortCircuit());
+
+ cfg = (ValidatorConfig) configs.get(5);
+ assertEquals("regex", cfg.getType());
+ assertFalse(cfg.isShortCircuit());
+ assertEquals("([aAbBcCdD][123][eEfFgG][456])", cfg.getParams().get("expression"));
+ }
+
+ public void testParserWithBadValidation() {
+ InputStream is = ClassLoaderUtil.getResourceAsStream(testFileName3, this.getClass());
+
+ boolean pass = false;
+ try {
+ parser.parseActionValidatorConfigs((ValidatorFactory) mockValidatorFactory.proxy(), is, testFileName3);
+ } catch (XWorkException ex) {
+ assertTrue("Wrong line number", 3 == ex.getLocation().getLineNumber());
+ pass = true;
+ }
+ assertTrue("Validation file should have thrown exception", pass);
+ }
+
+ public void testParserWithBadXML() {
+ InputStream is = ClassLoaderUtil.getResourceAsStream(testFileName4, this.getClass());
+
+ boolean pass = false;
+ try {
+ parser.parseActionValidatorConfigs((ValidatorFactory) mockValidatorFactory.proxy(), is, testFileName4);
+ } catch (XWorkException ex) {
+ assertTrue("Wrong line number: " + ex.getLocation(), 13 == ex.getLocation().getLineNumber());
+ pass = true;
+ }
+ assertTrue("Validation file should have thrown exception", pass);
+ }
+
+ public void testParserWithBadXML2() {
+ InputStream is = ClassLoaderUtil.getResourceAsStream(testFileNameFail, this.getClass());
+
+ boolean pass = false;
+ try {
+ parser.parseActionValidatorConfigs((ValidatorFactory) mockValidatorFactory.proxy(), is, testFileNameFail);
+ } catch (XWorkException ex) {
+ assertTrue("Wrong line number: " + ex.getLocation(), 8 == ex.getLocation().getLineNumber());
+ pass = true;
+ }
+ assertTrue("Validation file should have thrown exception", pass);
+ }
+
+ public void testValidatorDefinitionsWithBadClassName() {
+ InputStream is = ClassLoaderUtil.getResourceAsStream(testFileName5, this.getClass());
+
+ boolean pass = false;
+ try {
+ parser.parseActionValidatorConfigs((ValidatorFactory) mockValidatorFactory.proxy(), is, testFileName5);
+ } catch (XWorkException ex) {
+ assertTrue("Wrong line number", 3 == ex.getLocation().getLineNumber());
+ pass = true;
+ }
+ assertTrue("Validation file should have thrown exception", pass);
+ }
+
+ public void testValidatorWithI18nMessage() throws Exception {
+ InputStream is = null;
+ try {
+ is = ClassLoaderUtil.getResourceAsStream(testFileName6, this.getClass());
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("requiredstring")), RequiredStringValidator.class.getName());
+ mockValidatorFactory.expectAndReturn("lookupRegisteredValidatorType", C.args(C.eq("requiredstring")), RequiredStringValidator.class.getName());
+
+ List validatorConfigs = parser.parseActionValidatorConfigs((ValidatorFactory) mockValidatorFactory.proxy(), is, "-//OpenSymphony Group//XWork Validator 1.0.3//EN");
+ mockValidatorFactory.verify();
+
+ assertEquals(validatorConfigs.size(), 2);
+
+ assertEquals(((ValidatorConfig)validatorConfigs.get(0)).getParams().get("fieldName"), "name");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(0)).getMessageParams().length, 0);
+ assertEquals(((ValidatorConfig)validatorConfigs.get(0)).getMessageKey(), "error.name");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(0)).getDefaultMessage(), "default message 1");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(0)).getParams().size(), 1);
+ assertEquals(((ValidatorConfig)validatorConfigs.get(0)).getType(), "requiredstring");
+
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getParams().get("fieldName"), "address");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getMessageParams().length, 5);
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getMessageParams()[0], "'tmjee'");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getMessageParams()[1], "'phil'");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getMessageParams()[2], "'rainer'");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getMessageParams()[3], "'hopkins'");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getMessageParams()[4], "'jimmy'");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getMessageKey(), "error.address");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getDefaultMessage(), "The Default Message");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getParams().size(), 3);
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getParams().get("trim"), "true");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getParams().get("anotherParam"), "anotherValue");
+ assertEquals(((ValidatorConfig)validatorConfigs.get(1)).getType(), "requiredstring");
+ }
+ finally {
+ if (is != null) {
+ is.close();
+ }
+ }
+ }
+
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mockValidatorFactory = new Mock(ValidatorFactory.class);
+ parser = new DefaultValidatorFileParser();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mockValidatorFactory = null;
+ parser = null;
+ }
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DoubleRangeValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DoubleRangeValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DoubleRangeValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/DoubleRangeValidatorTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,225 @@
+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.validator.validators.DoubleRangeFieldValidator;
+import org.apache.struts2.xwork2.ValidationAware;
+import org.apache.struts2.xwork2.ValidationAwareSupport;
+import org.apache.struts2.xwork2.XWorkTestCase;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * Unit test for {@link DoubleRangeFieldValidator}.
+ *
+ * @author <a href="mailto:hermanns@aixcept.de">Rainer Hermanns</a>
+ * @author Claus Ibsen
+ * @version $Id: DoubleRangeValidatorTest.java 1209415 2011-12-02 11:24:48Z lukaszlenart $
+ */
+public class DoubleRangeValidatorTest extends XWorkTestCase {
+ private DoubleRangeFieldValidator val;
+
+ public void testRangeValidationWithError() throws Exception {
+ // must set a locale to US as error message contains a locale dependent number (see XW-490)
+ Locale defLocale = Locale.getDefault();
+ Locale.setDefault(Locale.US);
+
+ ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.VALIDATION_ACTION_NAME, null);
+ proxy.execute();
+ assertTrue(((ValidationAware) proxy.getAction()).hasFieldErrors());
+
+ Map<String, List<String>> errors = ((ValidationAware) proxy.getAction()).getFieldErrors();
+ Iterator it = errors.entrySet().iterator();
+
+ List<String> errorMessages = errors.get("percentage");
+ assertNotNull("Expected double range validation error message.", errorMessages);
+ assertEquals(1, errorMessages.size());
+
+ String errorMessage = errorMessages.get(0);
+ assertNotNull("Expecting: percentage must be between 0.1 and 10.1, current value is 100.0123.", errorMessage);
+ assertEquals("percentage must be between 0.1 and 10.1, current value is 100.0123.", errorMessage);
+
+ Locale.setDefault(defLocale);
+ }
+
+ public void testRangeValidationNoError() throws Exception {
+ ActionProxy proxy = actionProxyFactory.createActionProxy("", "percentage", null);
+ proxy.execute();
+ assertTrue(((ValidationAware) proxy.getAction()).hasFieldErrors());
+
+ Map<String, List<String>> errors = ((ValidationAware) proxy.getAction()).getFieldErrors();
+ Iterator it = errors.entrySet().iterator();
+
+ List<String> errorMessages = errors.get("percentage");
+ assertNull("Expected no double range validation error message.", errorMessages);
+ }
+
+ public void testRangeNoExclusiveAndNoValueInStack() throws Exception {
+ val.setFieldName("hello");
+ val.validate("world");
+ }
+
+ public void testRangeSimpleDoubleValueInStack() throws Exception {
+ MyTestProduct prod = new MyTestProduct();
+ prod.setName("coca cola");
+ prod.setPrice(5.99);
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ stack.push(prod);
+ ActionContext.getContext().setValueStack(stack);
+
+ val.setMinInclusive("0");
+ val.setMaxInclusive("10");
+ val.setFieldName("price");
+ val.validate(prod);
+ }
+
+ public void testRangeRealDoubleValueInStack() throws Exception {
+ MyTestProduct prod = new MyTestProduct();
+ prod.setName("coca cola");
+ prod.setPrice(5.99);
+ prod.setVolume(new Double(12.34));
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ stack.push(prod);
+ ActionContext.getContext().setValueStack(stack);
+
+ val.setMinInclusive("0");
+ val.setMaxInclusive("30");
+ val.setFieldName("volume");
+ val.validate(prod);
+ }
+
+ public void testRangeNotADoubleObjectValueInStack() throws Exception {
+ MyTestProduct prod = new MyTestProduct();
+ prod.setName("coca cola");
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ stack.push(prod);
+ ActionContext.getContext().setValueStack(stack);
+
+ val.setMinInclusive("0");
+ val.setMaxInclusive("10");
+ val.setFieldName("name");
+
+ DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
+ val.setValidatorContext(context);
+
+ val.validate(prod);
+
+ assertEquals("0", val.getMinInclusive());
+ assertEquals("10", val.getMaxInclusive());
+ }
+
+ public void testEdgeOfMaxRange() throws Exception {
+ MyTestProduct prod = new MyTestProduct();
+ prod.setName("coca cola");
+ prod.setPrice(9.95);
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ stack.push(prod);
+ ActionContext.getContext().setValueStack(stack);
+
+ val.setFieldName("price");
+
+ DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
+ val.setValidatorContext(context);
+
+ val.setMaxInclusive("9.95");
+ val.validate(prod); // should pass
+ assertTrue(!context.hasErrors());
+ assertEquals("9.95", val.getMaxInclusive());
+
+ val.setMaxExclusive("9.95");
+ val.validate(prod); // should not pass
+ assertTrue(context.hasErrors());
+ assertEquals("9.95", val.getMaxExclusive());
+ }
+
+ public void testEdgeOfMinRange() throws Exception {
+ MyTestProduct prod = new MyTestProduct();
+ prod.setName("coca cola");
+ prod.setPrice(9.95);
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ stack.push(prod);
+ ActionContext.getContext().setValueStack(stack);
+
+ val.setFieldName("price");
+
+ DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
+ val.setValidatorContext(context);
+
+ val.setMinInclusive("9.95");
+ val.validate(prod); // should pass
+ assertTrue(!context.hasErrors());
+
+ val.setMinExclusive("9.95");
+ val.validate(prod); // should not pass
+ assertTrue(context.hasErrors());
+ }
+
+ public void testNoValue() throws Exception {
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ ActionContext.getContext().setValueStack(stack);
+
+ val.setFieldName("price");
+
+ DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
+ val.setValidatorContext(context);
+
+ val.setMinInclusive("9.95");
+ val.validate(null);
+ assertTrue(!context.hasErrors()); // should pass as null value passed in
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ loadConfigurationProviders(new XmlConfigurationProvider("xwork-default.xml"), new MockConfigurationProvider());
+ val = new DoubleRangeFieldValidator();
+ val.setValueStack(ActionContext.getContext().getValueStack());
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ val = null;
+ }
+
+ private class MyTestProduct {
+ private double price;
+ private Double volume;
+ private String name;
+
+ public double getPrice() {
+ return price;
+ }
+
+ public void setPrice(double price) {
+ this.price = price;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Double getVolume() {
+ return volume;
+ }
+
+ public void setVolume(Double volume) {
+ this.volume = volume;
+ }
+ }
+
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/EmailValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/EmailValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/EmailValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/EmailValidatorTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,69 @@
+/*
+ * 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.EmailValidator;
+
+/**
+ * Test case for Email Validator
+ *
+ *
+ * @author tm_jee
+ * @version $Date: 2011-12-02 12:24:48 +0100 (Fri, 02 Dec 2011) $ $Id: EmailValidatorTest.java 1209415 2011-12-02 11:24:48Z lukaszlenart $
+ */
+public class EmailValidatorTest extends XWorkTestCase {
+
+ public void testEmailValidity() throws Exception {
+ assertTrue(verifyEmailValidity("tmjee@yahoo.com"));
+ assertTrue(verifyEmailValidity("tm_jee@yahoo.co"));
+ assertTrue(verifyEmailValidity("tm.jee@yahoo.co.uk"));
+ assertTrue(verifyEmailValidity("tm.jee@yahoo.co.biz"));
+ assertTrue(verifyEmailValidity("tm_jee@yahoo.com"));
+ assertTrue(verifyEmailValidity("tm_jee@yahoo.net"));
+ assertTrue(verifyEmailValidity(" user@subname1.subname2.subname3.domainname.co.uk "));
+ assertTrue(verifyEmailValidity("tm.j'ee@yahoo.co.uk"));
+ assertTrue(verifyEmailValidity("tm.j'e.e'@yahoo.co.uk"));
+ assertTrue(verifyEmailValidity("tmj'ee@yahoo.com"));
+
+ assertFalse(verifyEmailValidity("tm_jee#marry@yahoo.co.uk"));
+ assertFalse(verifyEmailValidity("tm_jee@ yahoo.co.uk"));
+ assertFalse(verifyEmailValidity("tm_jee @yahoo.co.uk"));
+ assertFalse(verifyEmailValidity("tm_j ee @yah oo.co.uk"));
+ assertFalse(verifyEmailValidity("tm_jee @yah oo.co.uk"));
+ assertFalse(verifyEmailValidity("tm_jee @ yahoo.com"));
+ assertFalse(verifyEmailValidity(" user@subname1.subname2.subname3.domainn#ame.co.uk "));
+ }
+
+ protected boolean verifyEmailValidity(final String email) throws Exception {
+ ActionSupport action = new ActionSupport() {
+ public String getMyEmail() {
+ return email;
+ }
+ };
+
+ EmailValidator validator = new EmailValidator();
+ validator.setValidatorContext(new DelegatingValidatorContext(action));
+ validator.setFieldName("myEmail");
+ validator.setDefaultMessage("invalid email");
+ validator.setValueStack(ActionContext.getContext().getValueStack());
+ validator.validate(action);
+
+ return (action.getFieldErrors().size() == 0);
+ }
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ExpressionValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ExpressionValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ExpressionValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ExpressionValidatorTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,147 @@
+/*
+ * 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 com.mockobjects.dynamic.C;
+import com.mockobjects.dynamic.Mock;
+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.ValidationAware;
+import org.apache.struts2.xwork2.ValidationAwareSupport;
+import org.apache.struts2.xwork2.config.entities.ActionConfig;
+import org.apache.struts2.xwork2.validator.validators.ExpressionValidator;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.TestBean;
+import org.easymock.EasyMock;
+
+/**
+ * Unit test for ExpressionValidator.
+ *
+ * @author Jason Carreira
+ * @author Claus Ibsen
+ */
+public class ExpressionValidatorTest extends XWorkTestCase {
+
+ public void testExpressionValidationOfStringLength() throws ValidationException {
+ TestBean bean = new TestBean();
+ bean.setName("abc");
+ ActionContext.getContext().getValueStack().push(bean);
+
+ DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
+ container.getInstance(ActionValidatorManager.class).validate(bean, "expressionValidation", context);
+ assertTrue(context.hasFieldErrors());
+
+ final Map fieldErrors = context.getFieldErrors();
+ assertTrue(fieldErrors.containsKey("name"));
+
+ List nameErrors = (List) fieldErrors.get("name");
+ assertEquals(1, nameErrors.size());
+ assertEquals("Name must be greater than 5 characters, it is currently 'abc'", nameErrors.get(0));
+
+ bean.setName("abcdefg");
+ context = new DelegatingValidatorContext(new ValidationAwareSupport());
+ container.getInstance(ActionValidatorManager.class).validate(bean, "expressionValidation", context);
+ assertFalse(context.hasFieldErrors());
+ }
+
+ public void testExpressionValidatorFailure() 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("", MockConfigurationProvider.VALIDATION_ACTION_NAME, extraContext);
+ proxy.execute();
+ assertTrue(((ValidationAware) proxy.getAction()).hasActionErrors());
+
+ Collection errors = ((ValidationAware) proxy.getAction()).getActionErrors();
+ assertEquals(1, errors.size());
+
+ String message = (String) errors.iterator().next();
+ assertNotNull(message);
+ assertEquals("Foo must be greater than Bar. Foo = 5, Bar = 7.", message);
+ }
+
+ public void testExpressionValidatorSuccess() throws Exception {
+ HashMap<String, Object> params = new HashMap<String, Object>();
+
+ //make it not fail
+ params.put("date", "12/23/2002");
+ params.put("foo", "10");
+ params.put("bar", "7");
+
+ HashMap<String, Object> extraContext = new HashMap<String, Object>();
+ extraContext.put(ActionContext.PARAMETERS, params);
+
+ ActionProxy proxy = actionProxyFactory.createActionProxy("", MockConfigurationProvider.VALIDATION_ACTION_NAME, extraContext);
+ proxy.execute();
+ assertFalse(((ValidationAware) proxy.getAction()).hasActionErrors());
+ }
+
+ public void testGetSetExpresion() {
+ ExpressionValidator ev = new ExpressionValidator();
+ ev.setExpression("{top}");
+ assertEquals("{top}", ev.getExpression());
+ }
+
+ public void testNoBooleanExpression() throws Exception {
+ Mock mock = new Mock(ValidationAware.class);
+ mock.expect("addActionError", C.ANY_ARGS);
+
+ ExpressionValidator ev = new ExpressionValidator();
+ ev.setValidatorContext(new DelegatingValidatorContext(mock.proxy()));
+ ev.setExpression("{top}");
+ ev.setValueStack(ActionContext.getContext().getValueStack());
+ ev.validate("Hello"); // {top} will evalute to Hello that is not a Boolean
+ mock.verify();
+ }
+
+ @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/GenericValidatorContext.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/GenericValidatorContext.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/GenericValidatorContext.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/GenericValidatorContext.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 java.util.*;
+
+
+/**
+ * Dummy validator context to use to capture error messages.
+ *
+ * @author Mark Woon
+ * @author Matthew Payne
+ */
+public class GenericValidatorContext extends DelegatingValidatorContext {
+
+ private Collection<String> actionErrors;
+ private Collection<String> actionMessages;
+ private Map<String, List<String>> fieldErrors;
+
+
+ public GenericValidatorContext(Object object) {
+ super(object);
+ }
+
+
+ @Override
+ public synchronized void setActionErrors(Collection<String> errorMessages) {
+ this.actionErrors = errorMessages;
+ }
+
+ @Override
+ public synchronized Collection<String> getActionErrors() {
+ return new ArrayList<String>(internalGetActionErrors());
+ }
+
+ @Override
+ public synchronized void setActionMessages(Collection<String> messages) {
+ this.actionMessages = messages;
+ }
+
+ @Override
+ public synchronized Collection<String> getActionMessages() {
+ return new ArrayList<String>(internalGetActionMessages());
+ }
+
+ @Override
+ public synchronized void setFieldErrors(Map<String, List<String>> errorMap) {
+ this.fieldErrors = errorMap;
+ }
+
+ /**
+ * Get the field specific errors.
+ *
+ * @return an unmodifiable Map with errors mapped from fieldname (String) to Collection of String error messages
+ */
+ @Override
+ public synchronized Map<String, List<String>> getFieldErrors() {
+ return new HashMap<String, List<String>>(internalGetFieldErrors());
+ }
+
+ @Override
+ public synchronized void addActionError(String anErrorMessage) {
+ internalGetActionErrors().add(anErrorMessage);
+ }
+
+ /**
+ * Add an Action level message to this Action
+ */
+ @Override
+ public void addActionMessage(String aMessage) {
+ internalGetActionMessages().add(aMessage);
+ }
+
+ @Override
+ public synchronized void addFieldError(String fieldName, String errorMessage) {
+ final Map<String, List<String>> errors = internalGetFieldErrors();
+ List<String> thisFieldErrors = errors.get(fieldName);
+
+ if (thisFieldErrors == null) {
+ thisFieldErrors = new ArrayList<String>();
+ errors.put(fieldName, thisFieldErrors);
+ }
+
+ thisFieldErrors.add(errorMessage);
+ }
+
+ @Override
+ public synchronized boolean hasActionErrors() {
+ return (actionErrors != null) && !actionErrors.isEmpty();
+ }
+
+ /**
+ * Note that this does not have the same meaning as in WW 1.x
+ *
+ * @return (hasActionErrors() || hasFieldErrors())
+ */
+ @Override
+ public synchronized boolean hasErrors() {
+ return (hasActionErrors() || hasFieldErrors());
+ }
+
+ @Override
+ public synchronized boolean hasFieldErrors() {
+ return (fieldErrors != null) && !fieldErrors.isEmpty();
+ }
+
+ private Collection<String> internalGetActionErrors() {
+ if (actionErrors == null) {
+ actionErrors = new ArrayList<String>();
+ }
+
+ return actionErrors;
+ }
+
+ private Collection<String> internalGetActionMessages() {
+ if (actionMessages == null) {
+ actionMessages = new ArrayList<String>();
+ }
+
+ return actionMessages;
+ }
+
+ private Map<String, List<String>> internalGetFieldErrors() {
+ if (fieldErrors == null) {
+ fieldErrors = new HashMap<String, List<String>>();
+ }
+
+ return fieldErrors;
+ }
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/IntRangeValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/IntRangeValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/IntRangeValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/IntRangeValidatorTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,67 @@
+/*
+ * 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.ActionProxy;
+import org.apache.struts2.xwork2.ValidationAware;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.config.providers.MockConfigurationProvider;
+import org.apache.struts2.xwork2.config.providers.XmlConfigurationProvider;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * IntRangeValidatorTest
+ * <p/>
+ * Created : Jan 21, 2003 12:16:01 AM
+ *
+ * @author Jason Carreira
+ */
+public class IntRangeValidatorTest extends XWorkTestCase {
+
+ public void testRangeValidation() {
+ HashMap<String, String> params = new HashMap<String, String>();
+ params.put("bar", "5");
+
+ 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> errorMessages = errors.get("bar");
+ assertEquals(1, errorMessages.size());
+
+ String errorMessage = errorMessages.get(0);
+ assertNotNull(errorMessage);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ loadConfigurationProviders(new XmlConfigurationProvider("xwork-test-beans.xml"), new MockConfigurationProvider());
+ }
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/LongRangeValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/LongRangeValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/LongRangeValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/LongRangeValidatorTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,65 @@
+/*
+ * 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.ActionProxy;
+import org.apache.struts2.xwork2.ValidationAware;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.config.providers.MockConfigurationProvider;
+import org.apache.struts2.xwork2.config.providers.XmlConfigurationProvider;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * LongRangeValidatorTest
+ * <p/>
+ *
+ */
+public class LongRangeValidatorTest extends XWorkTestCase {
+
+ public void testRangeValidation() {
+ HashMap<String, String> params = new HashMap<String, String>();
+ params.put("longFoo", "200");
+
+ 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 errors = ((ValidationAware) proxy.getAction()).getFieldErrors();
+ List errorMessages = (List) errors.get("longFoo");
+ assertEquals(1, errorMessages.size());
+
+ String errorMessage = (String) errorMessages.get(0);
+ assertNotNull(errorMessage);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ loadConfigurationProviders(new XmlConfigurationProvider("xwork-test-beans.xml"), new MockConfigurationProvider());
+ }
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ModelDrivenValidationTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ModelDrivenValidationTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ModelDrivenValidationTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ModelDrivenValidationTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,55 @@
+/*
+ * 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.config.providers.XmlConfigurationProvider;
+import org.apache.struts2.xwork2.Action;
+import org.apache.struts2.xwork2.ActionProxy;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.ModelDrivenAction;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * ModelDrivenValidationTest
+ *
+ * @author Jason Carreira
+ * Created Oct 1, 2003 10:08:25 AM
+ */
+public class ModelDrivenValidationTest extends XWorkTestCase {
+
+ public void testModelDrivenValidation() throws Exception {
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("count", new String[]{"11"});
+
+ Map<String, Object> context = new HashMap<String, Object>();
+ context.put(ActionContext.PARAMETERS, params);
+
+ loadConfigurationProviders(new XmlConfigurationProvider("xwork-sample.xml"));
+ ActionProxy proxy = actionProxyFactory.createActionProxy(null, "TestModelDrivenValidation", context);
+ assertEquals(Action.SUCCESS, proxy.execute());
+
+ ModelDrivenAction action = (ModelDrivenAction) proxy.getAction();
+ assertTrue(action.hasFieldErrors());
+ assertTrue(action.getFieldErrors().containsKey("count"));
+ assertEquals("count must be between 1 and 10, current value is 11.", ((List) action.getFieldErrors().get("count")).get(0));
+ }
+
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/RegexFieldValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/RegexFieldValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/RegexFieldValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/RegexFieldValidatorTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,195 @@
+/*
+ * 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.XWorkTestCase;
+import org.apache.struts2.xwork2.util.ValueStack;
+import org.apache.struts2.xwork2.validator.validators.RegexFieldValidator;
+
+import java.util.List;
+
+/**
+ * Unit test for RegexFieldValidator.
+ * <p/>
+ * This unit test is only to test that the regex field validator works, not to
+ * unit test the build in reg.exp from JDK. That is why the expressions are so simple.
+ *
+ * @author Claus Ibsen
+ */
+public class RegexFieldValidatorTest extends XWorkTestCase {
+
+ public void testMatch() throws Exception {
+ MyTestPerson testPerson = new MyTestPerson();
+ testPerson.setUsername("Secret");
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ ActionContext.getContext().setValueStack(stack);
+
+ RegexFieldValidator validator = new RegexFieldValidator();
+ validator.setExpression("^Sec.*");
+ validator.setValidatorContext(new GenericValidatorContext(new Object()));
+ validator.setFieldName("username");
+ validator.setValueStack(ActionContext.getContext().getValueStack());
+ validator.validate(testPerson);
+
+ assertFalse(validator.getValidatorContext().hasErrors());
+ assertFalse(validator.getValidatorContext().hasActionErrors());
+ assertFalse(validator.getValidatorContext().hasActionMessages());
+ assertFalse(validator.getValidatorContext().hasFieldErrors());
+ }
+
+ public void testMatchNoTrim() throws Exception {
+ MyTestPerson testPerson = new MyTestPerson();
+ testPerson.setUsername("Secret "); // must end with one whitespace
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ ActionContext.getContext().setValueStack(stack);
+
+ RegexFieldValidator validator = new RegexFieldValidator();
+ validator.setTrim(false);
+ validator.setExpression("^Sec.*\\s");
+ validator.setValidatorContext(new GenericValidatorContext(new Object()));
+ validator.setFieldName("username");
+ validator.setValueStack(ActionContext.getContext().getValueStack());
+ validator.validate(testPerson);
+
+ assertFalse(validator.getValidatorContext().hasErrors());
+ assertFalse(validator.getValidatorContext().hasActionErrors());
+ assertFalse(validator.getValidatorContext().hasActionMessages());
+ assertFalse(validator.getValidatorContext().hasFieldErrors());
+ }
+
+ public void testFail() throws Exception {
+ MyTestPerson testPerson = new MyTestPerson();
+ testPerson.setUsername("Superman");
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ ActionContext.getContext().setValueStack(stack);
+
+ RegexFieldValidator validator = new RegexFieldValidator();
+ validator.setExpression("^Sec.*");
+ validator.setValidatorContext(new GenericValidatorContext(new Object()));
+ validator.setFieldName("username");
+ validator.setValueStack(ActionContext.getContext().getValueStack());
+ validator.validate(testPerson);
+
+ assertTrue(validator.getValidatorContext().hasErrors());
+ assertTrue(validator.getValidatorContext().hasFieldErrors());
+ List<String> msgs = validator.getValidatorContext().getFieldErrors().get("username");
+ assertNotNull(msgs);
+ assertTrue(msgs.size() == 1); // should contain 1 error message
+
+ // when failing the validator will not add action errors/msg
+ assertFalse(validator.getValidatorContext().hasActionErrors());
+ assertFalse(validator.getValidatorContext().hasActionMessages());
+ }
+
+ public void testNoFieldName() throws Exception {
+ MyTestPerson testPerson = new MyTestPerson();
+ testPerson.setUsername("NoExpression");
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ ActionContext.getContext().setValueStack(stack);
+
+ RegexFieldValidator validator = new RegexFieldValidator();
+ validator.setExpression("^Sec.*");
+ validator.setValidatorContext(new GenericValidatorContext(new Object()));
+ validator.setFieldName(null);
+ validator.setValueStack(ActionContext.getContext().getValueStack());
+ validator.validate(testPerson);
+
+ assertFalse(validator.getValidatorContext().hasErrors());
+ assertFalse(validator.getValidatorContext().hasActionErrors());
+ assertFalse(validator.getValidatorContext().hasActionMessages());
+ assertFalse(validator.getValidatorContext().hasFieldErrors());
+ }
+
+ public void testGetExpression() throws Exception {
+ RegexFieldValidator validator = new RegexFieldValidator();
+ validator.setExpression("^Hello.*");
+ assertEquals("^Hello.*", validator.getExpression());
+ }
+
+ public void testIsTrimmed() throws Exception {
+ RegexFieldValidator validator = new RegexFieldValidator();
+ assertEquals(true, validator.isTrimed());
+ validator.setTrim(false);
+ assertEquals(false, validator.isTrimed());
+ }
+
+ public void testEmptyName() throws Exception {
+ MyTestPerson testPerson = new MyTestPerson();
+ testPerson.setUsername("");
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ ActionContext.getContext().setValueStack(stack);
+
+ RegexFieldValidator validator = new RegexFieldValidator();
+ validator.setExpression("^Sec.*");
+ validator.setValidatorContext(new GenericValidatorContext(new Object()));
+ validator.setFieldName("username");
+ validator.setValueStack(ActionContext.getContext().getValueStack());
+ validator.validate(testPerson);
+
+ assertFalse(validator.getValidatorContext().hasErrors());
+ assertFalse(validator.getValidatorContext().hasActionErrors());
+ assertFalse(validator.getValidatorContext().hasActionMessages());
+ assertFalse(validator.getValidatorContext().hasFieldErrors());
+ }
+
+ public void testNoStringField() throws Exception {
+ MyTestPerson testPerson = new MyTestPerson();
+ testPerson.setAge(33);
+
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ ActionContext.getContext().setValueStack(stack);
+
+ RegexFieldValidator validator = new RegexFieldValidator();
+ validator.setExpression("[0-9][0-9]");
+ validator.setValidatorContext(new GenericValidatorContext(new Object()));
+ validator.setFieldName("age");
+ validator.setValueStack(ActionContext.getContext().getValueStack());
+ validator.validate(testPerson);
+
+ assertFalse(validator.getValidatorContext().hasErrors());
+ assertFalse(validator.getValidatorContext().hasActionErrors());
+ assertFalse(validator.getValidatorContext().hasActionMessages());
+ assertFalse(validator.getValidatorContext().hasFieldErrors());
+ }
+
+ private class MyTestPerson {
+ private String username;
+ private int age;
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+ }
+
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/RepopulateConversionErrorFieldValidatorSupportTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/RepopulateConversionErrorFieldValidatorSupportTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/RepopulateConversionErrorFieldValidatorSupportTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/RepopulateConversionErrorFieldValidatorSupportTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,129 @@
+/*
+ * 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.mock.MockActionInvocation;
+import org.apache.struts2.xwork2.util.ValueStack;
+import org.apache.struts2.xwork2.validator.validators.RepopulateConversionErrorFieldValidatorSupport;
+
+import java.util.Map;
+
+/**
+ * Test RepopulateConversionErrorFieldValidatorSupport.
+ *
+ * @author tm_jee
+ * @version $Date: 2011-12-02 12:24:48 +0100 (Fri, 02 Dec 2011) $ $Id: RepopulateConversionErrorFieldValidatorSupportTest.java 1209415 2011-12-02 11:24:48Z lukaszlenart $
+ */
+public class RepopulateConversionErrorFieldValidatorSupportTest extends XWorkTestCase {
+
+
+ InternalRepopulateConversionErrorFieldValidatorSupport validator1;
+ InternalRepopulateConversionErrorFieldValidatorSupport validator2;
+ ActionSupport action;
+
+ public void testUseFullFieldName() throws Exception {
+ validator2.setRepopulateField("true");
+ validator2.validate(action);
+
+ ActionContext.getContext().getActionInvocation().invoke();
+ Object valueFromStack1 = ActionContext.getContext().getValueStack().findValue("someFieldName", String.class);
+ Object valueFromStack2 = ActionContext.getContext().getValueStack().findValue("xxxsomeFieldName", String.class);
+
+ assertNull(valueFromStack1);
+ assertEquals(valueFromStack2, "some value");
+ }
+
+ public void testGetterSetterGetsCalledApropriately1() throws Exception {
+
+ validator1.setRepopulateField("true");
+ validator1.validate(action);
+
+
+ ActionContext.getContext().getActionInvocation().invoke();
+
+ Object valueFromStack = ActionContext.getContext().getValueStack().findValue("someFieldName", String.class);
+
+ assertEquals(valueFromStack, "some value");
+ }
+
+
+ public void testGetterSetterGetsCalledApropriately2() throws Exception {
+
+ validator1.setRepopulateField("false");
+ validator1.validate(action);
+
+
+ ActionContext.getContext().getActionInvocation().invoke();
+
+ Object valueFromStack = ActionContext.getContext().getValueStack().findValue("someFieldName", String.class);
+
+ assertEquals(valueFromStack, null);
+ }
+
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ ValueStack stack = ActionContext.getContext().getValueStack();
+ MockActionInvocation invocation = new MockActionInvocation();
+ invocation.setStack(stack);
+ ActionContext.getContext().setValueStack(stack);
+ ActionContext.getContext().setActionInvocation(invocation);
+
+ String[] conversionErrorValue = new String[] { "some value" };
+ Map<String, Object> conversionErrors = ActionContext.getContext().getConversionErrors();
+ conversionErrors.put("someFieldName", conversionErrorValue);
+ conversionErrors.put("xxxsomeFieldName", conversionErrorValue);
+
+ action = new ActionSupport();
+ validator1 =
+ new InternalRepopulateConversionErrorFieldValidatorSupport();
+ validator1.setFieldName("someFieldName");
+ validator1.setValidatorContext(new DelegatingValidatorContext(action));
+
+ validator2 =
+ new InternalRepopulateConversionErrorFieldValidatorSupport();
+ validator2.setFieldName("someFieldName");
+ validator2.setValidatorContext(new DelegatingValidatorContext(action) {
+ @Override
+ public String getFullFieldName(String fieldName) {
+ return "xxx"+fieldName;
+ }
+ });
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ validator1 = null;
+ action = null;
+ }
+
+
+ // === inner class ============
+
+ class InternalRepopulateConversionErrorFieldValidatorSupport extends RepopulateConversionErrorFieldValidatorSupport {
+ public boolean doValidateGetsCalled = false;
+
+ @Override
+ protected void doValidate(Object object) throws ValidationException {
+ doValidateGetsCalled = true;
+ }
+ }
+}
Added: struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ShortRangeValidatorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ShortRangeValidatorTest.java?rev=1209569&view=auto
==============================================================================
--- struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ShortRangeValidatorTest.java (added)
+++ struts/struts2/branches/STRUTS_3_X/xwork-core/src/test/java/org/apache/struts2/xwork2/validator/ShortRangeValidatorTest.java Fri Dec 2 16:33:03 2011
@@ -0,0 +1,65 @@
+/*
+ * 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.ActionProxy;
+import org.apache.struts2.xwork2.ValidationAware;
+import org.apache.struts2.xwork2.XWorkTestCase;
+import org.apache.struts2.xwork2.config.providers.MockConfigurationProvider;
+import org.apache.struts2.xwork2.config.providers.XmlConfigurationProvider;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * ShortRangeValidatorTest
+ * <p/>
+ *
+ */
+public class ShortRangeValidatorTest extends XWorkTestCase {
+
+ public void testRangeValidation() {
+ HashMap<String, Object> params = new HashMap<String, Object>();
+ params.put("shortFoo", "200");
+
+ 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 errors = ((ValidationAware) proxy.getAction()).getFieldErrors();
+ List errorMessages = (List) errors.get("shortFoo");
+ assertEquals(1, errorMessages.size());
+
+ String errorMessage = (String) errorMessages.get(0);
+ assertNotNull(errorMessage);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ loadConfigurationProviders(new XmlConfigurationProvider("xwork-test-beans.xml"), new MockConfigurationProvider());
+ }
+}