]> source.dussan.org Git - vaadin-framework.git/commitdiff
Refactored test case structure to have similar hierarchy as components
authorArtur Signell <artur.signell@itmill.com>
Fri, 15 Oct 2010 18:06:37 +0000 (18:06 +0000)
committerArtur Signell <artur.signell@itmill.com>
Fri, 15 Oct 2010 18:06:37 +0000 (18:06 +0000)
Added PopupDateFields2 test case (PopupDateField)
Added InlineDateFields test case (InlineDateField)
Added ComboBoxes2 test case (ComboBox)

svn changeset:15577/svn branch:6.4

tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java
tests/src/com/vaadin/tests/components/MenuBasedComponentTestCase.java
tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldTestCase.java [new file with mode: 0644]
tests/src/com/vaadin/tests/components/combobox/ComboBoxes2.java [new file with mode: 0644]
tests/src/com/vaadin/tests/components/datefield/DateFieldTestCase.java [new file with mode: 0644]
tests/src/com/vaadin/tests/components/datefield/InlineDateFields2.java [new file with mode: 0644]
tests/src/com/vaadin/tests/components/datefield/PopupDateFields2.java [new file with mode: 0644]
tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java [new file with mode: 0644]
tests/src/com/vaadin/tests/components/table/Tables.java

index fdd3a3fce7314fdf05de23c535543e9b898d37c0..aa7da25e7e130adb546dc722877c1195df1a1cfc 100644 (file)
@@ -1,8 +1,12 @@
 package com.vaadin.tests.components;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Locale;
 
+import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.ThemeResource;
 import com.vaadin.terminal.UserError;
 import com.vaadin.tests.util.Log;
 import com.vaadin.ui.AbstractComponent;
@@ -12,10 +16,27 @@ import com.vaadin.ui.Layout.SpacingHandler;
 public abstract class AbstractComponentTestCase<T extends AbstractComponent>
         extends TestBase {
 
+    protected static final ThemeResource ICON_16_USER_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/user.png");
+    protected static final ThemeResource ICON_16_USER_PNG_UNCACHEABLE = uncacheableThemeResource("../runo/icons/16/user.png");
+    protected static final ThemeResource ICON_32_ATTENTION_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/32/attention.png");
+    protected static final ThemeResource ICON_32_ATTENTION_PNG_UNCACHEABLE = uncacheableThemeResource("../runo/icons/32/attention.png");
+    protected static final ThemeResource ICON_64_EMAIL_REPLY_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/64/email-reply.png");
+    protected static final ThemeResource ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE = uncacheableThemeResource("../runo/icons/64/email-reply.png");
+
     private List<T> testComponents = new ArrayList<T>();
 
     abstract protected Class<T> getTestClass();
 
+    protected static ThemeResource uncacheableThemeResource(
+            String resourceLocation) {
+        return new ThemeResource(resourceLocation + "?" + new Date().getTime());
+    }
+
+    protected static ThemeResource cacheableThemeResource(
+            String resourceLocation) {
+        return new ThemeResource(resourceLocation);
+    }
+
     abstract protected void initializeComponents();
 
     private Log log = null;
@@ -75,6 +96,32 @@ public abstract class AbstractComponentTestCase<T extends AbstractComponent>
         }
     };
 
+    protected Command<T, Boolean> errorIndicatorCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean enabled, Object data) {
+            if (enabled) {
+                c.setComponentError(new UserError(errorMessage));
+            } else {
+                c.setComponentError(null);
+
+            }
+        }
+    };
+    private String errorMessage = null;
+
+    protected Command<T, String> errorMessageCommand = new Command<T, String>() {
+
+        public void execute(T c, String value, Object data) {
+            errorMessage = value;
+            if (c.getComponentError() != null) {
+                errorIndicatorCommand.execute(c, true, null);
+            }
+
+        }
+
+    };
+
+    // TODO Move to AbstractFieldTestCase
     protected Command<T, Boolean> requiredCommand = new Command<T, Boolean>() {
 
         public void execute(T c, Boolean enabled, Object data) {
@@ -86,16 +133,17 @@ public abstract class AbstractComponentTestCase<T extends AbstractComponent>
             }
         }
     };
+    protected Command<T, String> requiredErrorMessageCommand = new Command<T, String>() {
 
-    protected Command<T, Boolean> errorIndicatorCommand = new Command<T, Boolean>() {
+        public void execute(T c, String value, Object data) {
+            ((Field) c).setRequiredError(value);
+        }
 
-        public void execute(T c, Boolean enabled, Object data) {
-            if (enabled) {
-                c.setComponentError(new UserError("It failed!"));
-            } else {
-                c.setComponentError(null);
+    };
 
-            }
+    protected Command<T, String> descriptionCommand = new Command<T, String>() {
+        public void execute(T c, String value, Object data) {
+            c.setDescription(value);
         }
     };
 
@@ -106,6 +154,36 @@ public abstract class AbstractComponentTestCase<T extends AbstractComponent>
         }
     };
 
