diff options
author | Aleksi Hietanen <aleksi@vaadin.com> | 2017-02-03 13:40:54 +0200 |
---|---|---|
committer | Pekka Hyvönen <pekka@vaadin.com> | 2017-02-03 13:40:54 +0200 |
commit | 560d1615408b0ff85439f891c0bb32c84807bd3e (patch) | |
tree | e817140ea7bed012b1e773493e10cb76e7472d13 /server/src/test/java | |
parent | 0a325d95a588010a6d5c511afddb8db8048d50ee (diff) | |
download | vaadin-framework-560d1615408b0ff85439f891c0bb32c84807bd3e.tar.gz vaadin-framework-560d1615408b0ff85439f891c0bb32c84807bd3e.zip |
Add isValid to Binder (#8274)
* Add isValid to Binder
isValid enables you to check the current validation
status of a given Binder, without firing events or invoking
handlers.
This patch also clarifies the javadocs of StatusChangeEvents'
hasValidationErrors.
* Throw in Binder.isValid if no bean is set and bean validators exist
* Add test cases to BinderTest
Diffstat (limited to 'server/src/test/java')
-rw-r--r-- | server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java | 29 | ||||
-rw-r--r-- | server/src/test/java/com/vaadin/data/BinderTest.java | 52 |
2 files changed, 79 insertions, 2 deletions
diff --git a/server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java b/server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java index 59ca890740..f36a357617 100644 --- a/server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java +++ b/server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java @@ -724,7 +724,7 @@ public class BinderBookOfVaadinTest { AtomicBoolean eventIsFired = new AtomicBoolean(false); binder.addStatusChangeListener(event -> { - boolean isValid = !event.hasValidationErrors(); + boolean isValid = event.getBinder().isValid(); boolean hasChanges = event.getBinder().hasChanges(); eventIsFired.set(true); @@ -782,7 +782,7 @@ public class BinderBookOfVaadinTest { AtomicBoolean eventIsFired = new AtomicBoolean(false); binder.addStatusChangeListener(event -> { - boolean isValid = !event.hasValidationErrors(); + boolean isValid = event.getBinder().isValid(); boolean hasChanges = event.getBinder().hasChanges(); eventIsFired.set(true); @@ -824,6 +824,31 @@ public class BinderBookOfVaadinTest { verifyEventIsFired(eventIsFired); } + @Test + public void statusChangeListener_multipleRequiredFields() { + Button saveButton = new Button(); + + binder.addStatusChangeListener(event -> { + boolean isValid = event.getBinder().isValid(); + boolean hasChanges = event.getBinder().hasChanges(); + + saveButton.setEnabled(hasChanges && isValid); + }); + + binder.forField(field).asRequired("").bind(BookPerson::getLastName, + BookPerson::setLastName); + binder.forField(emailField).asRequired("").bind(BookPerson::getEmail, + BookPerson::setEmail); + + Assert.assertFalse(saveButton.isEnabled()); + field.setValue("not empty"); + Assert.assertFalse(saveButton.isEnabled()); + emailField.setValue("not empty"); + Assert.assertTrue(saveButton.isEnabled()); + field.clear(); + Assert.assertFalse(saveButton.isEnabled()); + } + private void verifyEventIsFired(AtomicBoolean flag) { Assert.assertTrue(flag.get()); flag.set(false); diff --git a/server/src/test/java/com/vaadin/data/BinderTest.java b/server/src/test/java/com/vaadin/data/BinderTest.java index e07aee9632..8dc4c76c3b 100644 --- a/server/src/test/java/com/vaadin/data/BinderTest.java +++ b/server/src/test/java/com/vaadin/data/BinderTest.java @@ -494,4 +494,56 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> { Assert.assertFalse(ageField.isReadOnly()); } + @Test + public void isValidTest_bound_binder() { + binder.forField(nameField) + .withValidator( + Validator.from( + name -> !name.equals("fail field validation"), + "")) + .bind(Person::getFirstName, Person::setFirstName); + + binder.withValidator( + Validator.from(person -> !person.getFirstName() + .equals("fail bean validation"), "")); + + binder.setBean(item); + + Assert.assertTrue(binder.isValid()); + + nameField.setValue("fail field validation"); + Assert.assertFalse(binder.isValid()); + + nameField.setValue(""); + Assert.assertTrue(binder.isValid()); + + nameField.setValue("fail bean validation"); + Assert.assertFalse(binder.isValid()); + } + + @Test + public void isValidTest_unbound_binder() { + binder.forField(nameField) + .withValidator(Validator.from( + name -> !name.equals("fail field validation"), "")) + .bind(Person::getFirstName, Person::setFirstName); + + Assert.assertTrue(binder.isValid()); + + nameField.setValue("fail field validation"); + Assert.assertFalse(binder.isValid()); + + nameField.setValue(""); + Assert.assertTrue(binder.isValid()); + } + + @Test(expected = IllegalStateException.class) + public void isValidTest_unbound_binder_throws_with_bean_level_validation() { + binder.forField(nameField).bind(Person::getFirstName, + Person::setFirstName); + binder.withValidator(Validator.from( + person -> !person.getFirstName().equals("fail bean validation"), + "")); + binder.isValid(); + } }
\ No newline at end of file |