]> source.dussan.org Git - vaadin-framework.git/commitdiff
Add documentation test for custom converters
authorArtur Signell <artur@vaadin.com>
Mon, 5 Sep 2016 08:26:29 +0000 (11:26 +0300)
committerArtur Signell <artur@vaadin.com>
Mon, 5 Sep 2016 11:12:25 +0000 (14:12 +0300)
Change-Id: I84621b6b568095b1b7f86068fa992dd570f8a103

documentation/datamodel/datamodel-forms.asciidoc
server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java

index 5ec548e8be34256f8d210d1ebb73066b26d2a91a..b86cf8f6722af2778e6a7bb02bbea7329a1dab59 100644 (file)
@@ -282,19 +282,19 @@ Another option is to directly implement the [interfacename]#Converter# interface
 ----
 class MyConverter implements Converter<String, Integer> {
   @Override
-  public Result<Integer> fromField(String fieldValue) {
+  public Result<Integer> convertToModel(String fieldValue, Locale locale) {
     // Produces a converted value or an error
     try {
       // ok is a static helper method that creates a Result
-      return ok(Integer.valueOf(fieldValue));
+      return Result.ok(Integer.valueOf(fieldValue));
     } catch (NumberFormatException e) {
       // error is a static helper method that creates a Result
-      return error("Please enter a number");
+      return Result.error("Please enter a number");
     }
   }
 
   @Override
-  public String toField(Integer integer) {
+  public String convertToPresentation(Integer integer, Locale locale) {
     // Converting to the field type should always succeed,
     // so there is no support for returning an error Result.
     return String.valueOf(integer);
index 02a32135f61dc9d67ef84ec50945afdc3fcbcbb8..c51d41d6a727d01f6455bd21821bb303c7100a05 100644 (file)
@@ -18,6 +18,7 @@ package com.vaadin.data;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.Locale;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.junit.Assert;
@@ -25,6 +26,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import com.vaadin.data.Binder.Binding;
+import com.vaadin.data.util.converter.Converter;
 import com.vaadin.data.util.converter.StringToIntegerConverter;
 import com.vaadin.data.validator.EmailValidator;
 import com.vaadin.server.AbstractErrorMessage;
@@ -508,4 +510,49 @@ public class BinderBookOfVaadinTest {
         Assert.assertEquals(1950, person.getYearOfBirth());
     }
 
+    class MyConverter implements Converter<String, Integer> {
+        @Override
+        public Result<Integer> convertToModel(String fieldValue,
+                Locale locale) {
+            // Produces a converted value or an error
+            try {
+                // ok is a static helper method that creates a Result
+                return Result.ok(Integer.valueOf(fieldValue));
+            } catch (NumberFormatException e) {
+                // error is a static helper method that creates a Result
+                return Result.error("Please enter a number");
+            }
+        }
+
+        @Override
+        public String convertToPresentation(Integer integer, Locale locale) {
+            // Converting to the field type should always succeed,
+            // so there is no support for returning an error Result.
+            return String.valueOf(integer);
+        }
+    }
+
+    @Test
+    public void bindUsingCustomConverter() {
+        Binder<BookPerson> binder = new Binder<>();
+        TextField yearOfBirthField = new TextField();
+
+        // Using the converter
+        binder.forField(yearOfBirthField).withConverter(new MyConverter())
+                .bind(BookPerson::getYearOfBirth, BookPerson::setYearOfBirth);
+
+        BookPerson p = new BookPerson(1500, 12);
+        binder.bind(p);
+
+        yearOfBirthField.setValue("abc");
+        Assert.assertEquals("Please enter a number",
+                binder.validate().get(0).getMessage());
+
+        yearOfBirthField.setValue("123");
+        Assert.assertTrue(binder.validate().isEmpty());
+
+        p.setYearOfBirth(12500);
+        binder.load(p);
+        Assert.assertEquals("12500", yearOfBirthField.getValue());
+    }
 }