+    protected Command<T, Boolean> visibleCommand = new Command<T, Boolean>() {
+
+        public void execute(T c, Boolean enabled, Object data) {
+            c.setVisible(enabled);
+        }
+    };
+
+    protected Command<T, Resource> iconCommand = new Command<T, Resource>() {
+
+        public void execute(T c, Resource value, Object data) {
+            c.setIcon(value);
+        }
+
+    };
+    protected Command<T, String> captionCommand = new Command<T, String>() {
+
+        public void execute(T c, String value, Object data) {
+            c.setCaption(value);
+        }
+
+    };
+
+    protected Command<T, Locale> localeCommand = new Command<T, Locale>() {
+
+        public void execute(T c, Locale value, Object data) {
+            c.setLocale(value);
+        }
+
+    };
+
     protected <VALUET> void doCommand(Command<T, VALUET> command, VALUET value) {
         doCommand(command, value, null);
     }
index 88129ecedc6e37de461cf23348dac928f35ca1ba..873ca2171a86122da55eb323e5591196c793c45d 100644 (file)
@@ -3,22 +3,27 @@ package com.vaadin.tests.components;
 import java.util.HashSet;\r
 import java.util.LinkedHashMap;\r
 import java.util.List;\r
+import java.util.Locale;\r
 import java.util.Set;\r
 \r
-import com.vaadin.data.Container;\r
-import com.vaadin.data.Item;\r
-import com.vaadin.data.util.IndexedContainer;\r
 import com.vaadin.terminal.Resource;\r
 import com.vaadin.terminal.ThemeResource;\r
+import com.vaadin.tests.util.LoremIpsum;\r
 import com.vaadin.ui.AbstractComponent;\r
-import com.vaadin.ui.AbstractSelect;\r
-import com.vaadin.ui.Field;\r
 import com.vaadin.ui.MenuBar;\r
 import com.vaadin.ui.MenuBar.MenuItem;\r
 \r
+//TODO swap the inheritance order so AbstractComponentTestCase refers to AbstractComponent and this is the base class. Can only be done when all old tests are converted to use this.\r
 public abstract class MenuBasedComponentTestCase<T extends AbstractComponent>\r
         extends AbstractComponentTestCase<T> {\r
 \r
+    protected static final String TEXT_SHORT = "Short";\r
+    protected static final String TEXT_MEDIUM = "This is a semi-long text that might wrap.";\r
+    protected static final String TEXT_LONG = "This is a long text. "\r
+            + LoremIpsum.get(500);\r
+    protected static final String TEXT_VERY_LONG = "This is a very, very long text. "\r
+            + LoremIpsum.get(5000);\r
+\r
     private static final Resource SELECTED_ICON = new ThemeResource(\r
             "../runo/icons/16/ok.png");\r
 \r
@@ -35,8 +40,9 @@ public abstract class MenuBasedComponentTestCase<T extends AbstractComponent>
     protected static final String CATEGORY_STATE = "State";\r
     protected static final String CATEGORY_SIZE = "Size";\r
     protected static final String CATEGORY_SELECTION = "Selection";\r
-    protected static final String CATEGORY_CONTENT = "Contents";\r
     protected static final String CATEGORY_LISTENERS = "Listeners";\r
+    protected static final String CATEGORY_FEATURES = "Features";\r
+    protected static final String CATEGORY_DECORATIONS = "Decorations";\r
 \r
     @Override\r
     protected final void setup() {\r
@@ -50,7 +56,7 @@ public abstract class MenuBasedComponentTestCase<T extends AbstractComponent>
         super.setup();\r
 \r
         // Create menu actions and trigger default actions\r
-        populateMenu();\r
+        createActions();\r
 \r
         // Clear initialization log messages\r
         clearLog();\r
@@ -94,96 +100,67 @@ public abstract class MenuBasedComponentTestCase<T extends AbstractComponent>
         }\r
     }\r
 \r
