package org.beanfabrics.support; import static junit.framework.Assert.assertEquals; import junit.framework.JUnit4TestAdapter; import org.beanfabrics.model.AbstractPM; import org.beanfabrics.model.IntegerPM; import org.beanfabrics.model.PMManager; import org.beanfabrics.model.TextPM; import org.junit.Test; public class OnChangeSupportTest { public static junit.framework.Test suite() { return new JUnit4TestAdapter(OnChangeSupportTest.class); } private static class SomeClassPM extends AbstractPM { TextPM name = new TextPM("Hello"); IntegerPM lengthOfName = new IntegerPM(0); int callCountOfUpdateLengthOfName = 0; TextPM note = new TextPM(); int callCountOfNoteHasChanged = 0; public SomeClassPM() { PMManager.setup(this); } @OnChange(path = "name") public void updateLengthOfName() { callCountOfUpdateLengthOfName++; lengthOfName.setInteger(name.getText().length()); } @OnChange(path = "note") public void noteHasChanged() { callCountOfNoteHasChanged++; } } @Test public void onCangeMethodIsNotCalledOnSetup() { SomeClassPM pm = new SomeClassPM(); // Name assertEquals("pm.callCountOfUpdateLengthOfName", 0, pm.callCountOfUpdateLengthOfName); assertEquals("pm.lengthOfName.getInteger()", 0, (int)pm.lengthOfName.getInteger()); // Note assertEquals("pm.callCountOfNoteHasChanged", 0, pm.callCountOfNoteHasChanged); } @Test public void onCangeMethodIsCalledWhenPropertyHasCanged() { SomeClassPM pm = new SomeClassPM(); // Name pm.name.setText("Bye"); assertEquals("pm.callCountOfUpdateLengthOfName", 1, pm.callCountOfUpdateLengthOfName); assertEquals("pm.lengthOfName.getInteger()", 3, (int)pm.lengthOfName.getInteger()); // Note assertEquals("pm.callCountOfNoteHasChanged", 0, pm.callCountOfNoteHasChanged); pm.note.setText("Some note"); assertEquals("pm.callCountOfNoteHasChanged", 1, pm.callCountOfNoteHasChanged); } }