aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/test/java
diff options
context:
space:
mode:
authorLeif Åstrand <legioth@gmail.com>2017-01-12 09:22:50 +0200
committerPekka Hyvönen <pekka@vaadin.com>2017-01-12 09:22:50 +0200
commit2fd7e13c421114963762ee2e2832cbda6520efa6 (patch)
treed8aa0e0125bb7e92222eba9e22a3d16e02d3e347 /server/src/test/java
parentc2ad28cc7e26504b2e01bc9bb0f84ceed793cdb0 (diff)
downloadvaadin-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.java52
-rw-r--r--server/src/test/java/com/vaadin/data/BeanBinderTest.java39
-rw-r--r--server/src/test/java/com/vaadin/data/BinderBookOfVaadinTest.java4
-rw-r--r--server/src/test/java/com/vaadin/data/BinderCustomPropertySetTest.java144
-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.java9
-rw-r--r--server/src/test/java/com/vaadin/data/Jsr303Test.java3
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);