-    private void populateMenu() {\r
-        createDefaultActions();\r
-        createCustomActions();\r
-    }\r
-\r
-    private void createDefaultActions() {\r
+    /**\r
+     * Create actions for the component. Remember to call super.createActions()\r
+     * when overriding.\r
+     */\r
+    protected void createActions() {\r
         createBooleanAction("Immediate", CATEGORY_STATE, true, immediateCommand);\r
         createBooleanAction("Enabled", CATEGORY_STATE, true, enabledCommand);\r
         createBooleanAction("Readonly", CATEGORY_STATE, false, readonlyCommand);\r
+        createBooleanAction("Visible", CATEGORY_STATE, true, visibleCommand);\r
         createBooleanAction("Error indicator", CATEGORY_STATE, false,\r
                 errorIndicatorCommand);\r
+        createErrorMessageSelect(CATEGORY_DECORATIONS);\r
+\r
+        createDescriptionSelect(CATEGORY_DECORATIONS);\r
+        createCaptionSelect(CATEGORY_DECORATIONS);\r
+        createIconSelect(CATEGORY_DECORATIONS);\r
 \r
-        if (component instanceof Field) {\r
-            createBooleanAction("Required", CATEGORY_STATE, false,\r
-                    requiredCommand);\r
-        }\r
         createWidthSelect(CATEGORY_SIZE);\r
         createHeightSelect(CATEGORY_SIZE);\r
 \r
-        if (component instanceof AbstractSelect) {\r
-            createNullSelectAllowedCheckbox(CATEGORY_SELECTION);\r
-            createItemsInContainerSelect(CATEGORY_CONTENT);\r
-            createColumnsInContainerSelect(CATEGORY_CONTENT);\r
-        }\r
-    }\r
-\r
-    @SuppressWarnings("unchecked")\r
-    protected void createItemsInContainerSelect(String category) {\r
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();\r
-        options.put("0", 0);\r
-        options.put("20", 20);\r
-        options.put("100", 100);\r
-        options.put("1000", 1000);\r
-        options.put("10000", 10000);\r
-        options.put("100000", 100000);\r
-\r
-        createSelectAction("Items in container", category, options, "20",\r
-                (Command) itemsInContainerCommand);\r
-    }\r
+        // TODO Style name\r
 \r
-    @SuppressWarnings("unchecked")\r
-    protected void createColumnsInContainerSelect(String category) {\r
-        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();\r
-        options.put("0", 0);\r
-        options.put("5", 5);\r
-        options.put("10", 10);\r
-        options.put("50", 50);\r
-        options.put("100", 100);\r
-        options.put("1000", 1000);\r
-\r
-        createSelectAction("Columns in container", category, options, "10",\r
-                (Command) columnsInContainerCommand);\r
     }\r
 \r
-    private Container createContainer(int properties, int items) {\r
-        IndexedContainer c = new IndexedContainer();\r
-        for (int i = 1; i <= properties; i++) {\r
-            c.addContainerProperty("Column " + i, String.class, "");\r
-        }\r
-        for (int i = 1; i <= items; i++) {\r
-            Item item = c.addItem("Item " + i);\r
-            for (int j = 1; j <= properties; j++) {\r
-                item.getItemProperty("Column " + j).setValue(\r
-                        "Item " + i + "," + j);\r
-            }\r
-        }\r
+    private void createErrorMessageSelect(String category) {\r
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+        options.put("-", null);\r
+        options.put(TEXT_SHORT, TEXT_SHORT);\r
+        options.put("Medium", TEXT_MEDIUM);\r
+        options.put("Long", TEXT_LONG);\r
+        options.put("Very long", TEXT_VERY_LONG);\r
+        createSelectAction("Error message", category, options, "-",\r
+                errorMessageCommand);\r
 \r
-        return c;\r
     }\r
 \r
-    @SuppressWarnings("unchecked")\r
-    protected void createNullSelectAllowedCheckbox(String category) {\r
-        createBooleanAction("Null Selection Allowed", category, false,\r
-                (Command) nullSelectionAllowedCommand);\r
+    private void createDescriptionSelect(String category) {\r
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+        options.put("-", null);\r
+        options.put(TEXT_SHORT, TEXT_SHORT);\r
+        options.put("Medium", TEXT_MEDIUM);\r
+        options.put("Long", TEXT_LONG);\r
+        options.put("Very long", TEXT_VERY_LONG);\r
+        createSelectAction("Description / tooltip", category, options, "-",\r
+                descriptionCommand);\r
 \r
     }\r
 \r
-    @SuppressWarnings("unchecked")\r
-    protected void createNullSelectItemId(String category) {\r
-        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();\r
-        options.put("- None -", null);\r
-        for (Object id : ((AbstractSelect) component).getContainerDataSource()\r
-                .getContainerPropertyIds()) {\r
-            options.put(id.toString(), id);\r
-        }\r
-        createSelectAction("Null Selection Item Id", category, options,\r
-                "- None -", (Command) nullSelectItemIdCommand);\r
+    private void createCaptionSelect(String category) {\r
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+        options.put("-", null);\r
+        options.put("Short", TEXT_SHORT);\r
+        options.put("Medium", TEXT_MEDIUM);\r
+        options.put("Long", TEXT_LONG);\r
+        options.put("Very long", TEXT_VERY_LONG);\r
+        createSelectAction("Caption", category, options, "Short",\r
+                captionCommand);\r
+\r
     }\r
 \r
-    protected void createWidthSelect(String category) {\r
+    private void createWidthSelect(String category) {\r
         LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
         options.put("Undefined", null);\r
         options.put("50%", "50%");\r
@@ -196,7 +173,29 @@ public abstract class MenuBasedComponentTestCase<T extends AbstractComponent>
                 widthCommand, null);\r
     }\r
 \r
-    protected void createHeightSelect(String category) {\r
+    private void createIconSelect(String category) {\r
+        LinkedHashMap<String, Resource> options = new LinkedHashMap<String, Resource>();\r
+        options.put("-", null);\r
+        options.put("16x16", ICON_16_USER_PNG_CACHEABLE);\r
+        options.put("32x32", ICON_32_ATTENTION_PNG_CACHEABLE);\r
+        options.put("64x64", ICON_64_EMAIL_REPLY_PNG_CACHEABLE);\r
+\r
+        createSelectAction("Icon", category, options, "-", iconCommand, null);\r
+    }\r
+\r
+    private void createLocaleSelect(String category) {\r
+        LinkedHashMap<String, Locale> options = new LinkedHashMap<String, Locale>();\r
+        options.put("-", null);\r
+        options.put("fi_FI", new Locale("fi", "FI"));\r
+        options.put("en_US", Locale.US);\r
+        options.put("zh_CN", Locale.SIMPLIFIED_CHINESE);\r
+        options.put("fr_FR", Locale.FRANCE);\r
+\r
+        createSelectAction("Locale", category, options, "-", localeCommand,\r
+                null);\r
+    }\r
+\r
+    private void createHeightSelect(String category) {\r
         LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
         options.put("Undefined", null);\r
         options.put("50%", "50%");\r
@@ -239,11 +238,6 @@ public abstract class MenuBasedComponentTestCase<T extends AbstractComponent>
         return mainMenu.addItem(category, null);\r
     }\r
 \r
-    /**\r
-     * Provide custom actions for the test case by creating them in this method.\r
-     */\r
-    protected abstract void createCustomActions();\r
-\r
     private MenuBar.Command menuBooleanCommand(\r
             final com.vaadin.tests.components.ComponentTestCase.Command<T, Boolean> booleanCommand,\r
             final Object data) {\r
@@ -349,37 +343,4 @@ public abstract class MenuBasedComponentTestCase<T extends AbstractComponent>
         }\r
     }\r
 \r
-    /* COMMANDS */\r
-\r
-    protected Command<AbstractSelect, Boolean> nullSelectionAllowedCommand = new Command<AbstractSelect, Boolean>() {\r
-\r
-        public void execute(AbstractSelect c, Boolean value, Object data) {\r
-            (c).setNullSelectionAllowed(value);\r
-        }\r
-    };\r
-\r
-    protected Command<AbstractSelect, Object> nullSelectItemIdCommand = new Command<AbstractSelect, Object>() {\r
-\r
-        public void execute(AbstractSelect c, Object value, Object data) {\r
-            c.setNullSelectionItemId(value);\r
-        }\r
-    };\r
-\r
-    protected Command<AbstractSelect, Integer> itemsInContainerCommand = new Command<AbstractSelect, Integer>() {\r
-\r
-        public void execute(AbstractSelect t, Integer value, Object data) {\r
-            t.setContainerDataSource(createContainer(t.getContainerDataSource()\r
-                    .getContainerPropertyIds().size(), value));\r
-        }\r
-    };\r
-\r
-    protected Command<AbstractSelect, Integer> columnsInContainerCommand = new Command<AbstractSelect, Integer>() {\r
-\r
-        public void execute(AbstractSelect t, Integer value, Object data) {\r
-            t.setContainerDataSource(createContainer(value, t\r
-                    .getContainerDataSource().size()));\r
-        }\r
-    };\r
-\r
-    /* COMMANDS END */\r
 }\r
diff --git a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldTestCase.java b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldTestCase.java
new file mode 100644 (file)
index 0000000..d13e164
--- /dev/null
@@ -0,0 +1,124 @@
+package com.vaadin.tests.components.abstractfield;\r
+\r
+import java.util.LinkedHashMap;\r
+\r
+import com.vaadin.data.Property.ReadOnlyStatusChangeEvent;\r
+import com.vaadin.data.Property.ReadOnlyStatusChangeListener;\r
+import com.vaadin.data.Property.ValueChangeListener;\r
+import com.vaadin.event.FieldEvents.BlurEvent;\r
+import com.vaadin.event.FieldEvents.BlurListener;\r
+import com.vaadin.event.FieldEvents.BlurNotifier;\r
+import com.vaadin.event.FieldEvents.FocusEvent;\r
+import com.vaadin.event.FieldEvents.FocusListener;\r
+import com.vaadin.event.FieldEvents.FocusNotifier;\r
+import com.vaadin.tests.components.MenuBasedComponentTestCase;\r
+import com.vaadin.ui.AbstractField;\r
+\r
+public abstract class AbstractFieldTestCase<T extends AbstractField> extends\r
+        MenuBasedComponentTestCase<T> implements ValueChangeListener,\r
+        ReadOnlyStatusChangeListener, FocusListener, BlurListener {\r
+\r
+    @Override\r
+    protected void createActions() {\r
+        super.createActions();\r
+        createBooleanAction("Required", CATEGORY_STATE, false, requiredCommand);\r
+        createRequiredErrorSelect(CATEGORY_DECORATIONS);\r
+\r
+        createValueChangeListener(CATEGORY_LISTENERS);\r
+        createReadOnlyStatusChangeListener(CATEGORY_LISTENERS);\r
+    }\r
+\r
+    private void createRequiredErrorSelect(String category) {\r
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+        options.put("-", null);\r
+        options.put(TEXT_SHORT, TEXT_SHORT);\r
+        options.put("Medium", TEXT_MEDIUM);\r
+        options.put("Long", TEXT_LONG);\r
+        options.put("Very long", TEXT_VERY_LONG);\r
+        createSelectAction("Required error message", category, options, "-",\r
+                requiredErrorMessageCommand);\r
+\r
+    }\r
+\r
+    private void createValueChangeListener(String category) {\r
+\r
+        createBooleanAction("Value change listener", category, false,\r
+                valueChangeListenerCommand);\r
+    }\r
+\r
+    private void createReadOnlyStatusChangeListener(String category) {\r
+\r
+        createBooleanAction("Read only status change listener", category,\r
+                false, readonlyStatusChangeListenerCommand);\r
+    }\r
+\r
+    protected void createFocusListener(String category) {\r
+        createBooleanAction("Focus listener", category, false,\r
+                focusListenerCommand);\r
+\r
+    }\r
+\r
+    protected void createBlurListener(String category) {\r
+        createBooleanAction("Blur listener", category, false,\r
+                blurListenerCommand);\r
+\r
+    }\r
+\r
+    protected Command<T, Boolean> valueChangeListenerCommand = new Command<T, Boolean>() {\r
+\r
+        public void execute(T c, Boolean value, Object data) {\r
+            if (value) {\r
+                c.addListener((ValueChangeListener) AbstractFieldTestCase.this);\r
+            } else {\r
+                c.removeListener((ValueChangeListener) AbstractFieldTestCase.this);\r
+            }\r
+        }\r
+    };\r
+    protected Command<T, Boolean> readonlyStatusChangeListenerCommand = new Command<T, Boolean>() {\r
+\r
+        public void execute(T c, Boolean value, Object data) {\r
+            if (value) {\r
+                c.addListener((ReadOnlyStatusChangeListener) AbstractFieldTestCase.this);\r
+            } else {\r
+                c.removeListener((ReadOnlyStatusChangeListener) AbstractFieldTestCase.this);\r
+            }\r
+        }\r
+    };\r
+    protected Command<T, Boolean> focusListenerCommand = new Command<T, Boolean>() {\r
+\r
+        public void execute(T c, Boolean value, Object data) {\r
+            if (value) {\r
+                ((FocusNotifier) c).addListener(AbstractFieldTestCase.this);\r
+            } else {\r
+                ((FocusNotifier) c).removeListener(AbstractFieldTestCase.this);\r
+            }\r
+        }\r
+    };\r
+    protected Command<T, Boolean> blurListenerCommand = new Command<T, Boolean>() {\r
+\r
+        public void execute(T c, Boolean value, Object data) {\r
+            if (value) {\r
+                ((BlurNotifier) c).addListener(AbstractFieldTestCase.this);\r
+            } else {\r
+                ((BlurNotifier) c).removeListener(AbstractFieldTestCase.this);\r
+            }\r
+        }\r
+    };\r
+\r
+    public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {\r
+        log(event.getClass().getSimpleName() + ", new value: "\r
+                + event.getProperty().getValue());\r
+    };\r
+\r
+    public void readOnlyStatusChange(ReadOnlyStatusChangeEvent event) {\r
+        log(event.getClass().getSimpleName());\r
+    }\r
+\r
+    public void focus(FocusEvent event) {\r
+        log(event.getClass().getSimpleName());\r
+    }\r
+\r
+    public void blur(BlurEvent event) {\r
+        log(event.getClass().getSimpleName());\r
+    }\r
+}\r
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxes2.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxes2.java
new file mode 100644 (file)
index 0000000..45d4728
--- /dev/null
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.combobox;
+
+import java.util.LinkedHashMap;
+
+import com.vaadin.terminal.Resource;
+import com.vaadin.tests.components.select.AbstractSelectTestCase;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxes2 extends AbstractSelectTestCase<ComboBox> {
+
+    @Override
+    protected Class<ComboBox> getTestClass() {
+        return ComboBox.class;
+    }
+
+    @Override
+    protected void createActions() {
+        super.createActions();
+        createItemIconSelect(CATEGORY_CONTENT);
+    }
+
+    private void createItemIconSelect(String category) {
+
+        LinkedHashMap<String, Resource> options = new LinkedHashMap<String, Resource>();
+        options.put("-", null);
+        options.put("16x16", ICON_16_USER_PNG_UNCACHEABLE);
+        options.put("32x32", ICON_32_ATTENTION_PNG_UNCACHEABLE);
+        options.put("64x64", ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE);
+
+        createSelectAction("Icon", category, options, "-",
+                new Command<ComboBox, Resource>() {
+
+                    public void execute(ComboBox c, Resource value, Object data) {
+                        for (Object id : c.getItemIds()) {
+                            if (value == null) {
+                                c.setItemIcon(id, null);
+                            } else {
+                                c.setItemIcon(id, value);
+                            }
+                        }
+                    }
+                });
+    }
+
+}
diff --git a/tests/src/com/vaadin/tests/components/datefield/DateFieldTestCase.java b/tests/src/com/vaadin/tests/components/datefield/DateFieldTestCase.java
new file mode 100644 (file)
index 0000000..e99ebbc
--- /dev/null
@@ -0,0 +1,108 @@
+package com.vaadin.tests.components.datefield;\r
+\r
+import java.text.DateFormat;\r
+import java.text.SimpleDateFormat;\r
+import java.util.LinkedHashMap;\r
+import java.util.Locale;\r
+\r
+import com.vaadin.tests.components.abstractfield.AbstractFieldTestCase;\r
+import com.vaadin.ui.DateField;\r
+\r
+public abstract class DateFieldTestCase<T extends DateField> extends\r
+        AbstractFieldTestCase<T> {\r
+\r
+    @Override\r
+    protected void createActions() {\r
+        super.createActions();\r
+        createResolutionSelectAction(CATEGORY_FEATURES);\r
+        createBooleanAction("Lenient", CATEGORY_FEATURES, false, lenientCommand);\r
+        createBooleanAction("Show week numbers", CATEGORY_FEATURES, false,\r
+                weekNumberCommand);\r
+        createDateFormatSelectAction(CATEGORY_FEATURES);\r
+        createFocusListener(CATEGORY_LISTENERS);\r
+        createBlurListener(CATEGORY_LISTENERS);\r
+    };\r
+\r
+    private void createDateFormatSelectAction(String category) {\r
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+\r
+        options.put("-", null);\r
+        options.put("d M yyyy", "d M yyyy");\r
+        options.put("d MM yyyy", "d MM yyyy");\r
+        options.put("d MMM yyyy", "d MMM yyyy");\r
+        options.put("d MMMM yyyy", "d MMMM yyyy");\r
+        options.put("dd M yyyy", "dd M yyyy");\r
+        options.put("ddd M yyyy", "ddd M yyyy");\r
+        options.put("d M y", "d M y");\r
+        options.put("d M yy", "d M yy");\r
+        options.put("d M yyy", "d M yyy");\r
+        options.put("d M yyyy", "d M yyyy");\r
+        options.put("d M 'custom text' yyyy", "d M 'custom text' yyyy");\r
+        options.put("'day:'d', month:'M', year: 'yyyy",\r
+                "'day:'d', month:'M', year: 'yyyy");\r
+        options.put(getDatePattern(new Locale("fi", "FI"), DateFormat.LONG),\r
+                getDatePattern(new Locale("fi", "FI"), DateFormat.LONG));\r
+        options.put(getDatePattern(new Locale("fi", "FI"), DateFormat.MEDIUM),\r
+                getDatePattern(new Locale("fi", "FI"), DateFormat.MEDIUM));\r
+        options.put(getDatePattern(new Locale("fi", "FI"), DateFormat.SHORT),\r
+                getDatePattern(new Locale("fi", "FI"), DateFormat.SHORT));\r
+\r
+        createSelectAction("Date format", category, options, "-",\r
+                dateFormatCommand);\r
+\r
+    }\r
+\r
+    private String getDatePattern(Locale locale, int dateStyle) {\r
+        DateFormat dateFormat = DateFormat.getDateInstance(dateStyle, locale);\r
+\r
+        if (dateFormat instanceof SimpleDateFormat) {\r
+            String pattern = ((SimpleDateFormat) dateFormat).toPattern();\r
+            return pattern;\r
+        }\r
+        return null;\r
+\r
+    }\r
+\r
+    private void createResolutionSelectAction(String category) {\r
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();\r
+        options.put("Year", DateField.RESOLUTION_YEAR);\r
+        options.put("Month", DateField.RESOLUTION_MONTH);\r
+        options.put("Day", DateField.RESOLUTION_DAY);\r
+        options.put("Hour", DateField.RESOLUTION_HOUR);\r
+        options.put("Min", DateField.RESOLUTION_MIN);\r
+        options.put("Sec", DateField.RESOLUTION_SEC);\r
+        options.put("Msec", DateField.RESOLUTION_MSEC);\r
+\r
+        createSelectAction("Resolution", category, options, "Year",\r
+                resolutionCommand);\r
+    }\r
+\r
+    private Command<T, Integer> resolutionCommand = new Command<T, Integer>() {\r
+\r
+        public void execute(T c, Integer value, Object data) {\r
+            c.setResolution(value);\r
+\r
+        }\r
+    };\r
+    private Command<T, Boolean> lenientCommand = new Command<T, Boolean>() {\r
+\r
+        public void execute(T c, Boolean value, Object data) {\r
+            c.setLenient(false);\r
+\r
+        }\r
+    };\r
+    private Command<T, Boolean> weekNumberCommand = new Command<T, Boolean>() {\r
+\r
+        public void execute(T c, Boolean value, Object data) {\r
+            c.setShowISOWeekNumbers(true);\r
+\r
+        }\r
+    };\r
+    private Command<T, String> dateFormatCommand = new Command<T, String>() {\r
+\r
+        public void execute(T c, String value, Object data) {\r
+            c.setDateFormat(value);\r
+        }\r
+    };\r
+\r
+}\r
diff --git a/tests/src/com/vaadin/tests/components/datefield/InlineDateFields2.java b/tests/src/com/vaadin/tests/components/datefield/InlineDateFields2.java
new file mode 100644 (file)
index 0000000..773531c
--- /dev/null
@@ -0,0 +1,12 @@
+package com.vaadin.tests.components.datefield;\r
+\r
+import com.vaadin.ui.InlineDateField;\r
+\r
+public class InlineDateFields2 extends DateFieldTestCase<InlineDateField> {\r
+\r
+    @Override\r
+    protected Class<InlineDateField> getTestClass() {\r
+        return InlineDateField.class;\r
+    }\r
+\r
+}\r
diff --git a/tests/src/com/vaadin/tests/components/datefield/PopupDateFields2.java b/tests/src/com/vaadin/tests/components/datefield/PopupDateFields2.java
new file mode 100644 (file)
index 0000000..465ccc6
--- /dev/null
@@ -0,0 +1,38 @@
+package com.vaadin.tests.components.datefield;\r
+\r
+import java.util.LinkedHashMap;\r
+\r
+import com.vaadin.ui.PopupDateField;\r
+\r
+public class PopupDateFields2 extends DateFieldTestCase<PopupDateField> {\r
+\r
+    @Override\r
+    protected Class<PopupDateField> getTestClass() {\r
+        return PopupDateField.class;\r
+    }\r
+\r
+    @Override\r
+    protected void createActions() {\r
+        super.createActions();\r
+\r
+        createInputPromptSelectAction(CATEGORY_FEATURES);\r
+    }\r
+\r
+    private void createInputPromptSelectAction(String category) {\r
+        LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+        options.put("<none>", null);\r
+        options.put("Please enter date", "Please enter date");\r
+        options.put("åäöÅÄÖ", "åäöÅÄÖ");\r
+\r
+        createSelectAction("Input prompt", category, options, "<none>",\r
+                new Command<PopupDateField, String>() {\r
+\r
+                    public void execute(PopupDateField c, String value,\r
+                            Object data) {\r
+                        c.setInputPrompt(value);\r
+\r
+                    }\r
+                });\r
+    }\r
+\r
+}\r
diff --git a/tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java b/tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java
new file mode 100644 (file)
index 0000000..cb67ab1
--- /dev/null
@@ -0,0 +1,118 @@
+package com.vaadin.tests.components.select;\r
+\r
+import java.util.LinkedHashMap;\r
+\r
+import com.vaadin.data.Container;\r
+import com.vaadin.data.Item;\r
+import com.vaadin.data.util.IndexedContainer;\r
+import com.vaadin.tests.components.MenuBasedComponentTestCase;\r
+import com.vaadin.ui.AbstractSelect;\r
+\r
+public abstract class AbstractSelectTestCase<T extends AbstractSelect> extends\r
+        MenuBasedComponentTestCase<T> {\r
+\r
+    protected static final String CATEGORY_CONTENT = "Contents";\r
+\r
+    @Override\r
+    protected void createActions() {\r
+        super.createActions();\r
+        createNullSelectAllowedCheckbox(CATEGORY_SELECTION);\r
+        createItemsInContainerSelect(CATEGORY_CONTENT);\r
+        createColumnsInContainerSelect(CATEGORY_CONTENT);\r
+\r
+    }\r
+\r
+    protected void createNullSelectAllowedCheckbox(String category) {\r
+        createBooleanAction("Null Selection Allowed", category, false,\r
+                nullSelectionAllowedCommand);\r
+\r
+    }\r
+\r
+    protected void createNullSelectItemId(String category) {\r
+        LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();\r
+        options.put("- None -", null);\r
+        for (Object id : (getComponent()).getContainerDataSource()\r
+                .getContainerPropertyIds()) {\r
+            options.put(id.toString(), id);\r
+        }\r
+        createSelectAction("Null Selection Item Id", category, options,\r
+                "- None -", nullSelectItemIdCommand);\r
+    }\r
+\r
+    protected Container createContainer(int properties, int items) {\r
+        IndexedContainer c = new IndexedContainer();\r
+        for (int i = 1; i <= properties; i++) {\r
+            c.addContainerProperty("Column " + i, String.class, "");\r
+        }\r
+        for (int i = 1; i <= items; i++) {\r
+            Item item = c.addItem("Item " + i);\r
+            for (int j = 1; j <= properties; j++) {\r
+                item.getItemProperty("Column " + j).setValue(\r
+                        "Item " + i + "," + j);\r
+            }\r
+        }\r
+\r
+        return c;\r
+    }\r
+\r
+    protected void createItemsInContainerSelect(String category) {\r
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();\r
+        options.put("0", 0);\r
+        options.put("20", 20);\r
+        options.put("100", 100);\r
+        options.put("1000", 1000);\r
+        options.put("10000", 10000);\r
+        options.put("100000", 100000);\r
+\r
+        createSelectAction("Items in container", category, options, "20",\r
+                itemsInContainerCommand);\r
+    }\r
+\r
+    protected void createColumnsInContainerSelect(String category) {\r
+        LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();\r
+        options.put("0", 0);\r
+        options.put("5", 5);\r
+        options.put("10", 10);\r
+        options.put("50", 50);\r
+        options.put("100", 100);\r
+        options.put("1000", 1000);\r
+\r
+        createSelectAction("Columns in container", category, options, "10",\r
+                columnsInContainerCommand);\r
+    }\r
+\r
+    /* COMMANDS */\r
+\r
+    protected Command<T, Boolean> nullSelectionAllowedCommand = new Command<T, Boolean>() {\r
+\r
+        public void execute(T c, Boolean value, Object data) {\r
+            (c).setNullSelectionAllowed(value);\r
+        }\r
+    };\r
+\r
+    protected Command<T, Object> nullSelectItemIdCommand = new Command<T, Object>() {\r
+\r
+        public void execute(T c, Object value, Object data) {\r
+            c.setNullSelectionItemId(value);\r
+        }\r
+    };\r
+\r
+    protected Command<T, Integer> itemsInContainerCommand = new Command<T, Integer>() {\r
+\r
+        public void execute(T t, Integer value, Object data) {\r
+            t.setContainerDataSource(createContainer(t.getContainerDataSource()\r
+                    .getContainerPropertyIds().size(), value));\r
+        }\r
+    };\r
+\r
+    protected Command<T, Integer> columnsInContainerCommand = new Command<T, Integer>() {\r
+\r
+        public void execute(T t, Integer value, Object data) {\r
+            t.setContainerDataSource(createContainer(value, t\r
+                    .getContainerDataSource().size()));\r
+        }\r
+    };\r
+\r
+    /* COMMANDS END */\r
+\r
+}\r
index a4b8833349f10ec4dbe20c1d83577c930661e29f..7173244c3f36a21c208caa00c915a1a8c159df58 100644 (file)
@@ -7,7 +7,7 @@ import java.util.List;
 \r
 import com.vaadin.event.ItemClickEvent;\r
 import com.vaadin.event.ItemClickEvent.ItemClickListener;\r
-import com.vaadin.tests.components.MenuBasedComponentTestCase;\r
+import com.vaadin.tests.components.select.AbstractSelectTestCase;\r
 import com.vaadin.ui.AbstractSelect.MultiSelectMode;\r
 import com.vaadin.ui.Table;\r
 import com.vaadin.ui.Table.ColumnResizeEvent;\r
@@ -17,16 +17,20 @@ import com.vaadin.ui.Table.FooterClickListener;
 import com.vaadin.ui.Table.HeaderClickEvent;\r
 import com.vaadin.ui.Table.HeaderClickListener;\r
 \r
-public class Tables extends MenuBasedComponentTestCase<Table> implements\r
+public class Tables extends AbstractSelectTestCase<Table> implements\r
         ItemClickListener, HeaderClickListener, FooterClickListener,\r
         ColumnResizeListener {\r
 \r
     protected static final String CATEGORY_ROWS = "Rows";\r
     private static final String CATEGORY_HEADER = "Header";\r
     private static final String CATEGORY_FOOTER = "Footer";\r
-    private static final String CATEGORY_FEATURE_TOGGLES = "Features";\r
     private static final String CATEGORY_VISIBLE_COLUMNS = "Visible columns";\r
 \r
+    @Override\r
+    protected Class<Table> getTestClass() {\r
+        return Table.class;\r
+    }\r
+\r
     /* COMMANDS */\r
     private Command<Table, Boolean> visibleColumnCommand = new Command<Table, Boolean>() {\r
         public void execute(Table c, Boolean visible, Object propertyId) {\r
@@ -118,12 +122,9 @@ public class Tables extends MenuBasedComponentTestCase<Table> implements
     /* COMMANDS END */\r
 \r
     @Override\r
-    protected Class<Table> getTestClass() {\r
-        return Table.class;\r
-    }\r
+    protected void createActions() {\r
+        super.createActions();\r
 \r
-    @Override\r
-    protected void createCustomActions() {\r
         createPageLengthSelect(CATEGORY_SIZE);\r
 \r
         createSelectionModeSelect(CATEGORY_SELECTION);\r
@@ -141,9 +142,8 @@ public class Tables extends MenuBasedComponentTestCase<Table> implements
         createFooterVisibilityCheckbox(CATEGORY_FOOTER);\r
         createFooterTextSelect(CATEGORY_FOOTER);\r
 \r
-        createColumnReorderingAllowedCheckbox(CATEGORY_FEATURE_TOGGLES);\r
-        createColumnCollapsingAllowedCheckbox(CATEGORY_FEATURE_TOGGLES);\r
-        createSortAllowedCheckbox(CATEGORY_FEATURE_TOGGLES);\r
+        createColumnReorderingAllowedCheckbox(CATEGORY_FEATURES);\r
+        createColumnCollapsingAllowedCheckbox(CATEGORY_FEATURES);\r
 \r
         createVisibleColumnsMultiToggle(CATEGORY_VISIBLE_COLUMNS);\r
 \r
@@ -167,15 +167,6 @@ public class Tables extends MenuBasedComponentTestCase<Table> implements
                 });\r
     }\r
 \r
-    private void createSortAllowedCheckbox(String category) {\r
-        createBooleanAction("Sorting allowed", category, true,\r
-                new Command<Table, Boolean>() {\r
-                    public void execute(Table c, Boolean value, Object data) {\r
-                        c.setSortDisabled(!value);\r
-                    }\r
-                });\r
-    }\r
-\r
     private void createVisibleColumnsMultiToggle(String category) {\r
         for (Object id : getComponent().getContainerPropertyIds()) {\r
             createBooleanAction(id.toString() + " - visible", category, true,\r