package com.vaadin.v7.tests.server.component.fieldgroup; import static org.junit.Assert.assertEquals; import org.junit.Assert; import org.junit.Test; import com.vaadin.annotations.PropertyId; import com.vaadin.v7.data.Item; import com.vaadin.v7.data.fieldgroup.BeanFieldGroup; import com.vaadin.v7.data.fieldgroup.FieldGroup.CommitException; import com.vaadin.v7.data.util.BeanItem; import com.vaadin.v7.ui.Field; import com.vaadin.v7.ui.RichTextArea; import com.vaadin.v7.ui.TextField; public class BeanFieldGroupTest { private static final String DEFAULT_FOR_BASIC_FIELD = "default"; public static class MyBean { private String basicField = DEFAULT_FOR_BASIC_FIELD; private String anotherField; private MyNestedBean nestedBean = new MyNestedBean(); public MyNestedBean getNestedBean() { return nestedBean; } /** * @return the basicField */ public String getBasicField() { return basicField; } /** * @param basicField * the basicField to set */ public void setBasicField(String basicField) { this.basicField = basicField; } /** * @return the anotherField */ public String getAnotherField() { return anotherField; } /** * @param anotherField * the anotherField to set */ public void setAnotherField(String anotherField) { this.anotherField = anotherField; } } public static class MyNestedBean { private String hello = "Hello world"; public String getHello() { return hello; } } public static class ViewStub { TextField basicField = new TextField(); @PropertyId("anotherField") TextField boundWithAnnotation = new TextField(); } @SuppressWarnings("unchecked") @Test public void testStaticBindingHelper() { MyBean myBean = new MyBean(); ViewStub viewStub = new ViewStub(); BeanFieldGroup<MyBean> bindFields = BeanFieldGroup .bindFieldsUnbuffered(myBean, viewStub); Field<String> field = (Field<String>) bindFields.getField("basicField"); Assert.assertEquals(DEFAULT_FOR_BASIC_FIELD, myBean.basicField); field.setValue("Foo"); Assert.assertEquals("Foo", myBean.basicField); field = (Field<String>) bindFields.getField("anotherField"); field.setValue("Foo"); Assert.assertEquals("Foo", myBean.anotherField); } @SuppressWarnings("unchecked") @Test public void testStaticBufferedBindingHelper() throws CommitException { MyBean myBean = new MyBean(); ViewStub viewStub = new ViewStub(); BeanFieldGroup<MyBean> bindFields = BeanFieldGroup .bindFieldsBuffered(myBean, viewStub); Field<String> basicField = (Field<String>) bindFields .getField("basicField"); basicField.setValue("Foo"); Assert.assertEquals(DEFAULT_FOR_BASIC_FIELD, myBean.basicField); Field<String> anotherField = (Field<String>) bindFields .getField("anotherField"); anotherField.setValue("Foo"); Assert.assertNull(myBean.anotherField); bindFields.commit(); Assert.assertEquals("Foo", myBean.basicField); Assert.assertEquals("Foo", myBean.anotherField); } @Test public void buildAndBindNestedProperty() { MyBean bean = new MyBean(); BeanFieldGroup<MyBean> bfg = new BeanFieldGroup<MyBean>(MyBean.class); bfg.setItemDataSource(bean); Field<?> helloField = bfg.buildAndBind("Hello string", "nestedBean.hello"); assertEquals(bean.nestedBean.hello, helloField.getValue().toString()); } @Test public void buildAndBindNestedRichTextAreaProperty() { MyBean bean = new MyBean(); BeanFieldGroup<MyBean> bfg = new BeanFieldGroup<MyBean>(MyBean.class); bfg.setItemDataSource(bean); RichTextArea helloField = bfg.buildAndBind("Hello string", "nestedBean.hello", RichTextArea.class); assertEquals(bean.nestedBean.hello, helloField.getValue().toString()); } @Test public void setDataSource_nullBean_nullBeanIsSetInDataSource() { BeanFieldGroup<MyBean> group = new BeanFieldGroup<MyBean>(MyBean.class); group.setItemDataSource((MyBean) null); BeanItem<MyBean> dataSource = group.getItemDataSource(); Assert.assertNull("Data source is null for null bean", dataSource); } @Test public void setDataSource_nullItem_nullDataSourceIsSet() { BeanFieldGroup<MyBean> group = new BeanFieldGroup<MyBean>(MyBean.class); group.setItemDataSource((Item) null); BeanItem<MyBean> dataSource = group.getItemDataSource(); Assert.assertNull("Group returns not null data source", dataSource); } }