aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/com/vaadin/tests/components/ComponentTestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'uitest/src/com/vaadin/tests/components/ComponentTestCase.java')
-rw-r--r--uitest/src/com/vaadin/tests/components/ComponentTestCase.java197
1 files changed, 197 insertions, 0 deletions
diff --git a/uitest/src/com/vaadin/tests/components/ComponentTestCase.java b/uitest/src/com/vaadin/tests/components/ComponentTestCase.java
new file mode 100644
index 0000000000..9bb01cd56f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/ComponentTestCase.java
@@ -0,0 +1,197 @@
+package com.vaadin.tests.components;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.NativeSelect;
+
+public abstract class ComponentTestCase<T extends AbstractComponent> extends
+ AbstractComponentTestCase<T> {
+
+ protected static final Object CAPTION = "caption";
+
+ private HorizontalLayout actionLayout;
+
+ @Override
+ protected final void setup() {
+ // Create action layout so it appears before the components
+ actionLayout = createActionLayout();
+ addComponent(actionLayout);
+
+ super.setup();
+
+ // Create actions and add to layout
+ populateActionLayout();
+ }
+
+ protected void populateActionLayout() {
+ for (Component c : createActions()) {
+ addAction(c);
+ }
+
+ }
+
+ private void addAction(Component c) {
+ actionLayout.addComponent(c);
+ actionLayout.setComponentAlignment(c, Alignment.BOTTOM_LEFT);
+ }
+
+ /**
+ * Override to provide custom actions for the test case.
+ *
+ * @param actions
+ * Array with default actions. Add custom actions to this. Never
+ * null.
+ */
+ protected void createCustomActions(List<Component> actions) {
+
+ }
+
+ /**
+ * Method that creates the "actions" shown in the upper part of the screen.
+ * Override this only if you do not want the default actions. Custom actions
+ * can be added through #createCustomActions();
+ *
+ * @return A List with actions to which more actions can be added.
+ */
+ protected List<Component> createActions() {
+ ArrayList<Component> actions = new ArrayList<Component>();
+
+ actions.add(createEnabledAction(true));
+ actions.add(createReadonlyAction(false));
+
+ actions.add(createErrorIndicatorAction(false));
+ if (Field.class.isAssignableFrom(getTestClass())) {
+ actions.add(createRequiredAction(false));
+ }
+
+ createCustomActions(actions);
+
+ return actions;
+ }
+
+ private HorizontalLayout createActionLayout() {
+ HorizontalLayout actionLayout = new HorizontalLayout();
+ actionLayout.setSpacing(true);
+ actionLayout.setMargin(true);
+
+ return actionLayout;
+ }
+
+ protected Component createErrorIndicatorAction(boolean initialState) {
+ return createBooleanAction("Error indicators", initialState,
+ errorIndicatorCommand);
+ }
+
+ protected Component createEnabledAction(boolean initialState) {
+ return createBooleanAction("Enabled", initialState, enabledCommand);
+ }
+
+ protected Component createReadonlyAction(boolean initialState) {
+ return createBooleanAction("Readonly", initialState, readonlyCommand);
+ }
+
+ protected Component createRequiredAction(boolean initialState) {
+ return createBooleanAction("Required", initialState, requiredCommand);
+ }
+
+ protected Component createBooleanAction(String caption,
+ boolean initialState, final Command<T, Boolean> command) {
+
+ CheckBox checkBox = new CheckBox(caption);
+ checkBox.addListener(new ValueChangeListener() {
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ boolean enabled = (Boolean) event.getProperty().getValue();
+ doCommand(command, enabled);
+ }
+ });
+
+ checkBox.setValue(initialState);
+ checkBox.setImmediate(true);
+
+ checkBox.setId("checkboxaction-" + caption);
+ // Set default value for all components
+ doCommand(command, initialState);
+
+ return checkBox;
+ }
+
+ protected Component createButtonAction(String caption,
+ final Command<T, Boolean> command) {
+
+ Button button = new Button(caption);
+ button.setData(Boolean.FALSE);
+ button.addListener(new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ Button b = event.getButton();
+ boolean state = (Boolean) b.getData();
+ b.setData(!state);
+ doCommand(command, state);
+ }
+ });
+
+ button.setId("buttonaction-" + caption);
+ button.setImmediate(true);
+
+ return button;
+ }
+
+ protected <TYPE> Component createSelectAction(String caption,
+ LinkedHashMap<String, TYPE> options, String initialValue,
+ final Command<T, TYPE> command) {
+ final String CAPTION = "caption";
+ final String VALUE = "value";
+
+ final NativeSelect select = new NativeSelect(caption);
+ select.addContainerProperty(CAPTION, String.class, "");
+ select.addContainerProperty(VALUE, Object.class, "");
+ select.setItemCaptionPropertyId(CAPTION);
+ select.setNullSelectionAllowed(false);
+ select.addListener(new Property.ValueChangeListener() {
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ Object itemId = event.getProperty().getValue();
+ Item item = select.getItem(itemId);
+ @SuppressWarnings("unchecked")
+ TYPE value = (TYPE) item.getItemProperty(VALUE).getValue();
+ doCommand(command, value);
+
+ }
+ });
+
+ for (String itemCaption : options.keySet()) {
+ Object itemId = new Object();
+ Item i = select.addItem(itemId);
+ i.getItemProperty(CAPTION).setValue(itemCaption);
+ i.getItemProperty(VALUE).setValue(options.get(itemCaption));
+ if (itemCaption.equals(initialValue)) {
+ select.setValue(itemId);
+ }
+
+ }
+
+ select.setId("selectaction-" + caption);
+
+ select.setImmediate(true);
+
+ return select;
+ }
+
+}