diff options
author | Leif Åstrand <legioth@gmail.com> | 2017-01-12 09:22:50 +0200 |
---|---|---|
committer | Pekka Hyvönen <pekka@vaadin.com> | 2017-01-12 09:22:50 +0200 |
commit | 2fd7e13c421114963762ee2e2832cbda6520efa6 (patch) | |
tree | d8aa0e0125bb7e92222eba9e22a3d16e02d3e347 /server/src/test/java | |
parent | c2ad28cc7e26504b2e01bc9bb0f84ceed793cdb0 (diff) | |
download | vaadin-framework-2fd7e13c421114963762ee2e2832cbda6520efa6.tar.gz vaadin-framework-2fd7e13c421114963762ee2e2832cbda6520efa6.zip |
Integrate BeanBinder functionality into Binder (#8096)
* Integrate BeanBinder functionality into Binder
Diffstat (limited to 'server/src/test/java')
-rw-r--r-- | server/src/test/java/com/vaadin/data/BeanBinderPropertySetTest.java | 52 | ||||
-rw-r--r-- | server/src/test/java/com/vaadin/data/BeanBinderTest.java | 39 | ||||
-rw-r--r-- | server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java | 4 | ||||
-rw-r--r-- | server/src/test/java/com/vaadin/data/BinderCustomPropertySetTest.java | 144 | ||||
-rw-r--r-- | server/src/test/java/com/vaadin/data/BinderInstanceFieldTest.java (renamed from server/src/test/java/com/vaadin/data/BeanBinderInstanceFieldTest.java) | 45 | ||||
-rw-r--r-- | server/src/test/java/com/vaadin/data/BinderTest.java | 9 | ||||
-rw-r--r-- | server/src/test/java/com/vaadin/data/Jsr303Test.java | 3 |
7 files changed, 236 insertions, 60 deletions
diff --git a/server/src/test/java/com/vaadin/data/BeanBinderPropertySetTest.java b/server/src/test/java/com/vaadin/data/BeanBinderPropertySetTest.java new file mode 100644 index 0000000000..d11541fb0c --- /dev/null +++ b/server/src/test/java/com/vaadin/data/BeanBinderPropertySetTest.java @@ -0,0 +1,52 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.data; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.data.provider.bov.Person; + +public class BeanBinderPropertySetTest { + @Test + public void testSerializeDeserialize() throws Exception { + BinderPropertyDefinition<Person, ?> definition = BeanBinderPropertySet + .get(Person.class).getProperty("born") + .orElseThrow(RuntimeException::new); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(bos); + out.writeObject(definition); + out.flush(); + + ObjectInputStream inputStream = new ObjectInputStream( + new ByteArrayInputStream(bos.toByteArray())); + + BinderPropertyDefinition<Person, ?> deserializedDefinition = (BinderPropertyDefinition<Person, ?>) inputStream + .readObject(); + + ValueProvider<Person, ?> getter = deserializedDefinition.getGetter(); + Person person = new Person("Milennial", 2000); + Integer age = (Integer) getter.apply(person); + + Assert.assertEquals(Integer.valueOf(2000), age); + } +} diff --git a/server/src/test/java/com/vaadin/data/BeanBinderTest.java b/server/src/test/java/com/vaadin/data/BeanBinderTest.java index 3433aee1a8..6bd53044b7 100644 --- a/server/src/test/java/com/vaadin/data/BeanBinderTest.java +++ b/server/src/test/java/com/vaadin/data/BeanBinderTest.java @@ -3,23 +3,19 @@ package com.vaadin.data; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; -import java.lang.reflect.Method; import java.util.List; import java.util.Set; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import com.vaadin.data.BeanBinder.BeanBindingBuilder; -import com.vaadin.data.Binder.BindingBuilder; import com.vaadin.data.converter.StringToIntegerConverter; import com.vaadin.tests.data.bean.BeanToValidate; import com.vaadin.ui.CheckBoxGroup; import com.vaadin.ui.TextField; public class BeanBinderTest - extends BinderTestBase<BeanBinder<BeanToValidate>, BeanToValidate> { + extends BinderTestBase<Binder<BeanToValidate>, BeanToValidate> { private enum TestEnum { } @@ -52,7 +48,7 @@ public class BeanBinderTest @Before public void setUp() { - binder = new BeanBinder<>(BeanToValidate.class); + binder = new Binder<>(BeanToValidate.class); item = new BeanToValidate(); item.setFirstname("Johannes"); item.setAge(32); @@ -60,11 +56,10 @@ public class BeanBinderTest @Test public void bindInstanceFields_parameters_type_erased() { - BeanBinder<TestBean> otherBinder = new BeanBinder<>(TestBean.class); + Binder<TestBean> otherBinder = new Binder<>(TestBean.class); TestClass testClass = new TestClass(); otherBinder.forField(testClass.number) - .withConverter(new StringToIntegerConverter("")) - .bind("number"); + .withConverter(new StringToIntegerConverter("")).bind("number"); // Should correctly bind the enum field without throwing otherBinder.bindInstanceFields(testClass); @@ -72,7 +67,7 @@ public class BeanBinderTest @Test public void bindInstanceFields_automatically_binds_incomplete_forMemberField_bindings() { - BeanBinder<TestBean> otherBinder = new BeanBinder<>(TestBean.class); + Binder<TestBean> otherBinder = new Binder<>(TestBean.class); TestClass testClass = new TestClass(); otherBinder.forMemberField(testClass.number) @@ -87,7 +82,7 @@ public class BeanBinderTest @Test(expected = IllegalStateException.class) public void bindInstanceFields_does_not_automatically_bind_incomplete_forField_bindings() { - BeanBinder<TestBean> otherBinder = new BeanBinder<>(TestBean.class); + Binder<TestBean> otherBinder = new Binder<>(TestBean.class); TestClass testClass = new TestClass(); otherBinder.forField(testClass.number) @@ -100,7 +95,7 @@ public class BeanBinderTest @Test(expected = IllegalStateException.class) public void incomplete_forMemberField_bindings() { - BeanBinder<TestBean> otherBinder = new BeanBinder<>(TestBean.class); + Binder<TestBean> otherBinder = new Binder<>(TestBean.class); TestClass testClass = new TestClass(); otherBinder.forMemberField(testClass.number) @@ -262,24 +257,4 @@ public class BeanBinderTest assertSame(field, errors.get(0).getField()); assertEquals(message, errors.get(0).getMessage().get()); } - - @Test - public void beanBindingChainingMethods() { - Method[] methods = BeanBindingBuilder.class.getMethods(); - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - try { - Method actualMethod = BeanBindingBuilder.class.getMethod( - method.getName(), method.getParameterTypes()); - - Assert.assertNotSame( - actualMethod + " should be overridden in " - + BeanBindingBuilder.class - + " with more specific return type ", - BindingBuilder.class, actualMethod.getReturnType()); - } catch (NoSuchMethodException | SecurityException e) { - throw new RuntimeException(e); - } - } - } } diff --git a/server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java b/server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java index f1d226bf20..7d2e6bd304 100644 --- a/server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java +++ b/server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java @@ -461,7 +461,7 @@ public class BinderBookOfVaadinTest { @Test public void binder_saveIfValid() { - BeanBinder<BookPerson> binder = new BeanBinder<>(BookPerson.class); + Binder<BookPerson> binder = new Binder<>(BookPerson.class); // Phone or email has to be specified for the bean Validator<BookPerson> phoneOrEmail = Validator.from( @@ -585,7 +585,7 @@ public class BinderBookOfVaadinTest { public void withBinderStatusLabelExample() { Label formStatusLabel = new Label(); - BeanBinder<BookPerson> binder = new BeanBinder<>(BookPerson.class); + Binder<BookPerson> binder = new Binder<>(BookPerson.class); binder.setStatusLabel(formStatusLabel); diff --git a/server/src/test/java/com/vaadin/data/BinderCustomPropertySetTest.java b/server/src/test/java/com/vaadin/data/BinderCustomPropertySetTest.java new file mode 100644 index 0000000000..3d85084bc6 --- /dev/null +++ b/server/src/test/java/com/vaadin/data/BinderCustomPropertySetTest.java @@ -0,0 +1,144 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.data; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Stream; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.data.Binder.BindingBuilder; +import com.vaadin.server.Setter; +import com.vaadin.ui.TextField; + +public class BinderCustomPropertySetTest { + public static class MapPropertyDefinition + implements BinderPropertyDefinition<Map<String, String>, String> { + + private MapPropertySet propertySet; + private String name; + + public MapPropertyDefinition(MapPropertySet propertySet, String name) { + this.propertySet = propertySet; + this.name = name; + } + + @Override + public ValueProvider<Map<String, String>, String> getGetter() { + return map -> map.get(name); + } + + @Override + public Optional<Setter<Map<String, String>, String>> getSetter() { + return Optional.of((map, value) -> { + if (value == null) { + map.remove(name); + } else { + map.put(name, value); + } + }); + } + + @Override + public Class<String> getType() { + return String.class; + } + + @Override + public BindingBuilder<Map<String, String>, String> beforeBind( + BindingBuilder<Map<String, String>, String> originalBuilder) { + return originalBuilder; + } + + @Override + public String getName() { + return name; + } + + @Override + public BinderPropertySet<Map<String, String>> getPropertySet() { + return propertySet; + } + + } + + public static class MapPropertySet + implements BinderPropertySet<Map<String, String>> { + @Override + public Stream<BinderPropertyDefinition<Map<String, String>, ?>> getProperties() { + return Stream.of("one", "two", "three").map(this::createProperty); + } + + @Override + public Optional<BinderPropertyDefinition<Map<String, String>, ?>> getProperty( + String name) { + return Optional.of(createProperty(name)); + } + + private BinderPropertyDefinition<Map<String, String>, ?> createProperty( + String name) { + return new MapPropertyDefinition(this, name); + } + } + + public static class InstanceFields { + private TextField one; + private TextField another; + } + + @Test + public void testBindByString() { + TextField field = new TextField(); + Map<String, String> map = new HashMap<>(); + Binder<Map<String, String>> binder = Binder + .withPropertySet(new MapPropertySet()); + + binder.bind(field, "key"); + binder.setBean(map); + + field.setValue("value"); + Assert.assertEquals( + "Field value should propagate to the corresponding key in the map", + "value", map.get("key")); + } + + @Test + public void testBindInstanceFields() { + Map<String, String> map = new HashMap<>(); + Binder<Map<String, String>> binder = Binder + .withPropertySet(new MapPropertySet()); + InstanceFields instanceFields = new InstanceFields(); + + binder.bindInstanceFields(instanceFields); + + Assert.assertNotNull( + "Field corresponding to supported property name should be bound", + instanceFields.one); + Assert.assertNull( + "Field corresponding to unsupported property name should be ignored", + instanceFields.another); + + binder.setBean(map); + + instanceFields.one.setValue("value"); + Assert.assertEquals( + "Field value should propagate to the corresponding key in the map", + "value", map.get("one")); + } +} diff --git a/server/src/test/java/com/vaadin/data/BeanBinderInstanceFieldTest.java b/server/src/test/java/com/vaadin/data/BinderInstanceFieldTest.java index 9ed2e8edda..de58be5e42 100644 --- a/server/src/test/java/com/vaadin/data/BeanBinderInstanceFieldTest.java +++ b/server/src/test/java/com/vaadin/data/BinderInstanceFieldTest.java @@ -30,13 +30,7 @@ import com.vaadin.ui.DateField; import com.vaadin.ui.FormLayout; import com.vaadin.ui.TextField; -/** - * Unit tests for {@link BeanBinder#bindInstanceFields(Object)} method. - * - * @author Vaadin Ltd - * - */ -public class BeanBinderInstanceFieldTest { +public class BinderInstanceFieldTest { public static class BindAllFields extends FormLayout { private TextField firstName; @@ -132,7 +126,7 @@ public class BeanBinderInstanceFieldTest { @Test public void bindInstanceFields_bindAllFields() { BindAllFields form = new BindAllFields(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); Person person = new Person(); @@ -151,10 +145,17 @@ public class BeanBinderInstanceFieldTest { Assert.assertEquals(form.birthDate.getValue(), person.getBirthDate()); } + @Test(expected = IllegalStateException.class) + public void bind_instanceFields_noArgsConstructor() { + BindAllFields form = new BindAllFields(); + Binder<Person> binder = new Binder<>(); + binder.bindInstanceFields(form); + } + @Test public void bindInstanceFields_bindOnlyOneFields() { BindOnlyOneField form = new BindOnlyOneField(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); Person person = new Person(); @@ -174,7 +175,7 @@ public class BeanBinderInstanceFieldTest { @Test public void bindInstanceFields_bindNotHasValueField_fieldIsNull() { BindNoHasValueField form = new BindNoHasValueField(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); Person person = new Person(); @@ -188,7 +189,7 @@ public class BeanBinderInstanceFieldTest { @Test public void bindInstanceFields_genericField() { BindGenericField form = new BindGenericField(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); Person person = new Person(); @@ -206,49 +207,49 @@ public class BeanBinderInstanceFieldTest { @Test(expected = IllegalStateException.class) public void bindInstanceFields_genericFieldWithWrongTypeParameter() { BindGenericWrongTypeParameterField form = new BindGenericWrongTypeParameterField(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); } @Test(expected = IllegalStateException.class) public void bindInstanceFields_generic() { BindGeneric<String> form = new BindGeneric<>(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); } @Test(expected = IllegalStateException.class) public void bindInstanceFields_rawFieldType() { BindRaw form = new BindRaw(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); } @Test(expected = IllegalStateException.class) public void bindInstanceFields_abstractFieldType() { BindAbstract form = new BindAbstract(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); } @Test(expected = IllegalStateException.class) public void bindInstanceFields_noInstantiatableFieldType() { BindNonInstantiatableType form = new BindNonInstantiatableType(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); } @Test(expected = IllegalStateException.class) public void bindInstanceFields_wrongFieldType() { BindWrongTypeParameterField form = new BindWrongTypeParameterField(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); } @Test public void bindInstanceFields_complexGenericHierarchy() { BindComplextHierarchyGenericType form = new BindComplextHierarchyGenericType(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); Person person = new Person(); @@ -266,7 +267,7 @@ public class BeanBinderInstanceFieldTest { @Test public void bindInstanceFields_bindNotHasValueField_fieldIsNotReplaced() { BindNoHasValueField form = new BindNoHasValueField(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); String name = "foo"; form.firstName = name; @@ -284,7 +285,7 @@ public class BeanBinderInstanceFieldTest { @Test public void bindInstanceFields_bindAllFieldsUsingAnnotations() { BindFieldsUsingAnnotation form = new BindFieldsUsingAnnotation(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.bindInstanceFields(form); Person person = new Person(); @@ -308,7 +309,7 @@ public class BeanBinderInstanceFieldTest { @Test public void bindInstanceFields_bindNotBoundFieldsOnly_customBindingIsNotReplaced() { BindAllFields form = new BindAllFields(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); TextField name = new TextField(); form.firstName = name; @@ -343,7 +344,7 @@ public class BeanBinderInstanceFieldTest { @Test public void bindInstanceFields_fieldsAreConfigured_customBindingIsNotReplaced() { BindOnlyOneField form = new BindOnlyOneField(); - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); TextField name = new TextField(); form.firstName = name; diff --git a/server/src/test/java/com/vaadin/data/BinderTest.java b/server/src/test/java/com/vaadin/data/BinderTest.java index 6fe139b7ad..1994821db0 100644 --- a/server/src/test/java/com/vaadin/data/BinderTest.java +++ b/server/src/test/java/com/vaadin/data/BinderTest.java @@ -285,7 +285,7 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> { @Test public void beanBinder_nullRepresentationIsNotDisabled() { - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.forField(nameField).bind("firstName"); Person person = new Person(); @@ -297,7 +297,7 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> { @Test public void beanBinder_withConverter_nullRepresentationIsNotDisabled() { String customNullPointerRepresentation = "foo"; - BeanBinder<Person> binder = new BeanBinder<>(Person.class); + Binder<Person> binder = new Binder<>(Person.class); binder.forField(nameField) .withConverter(value -> value, value -> value == null ? customNullPointerRepresentation : value) @@ -426,4 +426,9 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> { firstNameField.setValue(""); Assert.assertEquals(6, invokes.get()); } + + @Test(expected = IllegalStateException.class) + public void noArgsConstructor_stringBind_throws() { + binder.bind(new TextField(), "firstName"); + } }
\ No newline at end of file diff --git a/server/src/test/java/com/vaadin/data/Jsr303Test.java b/server/src/test/java/com/vaadin/data/Jsr303Test.java index 016018a6b3..43b03feb97 100644 --- a/server/src/test/java/com/vaadin/data/Jsr303Test.java +++ b/server/src/test/java/com/vaadin/data/Jsr303Test.java @@ -84,8 +84,7 @@ public class Jsr303Test { public void execute() { Assert.assertFalse(BeanUtil.checkBeanValidationAvailable()); - BeanBinder<BeanToValidate> binder = new BeanBinder<>( - BeanToValidate.class); + Binder<BeanToValidate> binder = new Binder<>(BeanToValidate.class); BeanToValidate item = new BeanToValidate(); String name = "Johannes"; item.setFirstname(name); |