* </ul>
*/
public void testParentChildDirtyState() {
TestBean formObject = new TestBean();
AbstractFormModel parent = getFormModel(formObject);
ValueModel parentValueModel = parent.getValueModel("simpleProperty");
AbstractFormModel child = getFormModel(formObject);
ValueModel childValueModel = child.getValueModel("booleanProperty");
BooleanStatelistener listener = new BooleanStatelistener(FormModel.DIRTY_PROPERTY);
listener.state = parent.isDirty();
parent.addPropertyChangeListener(FormModel.DIRTY_PROPERTY, listener);
parent.addChild(child);
// check if child->dirty then parent->dirty
assertFalse(listener.state);
childValueModel.setValue(Boolean.TRUE);
assertTrue(listener.state);
parentValueModel.setValue("x");
assertTrue(listener.state);
parentValueModel.setValue(null); // original value
assertTrue(listener.state);
childValueModel.setValue(Boolean.FALSE); //original value
assertFalse(listener.state);
// check if child->clean then (parent->clean or parent->dirty)
parentValueModel.setValue("x");
assertTrue(listener.state);
parentValueModel.setValue(null); // original value
assertFalse(listener.state);
parent.removeChild(child);
// check initial state when adding a child formModel, state should be synchronized at setup and reverted when removing the relation
// check if dirty child sets parent dirty
childValueModel.setValue(Boolean.TRUE);
assertFalse(listener.state);
parent.addChild(child);
assertTrue(listener.state);
parent.removeChild(child);
assertFalse(listener.state);