package org.beanfabrics.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.EventObject; import junit.framework.JUnit4TestAdapter; import org.beanfabrics.event.BnPropertyChangeEvent; import org.beanfabrics.support.Validation; import org.junit.Test; /** * @author Michael Karneim */ public class ValidationTest { static class MyPersonPM extends AbstractPM { TextPM name = new TextPM(); public MyPersonPM() { PMManager.setup(this); } @Validation(path = "name") boolean startsWithM() { return name.getText().toLowerCase().startsWith("m"); } } public static junit.framework.Test suite() { return new JUnit4TestAdapter(ValidationTest.class); } @Test public void validation() { MyPersonPM pm = new MyPersonPM(); pm.name.setText("michael"); assertTrue("pm.name.isValid()", pm.name.isValid()); assertTrue("pm.isValid()", pm.isValid()); pm.name.setText("argh"); assertFalse("pm.name.isValid()", pm.name.isValid()); assertFalse("pm.isValid()", pm.isValid()); } @Test public void fireEvents() { final MyPersonPM pm = new MyPersonPM(); final int[] count = new int[1]; final boolean[] isValid = new boolean[] { true }; pm.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { printEvent("", evt); if ("validationState".equals(evt.getPropertyName())) { count[0]++; isValid[0] = pm.isValid(); } } private void printEvent(String prefix, EventObject evt) { //System.out.println(prefix + evt); if (evt instanceof BnPropertyChangeEvent) { printEvent(prefix + " ", ((BnPropertyChangeEvent)evt).getCause()); } } }); pm.name.setText("michael"); assertTrue("pm.name.isValid()", pm.name.isValid()); assertTrue("pm.isValid()", pm.isValid()); assertEquals("count[0]", 0, count[0]); assertEquals("isValid[0]", true, isValid[0]); pm.name.setText("argh"); assertFalse("pm.name.isValid()", pm.name.isValid()); assertFalse("pm.isValid()", pm.isValid()); assertEquals("count[0]", 1, count[0]); assertEquals("isValid[0]", false, isValid[0]); } }