aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/test
diff options
context:
space:
mode:
authorMárcio P. Dantas <marciopd@gmail.com>2018-03-26 17:44:28 +0300
committerIlia Motornyi <elmot@vaadin.com>2018-03-26 17:44:28 +0300
commit3c52491a5b44456f94777e6cec71af2a1a70ae46 (patch)
treefd9853a6a92265d99378fd1707c905a933345772 /server/src/test
parentf3e06f4f4157ed4675619608b5da4cd7e5584876 (diff)
downloadvaadin-framework-3c52491a5b44456f94777e6cec71af2a1a70ae46.tar.gz
vaadin-framework-3c52491a5b44456f94777e6cec71af2a1a70ae46.zip
Added method asRequired with a custom required validator to BindingBuilder. (#10724)
Diffstat (limited to 'server/src/test')
-rw-r--r--server/src/test/java/com/vaadin/data/BinderTest.java92
1 files changed, 92 insertions, 0 deletions
diff --git a/server/src/test/java/com/vaadin/data/BinderTest.java b/server/src/test/java/com/vaadin/data/BinderTest.java
index 0163b65b51..5ca469011c 100644
--- a/server/src/test/java/com/vaadin/data/BinderTest.java
+++ b/server/src/test/java/com/vaadin/data/BinderTest.java
@@ -30,6 +30,7 @@ import com.vaadin.shared.ui.ErrorLevel;
import com.vaadin.tests.data.bean.Person;
import com.vaadin.tests.data.bean.Sex;
import com.vaadin.ui.TextField;
+import org.apache.commons.lang.StringUtils;
public class BinderTest extends BinderTestBase<Binder<Person>, Person> {
@@ -502,6 +503,97 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> {
}
@Test
+ public void setRequired_withCustomValidator_fieldGetsRequiredIndicatorAndValidator() {
+ TextField textField = new TextField();
+ textField.setLocale(Locale.CANADA);
+ assertFalse(textField.isRequiredIndicatorVisible());
+
+ BindingBuilder<Person, String> binding = binder.forField(textField);
+ assertFalse(textField.isRequiredIndicatorVisible());
+ AtomicInteger invokes = new AtomicInteger();
+
+ Validator<String> customRequiredValidator = (value, context) -> {
+ invokes.incrementAndGet();
+ if (StringUtils.isBlank(value)) {
+ return ValidationResult.error("Input is required.");
+ }
+ return ValidationResult.ok();
+ };
+ binding.asRequired(customRequiredValidator);
+ assertTrue(textField.isRequiredIndicatorVisible());
+
+ binding.bind(Person::getFirstName, Person::setFirstName);
+ binder.setBean(item);
+ assertNull(textField.getErrorMessage());
+ assertEquals(0, invokes.get());
+
+ textField.setValue(" ");
+ ErrorMessage errorMessage = textField.getErrorMessage();
+ assertNotNull(errorMessage);
+ assertEquals("Input&#32;is&#32;required&#46;", errorMessage.getFormattedHtmlMessage());
+ // validation is done for all changed bindings once.
+ assertEquals(1, invokes.get());
+
+ textField.setValue("value");
+ assertNull(textField.getErrorMessage());
+ assertTrue(textField.isRequiredIndicatorVisible());
+ }
+
+ @Test
+ public void setRequired_withCustomValidator_modelConverterBeforeValidator() {
+ TextField textField = new TextField();
+ textField.setLocale(Locale.CANADA);
+ assertFalse(textField.isRequiredIndicatorVisible());
+
+ Converter<String, String> stringBasicPreProcessingConverter = new Converter<String, String>() {
+ @Override
+ public Result<String> convertToModel(String value, ValueContext context) {
+ if (StringUtils.isBlank(value)) {
+ return Result.ok(null);
+ }
+ return Result.ok(StringUtils.trim(value));
+ }
+
+ @Override
+ public String convertToPresentation(String value, ValueContext context) {
+ if (value == null) {
+ return "";
+ }
+ return value;
+ }
+ };
+
+ AtomicInteger invokes = new AtomicInteger();
+ Validator<String> customRequiredValidator = (value, context) -> {
+ invokes.incrementAndGet();
+ if (value == null) {
+ return ValidationResult.error("Input required.");
+ }
+ return ValidationResult.ok();
+ };
+
+ binder.forField(textField)
+ .withConverter(stringBasicPreProcessingConverter)
+ .asRequired(customRequiredValidator)
+ .bind(Person::getFirstName, Person::setFirstName);
+
+ binder.setBean(item);
+ assertNull(textField.getErrorMessage());
+ assertEquals(0, invokes.get());
+
+ textField.setValue(" ");
+ ErrorMessage errorMessage = textField.getErrorMessage();
+ assertNotNull(errorMessage);
+ assertEquals("Input&#32;required&#46;", errorMessage.getFormattedHtmlMessage());
+ // validation is done for all changed bindings once.
+ assertEquals(1, invokes.get());
+
+ textField.setValue("value");
+ assertNull(textField.getErrorMessage());
+ assertTrue(textField.isRequiredIndicatorVisible());
+ }
+
+ @Test
public void validationStatusHandler_onlyRunForChangedField() {
TextField firstNameField = new TextField();
TextField lastNameField = new TextField();