/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestValidation.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.site;
import com.uwyn.rife.tools.ExceptionUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import junit.framework.TestCase;
public class TestValidation extends TestCase
{
public TestValidation(String name)
{
super(name);
}
public void testInstantiation()
{
Bean bean = new Bean("value");
assertNotNull(bean);
assertEquals(0, bean.countValidationErrors());
assertEquals(0, bean.getValidationErrors().size());
assertEquals(0, bean.getConstrainedProperties().size());
assertEquals(0, bean.getRules().size());
assertEquals(0, bean.getGroups().size());
assertNull(bean.getConstrainedBean());
assertTrue(bean.isSubjectValid("property"));
assertTrue(bean.validate());
}
public void testValidRule()
{
Bean bean = new Bean("value");
bean.addRule(null);
ValidationRule rule1 = new ValidationRuleNotEmpty("property").setBean(bean);
ValidationRule rule2 = new ValidationRuleNotNull("property");
bean.addRule(rule1);
bean.addRule(rule2);
List<ValidationRule> rules = bean.getRules();
assertEquals(2, rules.size());
assertSame(rule1, rules.get(0));
assertSame(rule2, rules.get(1));
assertTrue(bean.validate());
assertEquals(0, bean.countValidationErrors());
assertEquals(0, bean.getValidationErrors().size());
assertTrue(bean.isSubjectValid("property"));
}
public void testInvalidRule()
{
Bean bean = new Bean(null);
bean.addRule(null);
ValidationRule rule1 = new ValidationRuleNotEmpty("property");
ValidationRule rule2 = new ValidationRuleNotNull("property");
bean.addRule(rule1);
bean.addRule(rule2);
assertFalse(bean.validate());
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
assertFalse(bean.isSubjectValid("property"));
assertTrue(bean.isSubjectValid("property_unknown"));
Iterator<ValidationError> it = bean.getValidationErrors().iterator();
assertTrue(it.hasNext());
ValidationError error = it.next();
assertFalse(it.hasNext());
assertEquals(ValidationError.IDENTIFIER_MANDATORY, error.getIdentifier());
assertEquals("property", error.getSubject());
}
public void testGetGroupIllegalArgument()
{
Bean bean = new Bean("value");
assertNull(bean.getGroup(null));
assertNull(bean.getGroup(""));
assertNull(bean.getGroup("group2"));
}
public void testAddGroup()
{
Bean bean = new Bean("value");
ValidationGroup group1 = bean.addGroup("group1")
.addRule(new ValidationRuleNotEmpty("property"))
.addRule(new ValidationRuleNotNull("property"));
ValidationGroup group2 = bean.addGroup("group2")
.addRule(new ValidationRuleNotNull("theDate"));
assertEquals(2, bean.getGroups().size());
assertSame(group1, bean.getGroup("group1"));
assertSame(group2, bean.getGroup("group2"));
}
public void testAddValidationError()
{
Bean bean = new Bean(null);
bean.addValidationError(null);
assertEquals(0, bean.countValidationErrors());
assertEquals(0, bean.getValidationErrors().size());
bean.addValidationError(new ValidationError.MANDATORY("subject"));
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
}
public void testReplaceValidationError()
{
Bean bean = new Bean(null);
Set<ValidationError> errors = new LinkedHashSet<ValidationError>();
bean.replaceValidationErrors(errors);
assertSame(errors, bean.getValidationErrors());
}
public void testValidateWithoutReset()
{
Bean bean = new Bean("");
ValidationRule rule = new ValidationRuleNotEmpty("property");
bean.addRule(rule);
assertFalse(bean.validate());
assertEquals(1, bean.countValidationErrors());
bean.setProperty("value");
assertFalse(bean.validate());
assertEquals(1, bean.countValidationErrors());
}
public void testResetValidation()
{
Bean bean = new Bean("");
ValidationRule rule = new ValidationRuleNotEmpty("property");
bean.addRule(rule);
assertFalse(bean.validate());
bean.resetValidation();
assertEquals(0, bean.countValidationErrors());
assertEquals(0, bean.getValidationErrors().size());
assertTrue(bean.isSubjectValid("property"));
}
public void testFocusGroupIllegalArguments()
{
Bean bean = new Bean("");
bean.focusGroup(null);
assertEquals(0, bean.countValidationErrors());
bean.addGroup("group1")
.addRule(new ValidationRuleLimitedLength("property", 1, -1))
.addRule(new ValidationRuleNotEmpty("property"));
bean.validate();
assertEquals(1, bean.countValidationErrors());
bean.focusGroup("unknown");
assertEquals(1, bean.countValidationErrors());
}
public void testFocusGroup()
{
Bean bean = new Bean("");
bean.addGroup("group1")
.addRule(new ValidationRuleLimitedLength("property", 1, -1))
.addRule(new ValidationRuleNotEmpty("property"));
bean.addGroup("group2")
.addRule(new ValidationRuleNotNull("theDate"));
assertFalse(bean.validate());
assertEquals(2, bean.countValidationErrors());
assertFalse(bean.isSubjectValid("property"));
assertFalse(bean.isSubjectValid("theDate"));
bean.focusGroup("group1");
assertEquals(1, bean.countValidationErrors());
Set<ValidationError> set = bean.getValidationErrors();
assertFalse(bean.isSubjectValid("property"));
assertTrue(bean.isSubjectValid("theDate"));
Iterator<ValidationError> set_it = set.iterator();
ValidationError error = set_it.next();
assertEquals(ValidationError.IDENTIFIER_WRONGLENGTH, error.getIdentifier());
assertEquals("property", error.getSubject());
bean.resetValidation();
assertFalse(bean.validate());
assertEquals(2, bean.countValidationErrors());
assertFalse(bean.isSubjectValid("property"));
assertFalse(bean.isSubjectValid("theDate"));
bean.focusGroup("group2");
assertEquals(1, bean.countValidationErrors());
set = bean.getValidationErrors();
assertTrue(bean.isSubjectValid("property"));
assertFalse(bean.isSubjectValid("theDate"));
set_it = set.iterator();
error = set_it.next();
assertEquals(ValidationError.IDENTIFIER_MANDATORY, error.getIdentifier());
assertEquals("theDate", error.getSubject());
}
public void testResetGroupIllegalArguments()
{
Bean bean = new Bean("");
bean.resetGroup(null);
assertEquals(0, bean.countValidationErrors());
bean.addGroup("group1")
.addRule(new ValidationRuleLimitedLength("property", 1, -1))
.addRule(new ValidationRuleNotEmpty("property"));
bean.validate();
assertEquals(1, bean.countValidationErrors());
bean.resetGroup("unknown");
assertEquals(1, bean.countValidationErrors());
}
public void testResetGroup()
{
Bean bean = new Bean("");
bean.addGroup("group1")
.addRule(new ValidationRuleLimitedLength("property", 1, -1))
.addRule(new ValidationRuleNotEmpty("property"));
bean.addGroup("group2")
.addRule(new ValidationRuleNotNull("theDate"));
assertFalse(bean.validate());
assertEquals(2, bean.countValidationErrors());
assertFalse(bean.isSubjectValid("property"));
assertFalse(bean.isSubjectValid("theDate"));
bean.resetGroup("group1");
assertEquals(1, bean.countValidationErrors());
Set<ValidationError> set = bean.getValidationErrors();
assertTrue(bean.isSubjectValid("property"));
assertFalse(bean.isSubjectValid("theDate"));
Iterator<ValidationError> set_it = set.iterator();
ValidationError error = set_it.next();
assertEquals(ValidationError.IDENTIFIER_MANDATORY, error.getIdentifier());
assertEquals("theDate", error.getSubject());
bean.resetValidation();
assertFalse(bean.validate());
assertEquals(2, bean.countValidationErrors());
assertFalse(bean.isSubjectValid("property"));
assertFalse(bean.isSubjectValid("theDate"));
bean.resetGroup("group2");
assertEquals(1, bean.countValidationErrors());
set = bean.getValidationErrors();
assertFalse(bean.isSubjectValid("property"));
assertTrue(bean.isSubjectValid("theDate"));
set_it = set.iterator();
error = set_it.next();
assertEquals(ValidationError.IDENTIFIER_WRONGLENGTH, error.getIdentifier());
assertEquals("property", error.getSubject());
}
public void testValidateGroupIllegalArguments()
{
Bean bean = new Bean("value");
bean.addGroup("group1")
.addRule(new ValidationRuleNotEmpty("property"))
.addRule(new ValidationRuleNotNull("property"));
assertTrue(bean.validateGroup(null));
assertTrue(bean.validateGroup("unknown"));
}
public void testValidateGroup()
{
Bean bean = new Bean("");
bean.setProperty("12");
bean.addGroup("group1")
.addRule(new ValidationRuleLimitedLength("property", 3, -1));
bean.addGroup("group2")
.addRule(new ValidationRuleNotNull("theDate"));
assertFalse(bean.validate());
assertEquals(2, bean.countValidationErrors());
assertFalse(bean.isSubjectValid("property"));
assertFalse(bean.isSubjectValid("theDate"));
bean.resetValidation();
assertFalse(bean.validateGroup("group1"));
assertEquals(1, bean.countValidationErrors());
assertFalse(bean.isSubjectValid("property"));
assertTrue(bean.isSubjectValid("theDate"));
Set<ValidationError> set = bean.getValidationErrors();
Iterator<ValidationError> set_it = set.iterator();
ValidationError error = set_it.next();
assertEquals(ValidationError.IDENTIFIER_WRONGLENGTH, error.getIdentifier());
assertEquals("property", error.getSubject());
assertFalse(set_it.hasNext());
bean.getGroup("group1")
.addRule(new ValidationRuleNotEqual("property", "12"));
assertFalse(bean.validateGroup("group1"));
assertEquals(2, bean.countValidationErrors());
set = bean.getValidationErrors();
set_it = set.iterator();
error = set_it.next();
assertEquals(ValidationError.IDENTIFIER_WRONGLENGTH, error.getIdentifier());
assertEquals("property", error.getSubject());
error = set_it.next();
assertEquals(ValidationError.IDENTIFIER_INVALID, error.getIdentifier());
assertEquals("property", error.getSubject());
assertFalse(set_it.hasNext());
bean.resetValidation();
assertFalse(bean.validateGroup("group2"));
assertEquals(1, bean.countValidationErrors());
set = bean.getValidationErrors();
set_it = set.iterator();
error = set_it.next();
assertTrue(bean.isSubjectValid("property"));
assertFalse(bean.isSubjectValid("theDate"));
assertEquals(ValidationError.IDENTIFIER_MANDATORY, error.getIdentifier());
assertEquals("theDate", error.getSubject());
assertFalse(bean.validateGroup("group2"));
assertEquals(1, bean.countValidationErrors());
}
public void testUniqueSubjectErrors()
{
Bean bean = new Bean("");
bean.setProperty("://wrong");
bean.addRule(new ValidationRuleEmail("property"));
bean.addRule(new ValidationRuleUrl("property"));
assertFalse(bean.validate());
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
}
public void testLimitSubjectErrors()
{
Bean bean = new Bean("");
bean.setProperty("://wrong");
bean.limitSubjectErrors(null);
bean.addRule(new ValidationRuleEmail("property"));
bean.addRule(new ValidationRuleLimitedLength("property", 2, 4));
assertFalse(bean.validate());
assertEquals(2, bean.countValidationErrors());
assertEquals(2, bean.getValidationErrors().size());
bean.limitSubjectErrors("property");
bean.limitSubjectErrors("property");
assertEquals(2, bean.countValidationErrors());
assertEquals(2, bean.getValidationErrors().size());
bean.resetValidation();
assertFalse(bean.validate());
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
bean.unlimitSubjectErrors("property");
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
}
public void testUnlimitSubjectErrors()
{
Bean bean = new Bean("");
bean.setProperty("://wrong");
bean.unlimitSubjectErrors(null);
bean.unlimitSubjectErrors("property");
bean.limitSubjectErrors("property");
bean.addRule(new ValidationRuleEmail("property"));
bean.addRule(new ValidationRuleLimitedLength("property", 2, 4));
assertFalse(bean.validate());
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
bean.unlimitSubjectErrors("property");
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
bean.resetValidation();
assertFalse(bean.validate());
assertEquals(2, bean.countValidationErrors());
assertEquals(2, bean.getValidationErrors().size());
}
public void testMakeSubjectValid()
{
Bean bean = new Bean("");
bean.makeSubjectValid(null);
assertTrue(bean.isSubjectValid(null));
bean.makeSubjectValid("blurp");
assertTrue(bean.isSubjectValid("blurp"));
ValidationRule rule = new ValidationRuleNotEmpty("property");
bean.addRule(rule);
assertFalse(bean.validate());
bean.makeSubjectValid("property_blah");
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
assertFalse(bean.isSubjectValid("property"));
bean.makeSubjectValid("property");
assertEquals(0, bean.countValidationErrors());
assertEquals(0, bean.getValidationErrors().size());
assertTrue(bean.isSubjectValid("property"));
}
public void testMakeErrorValid()
{
Bean bean = new Bean("");
bean.makeErrorValid(null, null);
assertTrue(bean.isSubjectValid(null));
bean.makeErrorValid(null, "blurp");
assertTrue(bean.isSubjectValid("blurp"));
bean.makeErrorValid("INVALID", "blurp");
assertTrue(bean.isSubjectValid("blurp"));
ValidationRule rule1 = new ValidationRuleNotEqual("property", "");
ValidationRule rule2 = new ValidationRuleLimitedLength("property", 2, 4);
bean.addRule(rule1);
bean.addRule(rule2);
assertFalse(bean.validate());
bean.makeErrorValid("INVALID", "property_blah");
assertEquals(2, bean.countValidationErrors());
assertEquals(2, bean.getValidationErrors().size());
assertFalse(bean.isSubjectValid("property"));
bean.makeErrorValid(null, "property");
assertEquals(2, bean.countValidationErrors());
assertEquals(2, bean.getValidationErrors().size());
assertFalse(bean.isSubjectValid("property"));
bean.makeErrorValid("INVALID", "property");
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
assertFalse(bean.isSubjectValid("property"));
ValidationError error = (ValidationError)bean.getValidationErrors().iterator().next();
assertEquals("property", error.getSubject());
assertEquals("WRONGLENGTH", error.getIdentifier());
bean.makeErrorValid("WRONGLENGTH", "property");
assertEquals(0, bean.countValidationErrors());
assertEquals(0, bean.getValidationErrors().size());
assertTrue(bean.isSubjectValid("property"));
}
public void testGetErrorIndication()
{
Bean bean = new Bean("test");
ValidationRule rule = new ValidationRuleNotEmpty("property");
bean.addRule(rule);
assertTrue(bean.validate());
assertEquals("valid", Validation.getErrorIndication(bean, "property", "valid", "error"));
bean.setProperty("");
assertFalse(bean.validate());
assertEquals("error", Validation.getErrorIndication(bean, "property", "valid", "error"));
}
public void testConstrainedBean()
{
Bean bean = null;
ConstrainedBean constraint = new ConstrainedBean().unique("property", "other");
bean = new Bean("value");
bean.addConstraint(constraint);
assertSame(constraint, bean.getConstrainedBean());
}
public void testSeveralConstrainedBean()
{
Bean bean = null;
ConstrainedBean constraint1 = new ConstrainedBean().unique("property", "other");
ConstrainedBean constraint2 = new ConstrainedBean().unique("property3", "other2", "other3").defaultOrder("ordered");
bean = new Bean("value");
bean.addConstraint(constraint1);
assertEquals(1, bean.getConstrainedBean().getConstraints().size());
bean.addConstraint((ConstrainedBean)null);
bean.addConstraint(constraint2);
assertSame(constraint2, bean.getConstrainedBean());
assertEquals(2, bean.getConstrainedBean().getConstraints().size());
assertEquals(1, bean.getConstrainedBean().getUniques().size());
assertEquals("property3", ((String[])bean.getConstrainedBean().getUniques().get(0))[0]);
assertEquals("other2", ((String[])bean.getConstrainedBean().getUniques().get(0))[1]);
assertEquals("other3", ((String[])bean.getConstrainedBean().getUniques().get(0))[2]);
assertEquals("ordered", ((ConstrainedBean.Order)bean.getConstrainedBean().getDefaultOrdering().get(0)).getPropertyName());
assertSame(ConstrainedBean.ASC, ((ConstrainedBean.Order)bean.getConstrainedBean().getDefaultOrdering().get(0)).getDirection());
}
public void testConstraintSubject()
{
Bean bean = null;
bean = new Bean("value");
bean.addConstraint(new ConstrainedProperty("property").notNull(true));
bean.setProperty(null);
assertFalse(bean.validate());
Set<ValidationError> set = bean.getValidationErrors();
assertEquals("property", set.iterator().next().getSubject());
bean = new Bean("value");
bean.addConstraint(new ConstrainedProperty("property").subjectName("subject").notNull(true));
bean.setProperty(null);
assertFalse(bean.validate());
set = bean.getValidationErrors();
assertEquals("subject", set.iterator().next().getSubject());
}
public void testConstraintNotNull()
{
Bean bean = new Bean("value");
bean.addConstraint(new ConstrainedProperty("property").notNull(true));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isNotNull());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty(null);
assertFalse(bean.validate());
}
public void testConstraintNotEmpty()
{
Bean bean = new Bean("value");
bean.addConstraint(new ConstrainedProperty("property").notEmpty(true));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isNotEmpty());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty("");
assertFalse(bean.validate());
}
public void testConstraintNotEqual()
{
Bean bean = new Bean("other");
bean.addConstraint(new ConstrainedProperty("property").notEqual("value"));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isNotEqual());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty("value");
assertFalse(bean.validate());
}
public void testConstraintLimitedLength()
{
Bean bean = new Bean("value");
bean.addConstraint(new ConstrainedProperty("property").minLength(3));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().hasLimitedLength());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty("df");
assertFalse(bean.validate());
}
public void testConstraintEmail()
{
Bean bean = new Bean("test@domain.com");
bean.addConstraint(new ConstrainedProperty("property").email(true));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isEmail());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty("dfdf@");
assertFalse(bean.validate());
}
public void testConstraintUrl()
{
Bean bean = new Bean("http://test.some.com");
bean.addConstraint(new ConstrainedProperty("property").url(true));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isUrl());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty("htt:www/.test.com");
assertFalse(bean.validate());
}
public void testConstraintRegexp()
{
Bean bean = new Bean("two words");
bean.addConstraint(new ConstrainedProperty("property").regexp("\\w+ \\w+"));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().matchesRegexp());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty("aword");
assertFalse(bean.validate());
}
public void testConstraintFormat()
{
Bean bean = new Bean("12032003");
bean.addConstraint(new ConstrainedProperty("property").format(new SimpleDateFormat("ddmmyyyy")));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isFormatted());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty("12");
assertFalse(bean.validate());
}
public void testConstraintLimitedDate()
{
Bean bean = new Bean(null);
bean.setTheDate(new Date(2003, 12, 11));
bean.addConstraint(new ConstrainedProperty("theDate").maxDate(new Date(2004, 3, 1)));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isLimitedDate());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setTheDate(new Date(2004, 12, 11));
assertFalse(bean.validate());
}
public void testConstraintInList()
{
Bean bean = new Bean("entry");
bean.addConstraint(new ConstrainedProperty("property").inList(new String[] {"one", "two", "entry", "three"}));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isInList());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty("notinlist");
assertFalse(bean.validate());
}
public void testConstraintRange()
{
Bean bean = new Bean("bbbb");
bean.addConstraint(new ConstrainedProperty("property").rangeBegin("aaab").rangeEnd("ccca"));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isRange());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setProperty("dddd");
assertFalse(bean.validate());
}
public void testConstraintSameAs()
{
Bean bean = new Bean("first value");
bean.setOther("first value");
bean.addConstraint(new ConstrainedProperty("other").sameAs("property"));
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isSameAs());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setOther("second value");
assertFalse(bean.validate());
}
public void testSeveralConstraints()
{
Bean bean = new Bean("value");
bean.setTheDate(new Date());
assertNull(bean.getConstrainedProperty(null));
assertNull(bean.getConstrainedProperty(""));
assertNull(bean.getConstrainedProperty("property"));
bean.addConstraint((ConstrainedProperty)null);
bean.addConstraint(new ConstrainedProperty("theDate").notNull(true));
bean.addConstraint(new ConstrainedProperty("property").notNull(true).notEmpty(true));
assertNull(bean.getConstrainedProperty("property_unknown"));
assertTrue(bean.getConstrainedProperty("theDate").isNotNull());
assertTrue(bean.getConstrainedProperty("property").isNotNull());
assertTrue(bean.getConstrainedProperty("property").isNotEmpty());
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isNotNull());
assertTrue(it.hasNext());
ConstrainedProperty property = it.next();
assertTrue(property.isNotNull());
assertTrue(property.isNotEmpty());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setTheDate(null);
assertFalse(bean.validate());
bean.setTheDate(new Date());
bean.resetValidation();
assertTrue(bean.validate());
bean.setProperty("");
bean.resetValidation();
assertFalse(bean.validate());
bean.setProperty(null);
bean.resetValidation();
assertFalse(bean.validate());
}
public void testSameConstraintProperties()
{
Bean bean = new Bean("value");
bean.setTheDate(new Date());
bean.addConstraint(new ConstrainedProperty("theDate").notNull(true));
bean.addConstraint(new ConstrainedProperty("property").notNull(true).notEmpty(false));
bean.addConstraint(new ConstrainedProperty("property").notEmpty(true));
assertNull(bean.getConstrainedProperty("property_unknown"));
assertTrue(bean.getConstrainedProperty("theDate").isNotNull());
assertTrue(bean.getConstrainedProperty("property").isNotNull());
assertTrue(bean.getConstrainedProperty("property").isNotEmpty());
Iterator<ConstrainedProperty> it = bean.getConstrainedProperties().iterator();
assertTrue(it.hasNext());
assertTrue(it.next().isNotNull());
assertTrue(it.hasNext());
ConstrainedProperty property = it.next();
assertTrue(property.isNotNull());
assertTrue(property.isNotEmpty());
assertFalse(it.hasNext());
assertTrue(bean.validate());
bean.setTheDate(null);
assertFalse(bean.validate());
bean.setTheDate(new Date());
bean.resetValidation();
assertTrue(bean.validate());
bean.setProperty("");
bean.resetValidation();
assertFalse(bean.validate());
bean.setProperty(null);
bean.resetValidation();
assertFalse(bean.validate());
}
public void testCloneEmpty()
{
Bean bean = new Bean("value");
Bean other = null;
try
{
other = (Bean)bean.clone();
}
catch (CloneNotSupportedException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
assertNotNull(other);
assertEquals(0, other.getRules().size());
assertEquals(0, other.countValidationErrors());
assertEquals(0, other.getValidationErrors().size());
assertEquals(0, other.getConstrainedProperties().size());
assertEquals(0, other.getGroups().size());
assertNull(other.getConstrainedBean());
}
public void testCloneFilled()
{
Iterator<ValidationGroup> it_groups = null;
Iterator<String> it_subjects = null;
Iterator<ConstrainedProperty> it_constraints = null;
Iterator<ValidationError> it_errors = null;
ValidationError error = null;
Bean bean = new Bean("value");
bean.addGroup("group1");
it_groups = bean.getGroups().iterator();
assertTrue(it_groups.hasNext());
assertEquals(it_groups.next().getName(), "group1");
assertSame(bean, bean.getGroup("group1").getValidation());
assertFalse(it_groups.hasNext());
bean.addConstraint(new ConstrainedProperty("property").notEqual("value"));
it_constraints = bean.getConstrainedProperties().iterator();
assertTrue(it_constraints.hasNext());
assertTrue(it_constraints.next().isNotEqual());
assertFalse(it_constraints.hasNext());
it_subjects = bean.getValidatedSubjects().iterator();
assertTrue(it_subjects.hasNext());
assertEquals("property", it_subjects.next());
assertFalse(it_subjects.hasNext());
bean.limitSubjectErrors("property");
assertFalse(bean.validate());
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
assertFalse(bean.validate());
assertEquals(1, bean.countValidationErrors());
assertEquals(1, bean.getValidationErrors().size());
it_errors = bean.getValidationErrors().iterator();
assertTrue(it_errors.hasNext());
error = it_errors.next();
assertEquals(ValidationError.IDENTIFIER_INVALID, error.getIdentifier());
assertEquals("property", error.getSubject());
assertFalse(it_errors.hasNext());
bean.setProperty("test");
bean.resetValidation();
assertTrue(bean.validate());
bean.setProperty("value");
bean.resetValidation();
assertFalse(bean.validate());
Bean other = null;
try
{
other = (Bean)bean.clone();
}
catch (CloneNotSupportedException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
it_groups = other.getGroups().iterator();
assertTrue(it_groups.hasNext());
assertEquals(it_groups.next().getName(), "group1");
assertSame(other, other.getGroup("group1").getValidation());
assertFalse(it_groups.hasNext());
it_constraints = other.getConstrainedProperties().iterator();
assertTrue(it_constraints.hasNext());
assertTrue(it_constraints.next().isNotEqual());
assertFalse(it_constraints.hasNext());
assertEquals(1, other.countValidationErrors());
assertEquals(1, other.getValidationErrors().size());
assertFalse(bean.validate());
assertEquals(1, other.countValidationErrors());
assertEquals(1, other.getValidationErrors().size());
it_subjects = other.getValidatedSubjects().iterator();
assertTrue(it_subjects.hasNext());
assertEquals("property", it_subjects.next());
assertFalse(it_subjects.hasNext());
it_errors = other.getValidationErrors().iterator();
assertTrue(it_errors.hasNext());
error = it_errors.next();
assertEquals(ValidationError.IDENTIFIER_INVALID, error.getIdentifier());
assertEquals("property", error.getSubject());
assertFalse(it_errors.hasNext());
bean.setProperty("test");
bean.resetValidation();
assertTrue(bean.validate());
other.resetValidation();
assertFalse(other.validate());
other.setProperty("test2");
other.resetValidation();
assertTrue(other.validate());
other.resetValidation();
assertTrue(other.validate());
bean.setProperty("value");
bean.resetValidation();
assertFalse(bean.validate());
other.resetValidation();
assertTrue(other.validate());
}
public class Bean extends Validation
{
private String mProperty = null;
private String mOther = null;
private Date mTheDate = null;
public Bean(String property)
{
mProperty = property;
}
public void setProperty(String property)
{
mProperty = property;
}
public String getProperty()
{
return mProperty;
}
public void setOther(String other)
{
mOther = other;
}
public String getOther()
{
return mOther;
}
public void setTheDate(Date date)
{
mTheDate = date;
}
public Date getTheDate()
{
return mTheDate;
}
}
}