/*
* Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org
* Use is subject to license terms. See license.txt.
*/
package org.beanfabrics;
import static org.junit.Assert.assertEquals;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import junit.framework.JUnit4TestAdapter;
import org.beanfabrics.model.AbstractPM;
import org.beanfabrics.model.IOperationPM;
import org.beanfabrics.model.IntegerPM;
import org.beanfabrics.model.ListPM;
import org.beanfabrics.model.OperationPM;
import org.beanfabrics.model.PMManager;
import org.beanfabrics.model.TextPM;
import org.beanfabrics.support.Operation;
import org.beanfabrics.support.Property;
import org.beanfabrics.validation.ValidationRule;
import org.beanfabrics.validation.ValidationState;
import org.junit.Before;
import org.junit.Test;
/**
* @author Michael Karneim
*/
public class ValidationTest {
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(ValidationTest.class);
}
private static class EventCounter implements PropertyChangeListener {
int count;
public void propertyChange(PropertyChangeEvent evt) {
count++;
}
}
private static class ProductPM extends AbstractPM {
public int saved = 0;
@Property
public final TextPM name = new TextPM();
@Property
public final IntegerPM volume = new IntegerPM();
@Property
public final ListPM<PartPM> parts = new ListPM<PartPM>();
@Property
public final IOperationPM save = new OperationPM();
public ProductPM() {
PMManager.setup(this);
volume.setMandatory(true);
save.getValidator().add(new ValidationRule() {
public ValidationState validate() {
if (ProductPM.this.isValid() == false) {
return new ValidationState("There are some invalid properties");
}
return null;
}
});
name.setTitle("Name");
volume.setTitle("Volume");
save.setTitle("Save");
}
@Operation
public void save() {
save.check();
saved++;
}
}
private static class PartPM extends AbstractPM {
@Property
public final TextPM name = new TextPM();
public PartPM() {
PMManager.setup(this);
name.setMandatory(true);
}
}
private ProductPM fixture;
public ValidationTest() {
}
@Before
public void setUpFixture()
throws Exception {
fixture = new ProductPM();
fixture.name.setText("Box");
fixture.volume.setInteger(12);
// Populate
PartPM partOne = new PartPM();
partOne.name.setText("body");
fixture.parts.add(partOne);
PartPM partTwo = new PartPM();
partTwo.name.setText("wheel");
fixture.parts.add(partTwo);
}
@Test
public void revalidate() {
EventCounter counter = new EventCounter();
ListPM<IntegerPM> list = new ListPM<IntegerPM>();
list.addPropertyChangeListener(counter);
list.add(new IntegerPM());
assertEquals("list.getAt(0).isValid()", true, list.getAt(0).isValid());
assertEquals("counter.count", 1, counter.count);
list.getAt(0).setText("abc");
assertEquals("list.getAt(0).isValid()", false, list.getAt(0).isValid());
assertEquals("counter.count", 3, counter.count);
}
@Test
public void isValid() {
assertEquals("fixture.isValid()", true, fixture.isValid());
assertEquals("fixture.save.isValid()", true, fixture.save.isValid());
}
@Test
public void isValid2() {
fixture.volume.setInteger(null);
assertEquals("fixture.volume.isValid()", false, fixture.volume.isValid());
assertEquals("fixture.isValid()", false, fixture.isValid());
assertEquals("fixture.save.isValid()", false, fixture.save.isValid());
}
@Test
public void isValid3() {
fixture.parts.getAt(0).name.setText(null);
assertEquals("fixture.parts.getAt(0).name.isValid()", false, fixture.parts.getAt(0).name.isValid());
assertEquals("fixture.isValid()", false, fixture.isValid());
assertEquals("fixture.save.isValid()", false, fixture.save.isValid());
}
}