/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestValidationGroup.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.site;
import com.uwyn.rife.site.exceptions.ValidationException;
import java.util.List;
import junit.framework.TestCase;
public class TestValidationGroup extends TestCase
{
public TestValidationGroup(String name)
{
super(name);
}
public void testInstantiation()
{
Validation validation = new Validation();
ValidationGroup group1 = validation.addGroup("group1");
assertNotNull(group1);
ValidationGroup group2 = validation.addGroup("group2");
assertNotNull(group2);
ValidationGroup group3 = validation.addGroup("group1");
assertNotNull(group3);
assertNotSame(group1, validation.getGroup("group1"));
assertSame(group3, validation.getGroup("group1"));
assertSame(group2, validation.getGroup("group2"));
assertSame(group3, validation.getGroup("group1"));
}
public void testInitialstate()
{
Validation validation = new Validation();
ValidationGroup group = validation.addGroup("mygroup");
assertSame(validation, group.getValidation());
assertEquals("mygroup", group.getName());
assertEquals(0, group.getSubjects().size());
}
public void testAddSubject()
{
Validation validation = new Validation();
ValidationGroup group = validation.addGroup("mygroup");
assertSame(group, group.addSubject("subject1"));
assertSame(group, group.addSubject("subject2"));
assertSame(group, group.addSubject("subject3"));
assertSame(group, group.addSubject("subject1"));
assertSame(group, group.addSubject("subject4"));
List<String> subjects = group.getSubjects();
assertEquals(4, subjects.size());
assertEquals("subject1", subjects.get(0));
assertEquals("subject2", subjects.get(1));
assertEquals("subject3", subjects.get(2));
assertEquals("subject4", subjects.get(3));
}
public void testReinitializeProperties()
{
InitializedBeanImpl bean = new InitializedBeanImpl();
bean.setString("one");
bean.setInt(9);
bean.setInteger(12);
bean.setCharacter('Z');
Validation validation = new Validation();
ValidationGroup group = validation.addGroup("mygroup");
group.reinitializeProperties(bean);
assertEquals("one", bean.getString());
assertNull(bean.getStringbuffer());
assertEquals(9, bean.getInt());
assertEquals(12, bean.getInteger().intValue());
assertEquals('i', bean.getChar());
assertEquals('Z', bean.getCharacter().charValue());
group
.addConstraint(new ConstrainedProperty("string"))
.addSubject("int")
.addSubject("integer")
.addSubject("char")
.addSubject("character");
group.reinitializeProperties(null);
assertEquals("one", bean.getString());
assertNull(bean.getStringbuffer());
assertEquals(9, bean.getInt());
assertEquals(12, bean.getInteger().intValue());
assertEquals('i', bean.getChar());
assertEquals('Z', bean.getCharacter().charValue());
group.reinitializeProperties(bean);
assertEquals("default", bean.getString());
assertNull(bean.getStringbuffer());
assertEquals(-1, bean.getInt());
assertNull(bean.getInteger());
assertEquals('i', bean.getChar());
assertEquals('k', bean.getCharacter().charValue());
}
public void testReinitializePropertiesError()
{
Validation validation = new Validation();
ValidationGroup group = validation.addGroup("mygroup");
group
.addSubject("string");
NonStaticBean bean = new NonStaticBean();
try
{
group.reinitializeProperties(bean);
fail();
}
catch (ValidationException e)
{
assertTrue(e.getCause() instanceof InstantiationException);
}
}
class NonStaticBean
{
}
public void testAddRule()
{
Validation validation = new Validation();
ValidationGroup group = validation.addGroup("mygroup");
assertSame(group, group.addRule(new ValidationRuleNotNull("subject1")));
assertSame(group, group.addRule(new ValidationRuleNotEmpty("subject2")));
assertSame(group, group.addRule(new ValidationRuleUrl("subject3")));
assertSame(group, group.addRule(new ValidationRuleEmail("subject1")));
assertSame(group, group.addRule(new ValidationRuleNotEqual("subject4", "test")));
List<String> subjects = group.getSubjects();
assertEquals(4, subjects.size());
assertEquals("subject1", subjects.get(0));
assertEquals("subject2", subjects.get(1));
assertEquals("subject3", subjects.get(2));
assertEquals("subject4", subjects.get(3));
subjects = validation.getValidatedSubjects();
assertEquals(4, subjects.size());
assertEquals("subject1", subjects.get(0));
assertEquals("subject2", subjects.get(1));
assertEquals("subject3", subjects.get(2));
assertEquals("subject4", subjects.get(3));
List<ValidationRule> rules = validation.getRules();
assertEquals(5, rules.size());
assertTrue(rules.get(0) instanceof ValidationRuleNotNull);
assertEquals("subject1", rules.get(0).getSubject());
assertTrue(rules.get(1) instanceof ValidationRuleNotEmpty);
assertEquals("subject2", rules.get(1).getSubject());
assertTrue(rules.get(2) instanceof ValidationRuleUrl);
assertEquals("subject3", rules.get(2).getSubject());
assertTrue(rules.get(3) instanceof ValidationRuleEmail);
assertEquals("subject1", rules.get(3).getSubject());
assertTrue(rules.get(4) instanceof ValidationRuleNotEqual);
assertEquals("subject4", rules.get(4).getSubject());
}
public void testAddConstraint()
{
Validation validation = new Validation();
ValidationGroup group = validation.addGroup("mygroup");
ConstrainedProperty property1 = new ConstrainedProperty("subject1").notNull(true).notEmpty(true);
ConstrainedProperty property2 = new ConstrainedProperty("subject2").url(true);
ConstrainedProperty property3 = new ConstrainedProperty("subject3").email(true);
ConstrainedProperty property4 = new ConstrainedProperty("subject4").notEqual("test");
ConstrainedProperty property5 = new ConstrainedProperty("subject5");
assertSame(group, group.addConstraint(property1));
assertSame(group, group.addConstraint(property2));
assertSame(group, group.addConstraint(property3));
assertSame(group, group.addConstraint(property4));
assertSame(group, group.addConstraint(property5));
List<String> subjects = group.getSubjects();
assertEquals(4, subjects.size());
assertEquals("subject1", subjects.get(0));
assertEquals("subject2", subjects.get(1));
assertEquals("subject3", subjects.get(2));
assertEquals("subject4", subjects.get(3));
subjects = validation.getValidatedSubjects();
assertEquals(4, subjects.size());
assertEquals("subject1", subjects.get(0));
assertEquals("subject2", subjects.get(1));
assertEquals("subject3", subjects.get(2));
assertEquals("subject4", subjects.get(3));
List<ValidationRule> rules = validation.getRules();
assertEquals(5, rules.size());
assertTrue(rules.get(0) instanceof ValidationRuleNotNull);
assertEquals("subject1", rules.get(0).getSubject());
assertTrue(rules.get(1) instanceof ValidationRuleNotEmpty);
assertEquals("subject1", rules.get(1).getSubject());
assertTrue(rules.get(2) instanceof ValidationRuleUrl);
assertEquals("subject2", rules.get(2).getSubject());
assertTrue(rules.get(3) instanceof ValidationRuleEmail);
assertEquals("subject3", rules.get(3).getSubject());
assertTrue(rules.get(4) instanceof ValidationRuleNotEqual);
assertEquals("subject4", rules.get(4).getSubject());
assertEquals(5, validation.getConstrainedProperties().size());
assertSame(property1, validation.getConstrainedProperty("subject1"));
assertSame(property2, validation.getConstrainedProperty("subject2"));
assertSame(property3, validation.getConstrainedProperty("subject3"));
assertSame(property4, validation.getConstrainedProperty("subject4"));
assertSame(property5, validation.getConstrainedProperty("subject5"));
}
public void testAddGroup()
{
Validation validation = new Validation();
ValidationGroup group = validation.addGroup("mygroup");
ValidationGroup group2 = group.addGroup("group2");
assertSame(group2, validation.getGroup("group2"));
assertSame(group, group.addSubject("subject1"));
assertSame(group, group.addSubject("subject2"));
assertSame(group2, group2.addSubject("subject3"));
assertSame(group2, group2.addSubject("subject1"));
assertSame(group2, group2.addSubject("subject4"));
List<String> subjects = null;
subjects = group.getSubjects();
assertEquals(4, subjects.size());
assertEquals("subject1", subjects.get(0));
assertEquals("subject2", subjects.get(1));
assertEquals("subject3", subjects.get(2));
assertEquals("subject4", subjects.get(3));
subjects = group2.getSubjects();
assertEquals(3, subjects.size());
assertEquals("subject3", subjects.get(0));
assertEquals("subject1", subjects.get(1));
assertEquals("subject4", subjects.get(2));
}
public void testAddGroupAddRule()
{
Validation validation = new Validation();
ValidationGroup group = validation.addGroup("group").addGroup("mygroup");
assertSame(group, group.addRule(new ValidationRuleNotNull("subject1")));
List<String> subjects = group.getSubjects();
assertEquals(1, subjects.size());
assertEquals("subject1", subjects.get(0));
subjects = validation.getValidatedSubjects();
assertEquals(1, subjects.size());
assertEquals("subject1", subjects.get(0));
List<ValidationRule> rules = validation.getRules();
assertEquals(1, rules.size());
assertTrue(rules.get(0) instanceof ValidationRuleNotNull);
assertEquals("subject1", rules.get(0).getSubject());
}
public void testAddGroupAddConstraint()
{
Validation validation = new Validation();
ValidationGroup group = validation.addGroup("group").addGroup("mygroup");
ConstrainedProperty property1 = new ConstrainedProperty("subject1").notNull(true).notEmpty(true);
assertSame(group, group.addConstraint(property1));
List<String> subjects = group.getSubjects();
assertEquals(1, subjects.size());
assertEquals("subject1", subjects.get(0));
subjects = validation.getValidatedSubjects();
assertEquals(1, subjects.size());
assertEquals("subject1", subjects.get(0));
List<ValidationRule> rules = validation.getRules();
assertEquals(2, rules.size());
assertTrue(rules.get(0) instanceof ValidationRuleNotNull);
assertEquals("subject1", rules.get(0).getSubject());
assertTrue(rules.get(1) instanceof ValidationRuleNotEmpty);
assertEquals("subject1", rules.get(1).getSubject());
assertEquals(1, validation.getConstrainedProperties().size());
assertSame(property1, validation.getConstrainedProperty("subject1"));
}
public void testClone()
{
Validation validation = new Validation();
ValidationGroup group1 = validation.addGroup("mygroup");
group1.addSubject("subject1");
group1.addSubject("subject2");
group1.addSubject("subject3");
group1.addSubject("subject4");
ValidationGroup group2 = (ValidationGroup)group1.clone();
assertNotSame(group2, group1);
assertSame(group2.getValidation(), group1.getValidation());
assertEquals(group2.getName(), group1.getName());
List<String> subjects1 = group1.getSubjects();
List<String> subjects2 = group2.getSubjects();
assertEquals(subjects2.size(), subjects1.size());
assertEquals(subjects2.get(0), subjects1.get(0));
assertEquals(subjects2.get(1), subjects1.get(1));
assertEquals(subjects2.get(2), subjects1.get(2));
assertEquals(subjects2.get(3), subjects1.get(3));
}
}