]> source.dussan.org Git - vaadin-framework.git/commitdiff
A basic semi generic Form test
authorArtur Signell <artur.signell@itmill.com>
Thu, 6 Oct 2011 13:28:13 +0000 (13:28 +0000)
committerArtur Signell <artur.signell@itmill.com>
Thu, 6 Oct 2011 13:28:13 +0000 (13:28 +0000)
svn changeset:21605/svn branch:6.7

tests/testbench/com/vaadin/tests/components/form/FormTest.java [new file with mode: 0644]

diff --git a/tests/testbench/com/vaadin/tests/components/form/FormTest.java b/tests/testbench/com/vaadin/tests/components/form/FormTest.java
new file mode 100644 (file)
index 0000000..4b33b6d
--- /dev/null
@@ -0,0 +1,242 @@
+package com.vaadin.tests.components.form;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
+import com.vaadin.tests.components.abstractfield.AbstractFieldTest;
+import com.vaadin.tests.components.select.AbstractSelectTestCase;
+import com.vaadin.tests.util.Person;
+import com.vaadin.tests.util.Product;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.FormFieldFactory;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.Layout.AlignmentHandler;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class FormTest extends AbstractFieldTest<Form> {
+
+    private Command<Form, String> footerWidthCommand = new Command<Form, String>() {
+
+        public void execute(Form c, String value, Object data) {
+            Layout footer = c.getFooter();
+            if (footer != null) {
+                footer.setWidth(value);
+            }
+
+        }
+    };
+    private Command<Form, String> footerHeightCommand = new Command<Form, String>() {
+
+        public void execute(Form c, String value, Object data) {
+            Layout footer = c.getFooter();
+            if (footer != null) {
+                footer.setHeight(value);
+            }
+
+        }
+    };
+
+    private Command<Form, Class<? extends Layout>> formLayoutCommand = new Command<Form, Class<? extends Layout>>() {
+
+        public void execute(Form c, Class<? extends Layout> value, Object data) {
+            if (value == null) {
+                c.setLayout(null);
+            } else {
+                try {
+                    Layout l = value.newInstance();
+                    l.setSizeUndefined();
+                    if (l instanceof GridLayout) {
+                        ((GridLayout) l).setColumns(2);
+                    }
+                    c.setLayout(l);
+                } catch (Exception e) {
+                    log("Error creating footer of type " + value.getName()
+                            + ": " + e.getMessage());
+                    e.printStackTrace();
+                }
+            }
+        }
+
+    };
+    private Command<Form, Class<? extends Layout>> formFooterCommand = new Command<Form, Class<? extends Layout>>() {
+
+        public void execute(Form c, Class<? extends Layout> value, Object data) {
+            if (value == null) {
+                c.setFooter(null);
+            } else {
+                try {
+                    c.setFooter(value.newInstance());
+                    Button b = new Button("Just a button");
+                    c.getFooter().addComponent(b);
+                } catch (Exception e) {
+                    log("Error creating footer of type " + value.getName()
+                            + ": " + e.getMessage());
+                    e.printStackTrace();
+                }
+            }
+
+        }
+    };
+    private Command<Form, Item> formItemDataSourceCommand = new Command<Form, Item>() {
+
+        public void execute(Form c, Item value, Object data) {
+            c.setItemDataSource(value);
+        }
+    };
+    private LinkedHashMap<String, Class<? extends Layout>> layoutOptions = new LinkedHashMap<String, Class<? extends Layout>>();
+    {
+        layoutOptions.put("VerticalLayout", VerticalLayout.class);
+        layoutOptions.put("HorizontalLayout", HorizontalLayout.class);
+        layoutOptions.put("GridLayout", GridLayout.class);
+        layoutOptions.put("CSSLayout", CssLayout.class);
+        layoutOptions.put("FormLayout", FormLayout.class);
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+
+        createFormLayoutSelect(CATEGORY_FEATURES);
+        createFooterSelect(CATEGORY_FEATURES);
+        createFooterPropertySelect(CATEGORY_FEATURES);
+        createFormFactorySelect(CATEGORY_FEATURES);
+        createDataSourceSelect(AbstractSelectTestCase.CATEGORY_DATA_SOURCE);
+    }
+
+    private void createDataSourceSelect(String category) {
+        LinkedHashMap<String, Item> options = new LinkedHashMap<String, Item>();
+        options.put("Person", new BeanItem<Person>(new Person("First", "Last",
+                "foo@vaadin.com", "02-111 2222", "Ruukinkatu 2-4", 20540,
+                "Turku")));
+        options.put("Product", new BeanItem<Product>(new Product(
+                "Computer Monitor", 399.99f,
+                "A monitor that can display both color and black and white.")));
+        createSelectAction("Form data source", category, options, "Person",
+                formItemDataSourceCommand);
+
+    }
+
+    private void createFormFactorySelect(String category) {
+        LinkedHashMap<String, FormFieldFactory> options = new LinkedHashMap<String, FormFieldFactory>();
+        options.put("Default", DefaultFieldFactory.get());
+        options.put("Type aware", new FormFieldFactory() {
+
+            public Field createField(Item item, Object propertyId,
+                    Component uiContext) {
+                Class<?> type = item.getItemProperty(propertyId).getType();
+                Field c = null;
+                if (Number.class.isAssignableFrom(type)) {
+                    TextField tf = new TextField();
+                    tf.setCaption(DefaultFieldFactory
+                            .createCaptionByPropertyId(propertyId));
+                    tf.setWidth("3em");
+                    c = tf;
+                } else if ("city".equals(propertyId)) {
+                    ComboBox cb = new ComboBox();
+                    cb.setNullSelectionAllowed(false);
+                    cb.addItem("Turku");
+                    cb.addItem("New York");
+                    cb.addItem("Moscow");
+                    cb.setCaption(DefaultFieldFactory
+                            .createCaptionByPropertyId(propertyId));
+                    c = cb;
+                    c.setWidth("200px");
+                }
+
+                if (c == null) {
+                    c = DefaultFieldFactory.get().createField(item, propertyId,
+                            uiContext);
+                    c.setWidth("200px");
+                }
+                return c;
+            }
+        });
+
+        Command<Form, FormFieldFactory> formFactoryCommand = new Command<Form, FormFieldFactory>() {
+
+            public void execute(Form c, FormFieldFactory value, Object data) {
+                c.setFormFieldFactory(value);
+                c.setItemDataSource(c.getItemDataSource());
+
+            }
+        };
+        createSelectAction("FormFieldFactory", category, options, "Default",
+                formFactoryCommand);
+    }
+
+    private void createFooterPropertySelect(String category) {
+        String propertyCategory = "Footer properties";
+        createCategory(propertyCategory, category);
+
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+        options.put("auto", "");
+        options.put("200px", "200px");
+        options.put("100%", "100%");
+
+        createSelectAction("width", propertyCategory, options, "auto",
+                footerWidthCommand);
+        createSelectAction("height", propertyCategory, options, "auto",
+                footerHeightCommand);
+
+        LinkedHashMap<String, Alignment> alignmentOptions = new LinkedHashMap<String, Alignment>();
+        for (AlignmentInfo horizontal : new AlignmentInfo[] {
+                AlignmentInfo.LEFT, AlignmentInfo.CENTER, AlignmentInfo.RIGHT }) {
+            for (AlignmentInfo vertical : new AlignmentInfo[] {
+                    AlignmentInfo.TOP, AlignmentInfo.MIDDLE,
+                    AlignmentInfo.BOTTOM }) {
+                Alignment a = new Alignment(horizontal.getBitMask()
+                        + vertical.getBitMask());
+                alignmentOptions.put(
+                        a.getHorizontalAlignment() + " "
+                                + a.getVerticalAlignment(), a);
+
+            }
+
+        }
+        Command<Form, Alignment> footerComponentAlignmentCommand = new Command<Form, Alignment>() {
+
+            public void execute(Form c, Alignment value, Object data) {
+                Layout l = c.getFooter();
+                if (l instanceof AlignmentHandler) {
+                    ((AlignmentHandler) l).setComponentAlignment(l
+                            .getComponentIterator().next(), value);
+                }
+
+            }
+        };
+        createSelectAction("Component alignment", propertyCategory,
+                alignmentOptions, "left", footerComponentAlignmentCommand);
+    }
+
+    private void createFooterSelect(String category) {
+        createSelectAction("Footer", category, layoutOptions, "-",
+                formFooterCommand);
+
+    }
+
+    private void createFormLayoutSelect(String category) {
+
+        createSelectAction("Layout", category, layoutOptions, "-",
+                formLayoutCommand);
+
+    }
+
+    @Override
+    protected Class<Form> getTestClass() {
+        return Form.class;
+    }
+
+}