public void testValidatorState() {
UIInput input = new UIInput();
LengthValidator l1 = new LengthValidator();
LengthValidator l2 = new LengthValidator();
input.addValidator(l1);
input.addValidator(l2);
l1.setMinimum(1);
l2.setMinimum(2);
input.markInitialState();
assertTrue(input.initialStateMarked());
assertTrue(l1.initialStateMarked());
assertTrue(l2.initialStateMarked());
Object state = input.saveState(facesContext);
assertTrue(state instanceof Object[]);
assertTrue(((Object[]) state)[3] == null);
input = new UIInput();
l1 = new LengthValidator();
l2 = new LengthValidator();
input.addValidator(l1);
input.addValidator(l2);
l1.setMinimum(1);
l2.setMinimum(2);
input.markInitialState();
l2.setMinimum(3);
assertTrue(input.initialStateMarked());
assertTrue(l1.initialStateMarked());
assertTrue(!l2.initialStateMarked());
state = input.saveState(facesContext);
assertTrue(state instanceof Object[]);
Object[] validatorState = (Object[]) ((Object[]) state)[3];
assertNotNull(validatorState);
assertNull(validatorState[0]);
assertNotNull(validatorState[1]);
assertTrue(!(validatorState[1] instanceof StateHolderSaver));
input = new UIInput();
l1 = new LengthValidator();
l2 = new LengthValidator();
l1.setMinimum(1);
l2.setMinimum(2);
input.addValidator(l1);
input.addValidator(l2);
input.restoreState(facesContext, state);
assertTrue(l1.getMinimum() == 1);
assertTrue(l2.getMinimum() == 3);
assertTrue(input.getValidators().length == 2);
input = new UIInput();
l1 = new LengthValidator();
l2 = new LengthValidator();
input.addValidator(l1);
input.addValidator(l2);
l1.setMinimum(1);
l2.setMinimum(2);
input.markInitialState();
LengthValidator l3 = new LengthValidator();
l3.setMinimum(3);
input.addValidator(l3);
state = input.saveState(facesContext);
assertNotNull(validatorState);
assertTrue(state instanceof Object[]);
validatorState = (Object[]) ((Object[]) state)[3];
assertNotNull(validatorState);
assertTrue(validatorState.length == 3);
assertNotNull(validatorState[0]);
assertNotNull(validatorState[1]);
assertNotNull(validatorState[2]);
assertTrue(validatorState[0] instanceof StateHolderSaver);
assertTrue(validatorState[1] instanceof StateHolderSaver);
assertTrue(validatorState[2] instanceof StateHolderSaver);
input = new UIInput();
l1 = new LengthValidator();
l2 = new LengthValidator();
l3 = new LengthValidator();
LengthValidator l4 = new LengthValidator();
input.addValidator(l1);
input.addValidator(l2);
input.addValidator(l3);
input.addValidator(l4);
l1.setMinimum(100);
l2.setMinimum(101);
l3.setMinimum(102);
l4.setMinimum(103);
assertTrue(input.getValidators().length == 4);
input.markInitialState();
input.restoreState(facesContext, state);
assertTrue(input.getValidators().length == 3);
Validator[] validators = input.getValidators();
for (int i = 0, len = validators.length; i < len; i++) {
LengthValidator v = (LengthValidator) validators[i];
assertTrue(v.getMinimum() == (i + 1));
}
}