From 5cbc384fb2514546e4fc1f55b4516b381d2ae194 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Wed, 27 Oct 2021 20:14:29 +0300 Subject: fix: avoid ConcurrentModificationException in Binder (#12458) --- .../src/test/java/com/vaadin/data/BinderTest.java | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'server/src/test') diff --git a/server/src/test/java/com/vaadin/data/BinderTest.java b/server/src/test/java/com/vaadin/data/BinderTest.java index 9f20f0b246..999142a440 100644 --- a/server/src/test/java/com/vaadin/data/BinderTest.java +++ b/server/src/test/java/com/vaadin/data/BinderTest.java @@ -1542,6 +1542,29 @@ public class BinderTest extends BinderTestBase, Person> { } @Test + public void invalidUsage_modifyFieldsInsideValidator_binderDoesNotThrow() { + TextField field = new TextField(); + + AtomicBoolean validatorIsExecuted = new AtomicBoolean(); + binder.forField(field).asRequired().withValidator((val, context) -> { + nameField.setValue("foo"); + ageField.setValue("bar"); + validatorIsExecuted.set(true); + return ValidationResult.ok(); + }).bind(Person::getEmail, Person::setEmail); + + binder.forField(nameField).bind(Person::getFirstName, + Person::setFirstName); + binder.forField(ageField).bind(Person::getLastName, + Person::setLastName); + + binder.setBean(new Person()); + + field.setValue("baz"); + // mostly self control, the main check is: not exception is thrown + assertTrue(validatorIsExecuted.get()); + } + public void setBean_readOnlyBinding_propertyBinding_valueIsNotUpdated() { Binder binder = new Binder<>(ExampleBean.class); -- cgit v1.2.3