--- /dev/null
+package com.vaadin.tests.components;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.terminal.UserError;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Layout.SpacingHandler;
+
+public abstract class AbstractComponentTestCase<T extends AbstractComponent>
+ extends TestBase {
+
+ private List<T> testComponents = new ArrayList<T>();
+
+ abstract protected Class<T> getTestClass();
+
+ abstract protected void initializeComponents();
+
+ private Log log = null;
+
+ @Override
+ protected void setup() {
+ ((SpacingHandler) getLayout()).setSpacing(true);
+
+ // Create Components
+ initializeComponents();
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return null;
+ }
+
+ protected void addTestComponent(T c) {
+ testComponents.add(c);
+ addComponent(c);
+ }
+
+ protected List<T> getTestComponents() {
+ return testComponents;
+ }
+
+ public interface Command<T, VALUETYPE extends Object> {
+ public void execute(T c, VALUETYPE value, Object data);
+ }
+
+ /* COMMANDS */
+
+ protected Command<T, String> widthCommand = new Command<T, String>() {
+
+ public void execute(T t, String value, Object data) {
+ t.setWidth(value);
+ }
+ };
+ protected Command<T, String> heightCommand = new Command<T, String>() {
+
+ public void execute(T t, String value, Object data) {
+ t.setHeight(value);
+ }
+ };
+
+ protected Command<T, Boolean> enabledCommand = new Command<T, Boolean>() {
+
+ public void execute(T c, Boolean enabled, Object data) {
+ c.setEnabled(enabled);
+ }
+ };
+
+ protected Command<T, Boolean> immediateCommand = new Command<T, Boolean>() {
+
+ public void execute(T c, Boolean immediate, Object data) {
+ c.setImmediate(immediate);
+ }
+ };
+
+ protected Command<T, Boolean> requiredCommand = new Command<T, Boolean>() {
+
+ public void execute(T c, Boolean enabled, Object data) {
+ if (c instanceof Field) {
+ ((Field) c).setRequired(enabled);
+ } else {
+ throw new IllegalArgumentException(c.getClass().getName()
+ + " is not a field and cannot be set to required");
+ }
+ }
+ };
+
+ protected Command<T, Boolean> errorIndicatorCommand = new Command<T, Boolean>() {
+
+ public void execute(T c, Boolean enabled, Object data) {
+ if (enabled) {
+ c.setComponentError(new UserError("It failed!"));
+ } else {
+ c.setComponentError(null);
+
+ }
+ }
+ };
+
+ protected Command<T, Boolean> readonlyCommand = new Command<T, Boolean>() {
+
+ public void execute(T c, Boolean enabled, Object data) {
+ c.setReadOnly(enabled);
+ }
+ };
+
+ protected <VALUET> void doCommand(Command<T, VALUET> command, VALUET value) {
+ doCommand(command, value, null);
+ }
+
+ protected <VALUET> void doCommand(Command<T, VALUET> command, VALUET value,
+ Object data) {
+ for (T c : getTestComponents()) {
+ command.execute(c, value, data);
+ }
+ }
+
+ protected <VALUET> void doCommand(String commandName,
+ Command<T, VALUET> command, VALUET value) {
+ doCommand(command, value, null);
+ if (hasLog()) {
+ log(commandName + ": " + value);
+ }
+ }
+
+ protected <VALUET> void doCommand(String commandName,
+ Command<T, VALUET> command, VALUET value, Object data) {
+ doCommand(command, value, data);
+ if (hasLog()) {
+ log(commandName + ": " + value);
+ }
+ }
+
+ protected boolean hasLog() {
+ return log != null;
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Generic test case for " + getTestClass().getSimpleName();
+ }
+
+ protected void clearLog() {
+ log.clear();
+ }
+
+ protected void enableLog() {
+ if (log == null) {
+ log = new Log(5).setNumberLogRows(true);
+ getLayout().addComponent(log, 1);
+ }
+
+ }
+
+ protected void log(String msg) {
+ if (log == null) {
+ throw new IllegalStateException(
+ "Use enableLog() before calling log()");
+ }
+ log.log(msg);
+ }
+}
import com.vaadin.data.Item;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
-import com.vaadin.terminal.UserError;
-import com.vaadin.tests.util.Log;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.Field;
import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Layout.SpacingHandler;
import com.vaadin.ui.NativeSelect;
public abstract class ComponentTestCase<T extends AbstractComponent> extends
- TestBase {
+ AbstractComponentTestCase<T> {
protected static final Object CAPTION = "caption";
- private List<T> testComponents = new ArrayList<T>();
private HorizontalLayout actionLayout;
- abstract protected Class<T> getTestClass();
-
- abstract protected void initializeComponents();
-
- private Log log = null;
-
@Override
protected final void setup() {
- ((SpacingHandler) getLayout()).setSpacing(true);
-
// Create action layout so it appears before the components
actionLayout = createActionLayout();
addComponent(actionLayout);
- // Create Components
- initializeComponents();
+ super.setup();
// Create actions and add to layout
populateActionLayout();
}
- private void populateActionLayout() {
+ protected void populateActionLayout() {
for (Component c : createActions()) {
- actionLayout.addComponent(c);
- actionLayout.setComponentAlignment(c, Alignment.BOTTOM_LEFT);
+ addAction(c);
}
}
- @Override
- protected Integer getTicketNumber() {
- return null;
+ private void addAction(Component c) {
+ actionLayout.addComponent(c);
+ actionLayout.setComponentAlignment(c, Alignment.BOTTOM_LEFT);
}
/**
return actionLayout;
}
- protected void addTestComponent(T c) {
- testComponents.add(c);
- addComponent(c);
- }
-
- protected List<T> getTestComponents() {
- return testComponents;
- }
-
- public interface Command<T, VALUETYPE extends Object> {
- public void execute(T c, VALUETYPE value);
-
- }
-
protected Component createErrorIndicatorAction(boolean initialState) {
- return createCheckboxAction("Error indicators", initialState,
- new Command<T, Boolean>() {
- public void execute(T c, Boolean enabled) {
- if (enabled) {
- c.setComponentError(new UserError("It failed!"));
- } else {
- c.setComponentError(null);
-
- }
- }
-
- });
+ return createBooleanAction("Error indicators", initialState,
+ errorIndicatorCommand);
}
protected Component createEnabledAction(boolean initialState) {
- return createCheckboxAction("Enabled", initialState,
- new Command<T, Boolean>() {
- public void execute(T c, Boolean enabled) {
- c.setEnabled(enabled);
- }
- });
+ return createBooleanAction("Enabled", initialState, enabledCommand);
}
protected Component createReadonlyAction(boolean initialState) {
- return createCheckboxAction("Readonly", initialState,
- new Command<T, Boolean>() {
- public void execute(T c, Boolean enabled) {
- c.setReadOnly(enabled);
- }
- });
+ return createBooleanAction("Readonly", initialState, readonlyCommand);
}
protected Component createRequiredAction(boolean initialState) {
- return createCheckboxAction("Required", initialState,
- new Command<T, Boolean>() {
- public void execute(T c, Boolean enabled) {
- if (c instanceof Field) {
- ((Field) c).setRequired(enabled);
- } else {
- throw new IllegalArgumentException(
- c.getClass().getName()
- + " is not a field and cannot be set to required");
- }
- }
- });
+ return createBooleanAction("Required", initialState, requiredCommand);
}
- protected Component createCheckboxAction(String caption,
+ protected Component createBooleanAction(String caption,
boolean initialState, final Command<T, Boolean> command) {
CheckBox checkBox = new CheckBox(caption);
return button;
}
- protected <VALUET> void doCommand(Command<T, VALUET> command, VALUET value) {
- for (T c : getTestComponents()) {
- if (c == null) {
- continue;
- }
-
- command.execute(c, value);
- }
- }
-
protected <TYPE> Component createSelectAction(String caption,
LinkedHashMap<String, TYPE> options, String initialValue,
final Command<T, TYPE> command) {
return select;
}
- @Override
- protected String getDescription() {
- return "Generic test case for " + getTestClass().getSimpleName();
- }
-
- protected void enableLog() {
- if (log == null) {
- log = new Log(5).setNumberLogRows(true);
- getLayout().addComponent(log, 1);
- }
-
- }
-
- protected void log(String msg) {
- if (log == null) {
- throw new IllegalStateException(
- "Use enableLog() before calling log()");
- }
- log.log(msg);
- }
}
--- /dev/null
+package com.vaadin.tests.components;\r
+\r
+import java.util.HashSet;\r
+import java.util.LinkedHashMap;\r
+import java.util.List;\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.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
+public abstract class MenuBasedComponentTestCase<T extends AbstractComponent>\r
+ extends AbstractComponentTestCase<T> {\r
+\r
+ private static final Resource SELECTED_ICON = new ThemeResource(\r
+ "../runo/icons/16/ok.png");\r
+\r
+ private MenuItem mainMenu;\r
+\r
+ private MenuBar menu;\r
+\r
+ private T component;\r
+\r
+ // Used to determine if a menuItem should be selected and the other\r
+ // unselected on click\r
+ private Set<MenuItem> parentOfSelectableMenuItem = new HashSet<MenuItem>();\r
+\r
+ 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
+\r
+ @Override\r
+ protected final void setup() {\r
+ // Create menu here so it appears before the components\r
+ menu = new MenuBar();\r
+ mainMenu = menu.addItem("Settings", null);\r
+ addComponent(menu);\r
+\r
+ getLayout().setSizeFull();\r
+ enableLog();\r
+ super.setup();\r
+\r
+ // Create menu actions and trigger default actions\r
+ populateMenu();\r
+\r
+ // Clear initialization log messages\r
+ clearLog();\r
+ }\r
+\r
+ /**\r
+ * By default initializes just one instance of {@link #getTestClass()} using\r
+ * {@link #constructComponent()}.\r
+ */\r
+ @Override\r
+ protected void initializeComponents() {\r
+ component = constructComponent();\r
+ addTestComponent(component);\r
+ }\r
+\r
+ public T getComponent() {\r
+ return component;\r
+ }\r
+\r
+ @Override\r
+ protected void addTestComponent(T c) {\r
+ super.addTestComponent(c);\r
+ getLayout().setExpandRatio(c, 1);\r
+\r
+ };\r
+\r
+ /**\r
+ * Construct the component that is to be tested. This method uses a no-arg\r
+ * constructor by default. Override to customize.\r
+ * \r
+ * @return Instance of the component that is to be tested.\r
+ * @throws IllegalAccessException\r
+ * @throws InstantiationException\r
+ */\r
+ protected T constructComponent() {\r
+ try {\r
+ return getTestClass().newInstance();\r
+ } catch (Exception e) {\r
+ throw new RuntimeException("Failed to instantiate "\r
+ + getTestClass(), e);\r
+ }\r
+ }\r
+\r
+ private void populateMenu() {\r
+ createDefaultActions();\r
+ createCustomActions();\r
+ }\r
+\r
+ private void createDefaultActions() {\r
+ createBooleanAction("Immediate", CATEGORY_STATE, true, immediateCommand);\r
+ createBooleanAction("Enabled", CATEGORY_STATE, true, enabledCommand);\r
+ createBooleanAction("Readonly", CATEGORY_STATE, false, readonlyCommand);\r
+ createBooleanAction("Error indicator", CATEGORY_STATE, false,\r
+ errorIndicatorCommand);\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
+\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
+\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
+\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
+ }\r
+\r
+ protected void createWidthSelect(String category) {\r
+ LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+ options.put("Undefined", null);\r
+ options.put("50%", "50%");\r
+ options.put("100%", "100%");\r
+ for (int w = 200; w < 1000; w += 100) {\r
+ options.put(w + "px", w + "px");\r
+ }\r
+\r
+ createSelectAction("Width", category, options, "Undefined",\r
+ widthCommand, null);\r
+ }\r
+\r
+ protected void createHeightSelect(String category) {\r
+ LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+ options.put("Undefined", null);\r
+ options.put("50%", "50%");\r
+ options.put("100%", "100%");\r
+ for (int w = 200; w < 1000; w += 100) {\r
+ options.put(w + "px", w + "px");\r
+ }\r
+\r
+ createSelectAction("Height", category, options, "Undefined",\r
+ heightCommand, null);\r
+ }\r
+\r
+ protected void createBooleanAction(String caption, String category,\r
+ boolean initialState, final Command<T, Boolean> command) {\r
+ createBooleanAction(caption, category, initialState, command, null);\r
+ }\r
+\r
+ protected <DATATYPE> void createBooleanAction(String caption,\r
+ String category, boolean initialState,\r
+ final Command<T, Boolean> command, Object data) {\r
+ MenuItem categoryItem = getCategoryMenuItem(category);\r
+ MenuItem item = categoryItem.addItem(caption,\r
+ menuBooleanCommand(command, data));\r
+ setSelected(item, initialState);\r
+ doCommand(caption, command, initialState, data);\r
+ }\r
+\r
+ private MenuItem getCategoryMenuItem(String category) {\r
+ if (category == null) {\r
+ return getCategoryMenuItem("Misc");\r
+ }\r
+\r
+ if (mainMenu.getChildren() != null) {\r
+ for (MenuItem i : mainMenu.getChildren()) {\r
+ if (i.getText().equals(category)) {\r
+ return i;\r
+ }\r
+ }\r
+ }\r
+ 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
+\r
+ return new MenuBar.Command() {\r
+ public void menuSelected(MenuItem selectedItem) {\r
+ boolean selected = !isSelected(selectedItem);\r
+ doCommand(getText(selectedItem), booleanCommand, selected, data);\r
+ setSelected(selectedItem, selected);\r
+ }\r
+\r
+ };\r
+ }\r
+\r
+ protected void setSelected(MenuItem item, boolean selected) {\r
+ if (selected) {\r
+ item.setIcon(SELECTED_ICON);\r
+ } else {\r
+ item.setIcon(null);\r
+ }\r
+ }\r
+\r
+ protected boolean isSelected(MenuItem item) {\r
+ return (item.getIcon() != null);\r
+ }\r
+\r
+ private <VALUETYPE> MenuBar.Command singleSelectMenuCommand(\r
+ final com.vaadin.tests.components.ComponentTestCase.Command<T, VALUETYPE> cmd,\r
+ final VALUETYPE object, final Object data) {\r
+ return new MenuBar.Command() {\r
+ public void menuSelected(MenuItem selectedItem) {\r
+ doCommand(getText(selectedItem), cmd, object, data);\r
+\r
+ if (parentOfSelectableMenuItem.contains(selectedItem\r
+ .getParent())) {\r
+ unselectChildren(selectedItem.getParent());\r
+ setSelected(selectedItem, true);\r
+ }\r
+ }\r
+\r
+ };\r
+\r
+ }\r
+\r
+ /**\r
+ * Unselect all child menu items\r
+ * \r
+ * @param parent\r
+ */\r
+ protected void unselectChildren(MenuItem parent) {\r
+ List<MenuItem> children = parent.getChildren();\r
+ if (children == null) {\r
+ return;\r
+ }\r
+\r
+ for (MenuItem child : children) {\r
+ setSelected(child, false);\r
+ }\r
+ }\r
+\r
+ protected String getText(MenuItem item) {\r
+ if (!isCategory(item.getParent())) {\r
+ return item.getParent().getText();\r
+ } else {\r
+ return item.getText();\r
+ }\r
+ }\r
+\r
+ private boolean isCategory(MenuItem item) {\r
+ return item.getParent() == mainMenu;\r
+ }\r
+\r
+ protected <TYPE> void createSelectAction(\r
+ String caption,\r
+ String category,\r
+ LinkedHashMap<String, TYPE> options,\r
+ String initialValue,\r
+ com.vaadin.tests.components.ComponentTestCase.Command<T, TYPE> command) {\r
+ createSelectAction(caption, category, options, initialValue, command,\r
+ null);\r
+\r
+ }\r
+\r
+ protected <TYPE> void createSelectAction(\r
+ String caption,\r
+ String category,\r
+ LinkedHashMap<String, TYPE> options,\r
+ String initialValue,\r
+ com.vaadin.tests.components.ComponentTestCase.Command<T, TYPE> command,\r
+ Object data) {\r
+\r
+ MenuItem parentItem = getCategoryMenuItem(category);\r
+ MenuItem mainItem = parentItem.addItem(caption, null);\r
+\r
+ parentOfSelectableMenuItem.add(mainItem);\r
+ for (String option : options.keySet()) {\r
+ MenuBar.Command cmd = singleSelectMenuCommand(command,\r
+ options.get(option), data);\r
+ MenuItem item = mainItem.addItem(option, cmd);\r
+ if (option.equals(initialValue)) {\r
+ cmd.menuSelected(item);\r
+ }\r
+ }\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
return createSelectAction("Icon", options, "<None>",
new Command<ComboBox, String>() {
- public void execute(ComboBox c, String value) {
+ public void execute(ComboBox c, String value, Object data) {
for (Object id : c.getItemIds()) {
if (value == null) {
c.setItemIcon(id, null);
return createSelectAction("Resolution", options, "Year",\r
new Command<InlineDateField, Integer>() {\r
\r
- public void execute(InlineDateField c, Integer value) {\r
+ public void execute(InlineDateField c, Integer value,\r
+ Object data) {\r
c.setResolution(value);\r
\r
}\r
return createSelectAction("Locale", options, LOCALES[0].toString(),\r
new Command<InlineDateField, Locale>() {\r
\r
- public void execute(InlineDateField c, Locale value) {\r
+ public void execute(InlineDateField c, Locale value,\r
+ Object data) {\r
c.setCaption(c.getCaption().replaceAll(\r
c.getLocale().toString(), value.toString()));\r
c.setLocale(value);\r
return createSelectAction("Resolution", options, "Year",\r
new Command<PopupDateField, Integer>() {\r
\r
- public void execute(PopupDateField c, Integer value) {\r
+ public void execute(PopupDateField c, Integer value,\r
+ Object data) {\r
c.setResolution(value);\r
\r
}\r
return createSelectAction("Input prompt", options, "<none>",\r
new Command<PopupDateField, String>() {\r
\r
- public void execute(PopupDateField c, String value) {\r
+ public void execute(PopupDateField c, String value,\r
+ Object data) {\r
c.setInputPrompt(value);\r
\r
}\r
return createButtonAction("Toggle selection mode",
new Command<OptionGroup, Boolean>() {
- public void execute(OptionGroup og, Boolean value) {
+ public void execute(OptionGroup og, Boolean value,
+ Object data) {
if (og.isMultiSelect()) {
og.setMultiSelect(false);
og.setNullSelectionItemId(NULL_SELECTION_ID);
return createButtonAction("Invert disabled items",
new Command<OptionGroup, Boolean>() {
- public void execute(OptionGroup c, Boolean value) {
+ public void execute(OptionGroup c, Boolean value,
+ Object data) {
for (Object itemId : c.getItemIds()) {
c.setItemEnabled(itemId, !c.isItemEnabled(itemId));
}
@Override
protected void createCustomActions(List<Component> actions) {
- actions.add(createCheckboxAction("Null selection allowed", false,
+ actions.add(createBooleanAction("Null selection allowed", false,
new Command<NativeSelect, Boolean>() {
- public void execute(NativeSelect c, Boolean value) {
+ public void execute(NativeSelect c, Boolean value,
+ Object data) {
c.setNullSelectionAllowed(value);
}
}));
package com.vaadin.tests.components.table;\r
\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
import java.util.LinkedHashMap;\r
import java.util.List;\r
\r
-import com.vaadin.data.Container;\r
-import com.vaadin.data.Item;\r
-import com.vaadin.data.util.IndexedContainer;\r
import com.vaadin.event.ItemClickEvent;\r
import com.vaadin.event.ItemClickEvent.ItemClickListener;\r
-import com.vaadin.tests.components.ComponentTestCase;\r
+import com.vaadin.tests.components.MenuBasedComponentTestCase;\r
import com.vaadin.ui.AbstractSelect.MultiSelectMode;\r
-import com.vaadin.ui.Component;\r
import com.vaadin.ui.Table;\r
import com.vaadin.ui.Table.ColumnResizeEvent;\r
import com.vaadin.ui.Table.ColumnResizeListener;\r
import com.vaadin.ui.Table.HeaderClickEvent;\r
import com.vaadin.ui.Table.HeaderClickListener;\r
\r
-public class Tables extends ComponentTestCase<Table> implements\r
+public class Tables extends MenuBasedComponentTestCase<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
+ /* COMMANDS */\r
+ private Command<Table, Boolean> visibleColumnCommand = new Command<Table, Boolean>() {\r
+ public void execute(Table c, Boolean visible, Object propertyId) {\r
+ List<Object> visibleColumns = new ArrayList<Object>(Arrays.asList(c\r
+ .getVisibleColumns()));\r
+ if (visible) {\r
+ // Table should really check this... Completely fails without\r
+ // the check (#\r
+ if (!visibleColumns.contains(propertyId)) {\r
+ visibleColumns.add(propertyId);\r
+ }\r
+ } else {\r
+ visibleColumns.remove(propertyId);\r
+ }\r
+ c.setVisibleColumns(visibleColumns.toArray());\r
+ }\r
+ };\r
+\r
+ protected Command<Table, Boolean> columnResizeListenerCommand = new Command<Table, Boolean>() {\r
+\r
+ public void execute(Table c, Boolean value, Object data) {\r
+ if (value) {\r
+ c.addListener((ColumnResizeListener) Tables.this);\r
+ } else {\r
+ c.removeListener((ColumnResizeListener) Tables.this);\r
+ }\r
+ }\r
+ };\r
+\r
+ protected Command<Table, Boolean> headerClickListenerCommand = new Command<Table, Boolean>() {\r
+\r
+ public void execute(Table c, Boolean value, Object data) {\r
+ if (value) {\r
+ c.addListener((HeaderClickListener) Tables.this);\r
+ } else {\r
+ c.removeListener((HeaderClickListener) Tables.this);\r
+ }\r
+ }\r
+ };\r
+\r
+ protected Command<Table, Boolean> footerClickListenerCommand = new Command<Table, Boolean>() {\r
+\r
+ public void execute(Table c, Boolean value, Object data) {\r
+ if (value) {\r
+ c.addListener((FooterClickListener) Tables.this);\r
+ } else {\r
+ c.removeListener((FooterClickListener) Tables.this);\r
+ }\r
+ }\r
+ };\r
+\r
+ protected Command<Table, Integer> rowHeaderModeCommand = new Command<Table, Integer>() {\r
+\r
+ public void execute(Table c, Integer value, Object data) {\r
+ if (value == Table.ROW_HEADER_MODE_PROPERTY) {\r
+ c.setItemCaptionPropertyId("Column 3");\r
+ }\r
+ c.setRowHeaderMode(value);\r
+ }\r
+ };\r
+\r
+ protected Command<Table, String> footerTextCommand = new Command<Table, String>() {\r
+\r
+ public void execute(Table c, String value, Object data) {\r
+ for (Object propertyId : c.getContainerPropertyIds()) {\r
+ if (value != null) {\r
+ c.setColumnFooter(propertyId,\r
+ value.replace("{id}", propertyId.toString()));\r
+ } else {\r
+ c.setColumnFooter(propertyId, null);\r
+ }\r
+ }\r
+ }\r
+ };\r
+\r
+ public class Alignments {\r
+\r
+ }\r
+\r
+ protected Command<Table, Alignments> columnAlignmentCommand = new Command<Table, Alignments>() {\r
+\r
+ public void execute(Table c, Alignments value, Object data) {\r
+ for (Object propertyId : c.getContainerPropertyIds()) {\r
+ // TODO\r
+ }\r
+ }\r
+ };\r
+\r
+ /* COMMANDS END */\r
+\r
@Override\r
protected Class<Table> getTestClass() {\r
return Table.class;\r
}\r
\r
@Override\r
- protected void initializeComponents() {\r
- addTestComponent(createTable());\r
- enableLog();\r
+ protected void createCustomActions() {\r
+ createPageLengthSelect(CATEGORY_SIZE);\r
\r
- }\r
+ createSelectionModeSelect(CATEGORY_SELECTION);\r
\r
- private Table createTable() {\r
- Table t = new Table();\r
- return t;\r
- }\r
+ createItemClickListenerCheckbox(CATEGORY_LISTENERS);\r
+ createColumnResizeListenerCheckbox(CATEGORY_LISTENERS);\r
+ createHeaderClickListenerCheckbox(CATEGORY_LISTENERS);\r
+ createFooterClickListenerCheckbox(CATEGORY_LISTENERS);\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
+ createRowHeaderModeSelect(CATEGORY_CONTENT);\r
+\r
+ createHeaderVisibilitySelect(CATEGORY_HEADER);\r
+ createHeaderTextCheckbox(CATEGORY_HEADER);\r
+\r
+ createFooterVisibilityCheckbox(CATEGORY_FOOTER);\r
+ createFooterTextSelect(CATEGORY_FOOTER);\r
+\r
+ createColumnReorderingAllowedCheckbox(CATEGORY_FEATURE_TOGGLES);\r
+ createColumnCollapsingAllowedCheckbox(CATEGORY_FEATURE_TOGGLES);\r
+\r
+ createVisibleColumnsMultiToggle(CATEGORY_VISIBLE_COLUMNS);\r
\r
- return c;\r
}\r
\r
- @Override\r
- protected void createCustomActions(List<Component> actions) {\r
- actions.add(createNullSelectCheckbox());\r
- actions.add(createWidthSelect());\r
- actions.add(createHeightSelect());\r
- actions.add(createPageLengthSelect());\r
- actions.add(createItemsInContainerSelect());\r
- actions.add(createColumnsInContainerSelect());\r
- actions.add(createSelectionModeSelect());\r
- actions.add(createItemClickListenerCheckbox());\r
- actions.add(createColumnResizeListenerCheckbox());\r
-\r
- actions.add(createRowHeaderModeSelect());\r
-\r
- actions.add(createHeaderVisibilitySelect());\r
- actions.add(createHeaderClickListenerCheckbox());\r
- actions.add(createHeaderTextCheckbox());\r
-\r
- actions.add(createFooterVisibilityCheckbox());\r
- actions.add(createFooterClickListenerCheckbox());\r
- actions.add(createFooterTextCheckbox());\r
+ private void createColumnReorderingAllowedCheckbox(String category) {\r
+ createBooleanAction("Column reordering allowed", category, true,\r
+ new Command<Table, Boolean>() {\r
+ public void execute(Table c, Boolean value, Object data) {\r
+ c.setColumnReorderingAllowed(value);\r
+ }\r
+ });\r
+ }\r
\r
+ private void createColumnCollapsingAllowedCheckbox(String category) {\r
+ createBooleanAction("Column collapsing allowed", category, true,\r
+ new Command<Table, Boolean>() {\r
+ public void execute(Table c, Boolean value, Object data) {\r
+ c.setColumnCollapsingAllowed(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
+ visibleColumnCommand, id);\r
+ }\r
}\r
\r
- private Component createRowHeaderModeSelect() {\r
+ private void createRowHeaderModeSelect(String category) {\r
LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();\r
options.put("Explicit", Table.ROW_HEADER_MODE_EXPLICIT);\r
options.put("Explicit defaults id",\r
options.put("Item", Table.ROW_HEADER_MODE_ITEM);\r
options.put("'Column 3' property", Table.ROW_HEADER_MODE_PROPERTY);\r
\r
- return super.createSelectAction("Row header mode", options, "Hidden",\r
- new Command<Table, Integer>() {\r
-\r
- public void execute(Table c, Integer value) {\r
- if (value == Table.ROW_HEADER_MODE_PROPERTY) {\r
- c.setItemCaptionPropertyId("Column 3");\r
- }\r
- c.setRowHeaderMode(value);\r
-\r
- }\r
- });\r
+ createSelectAction("Row header mode", category, options, "Hidden",\r
+ rowHeaderModeCommand);\r
}\r
\r
- private Component createFooterTextCheckbox() {\r
- return super.createCheckboxAction("Texts in footer", false,\r
- new Command<Table, Boolean>() {\r
-\r
- public void execute(Table c, Boolean value) {\r
- for (Object propertyId : c.getContainerPropertyIds()) {\r
- if (value) {\r
- c.setColumnFooter(propertyId, "Footer: "\r
- + propertyId);\r
- } else {\r
- c.setColumnFooter(propertyId, null);\r
-\r
- }\r
- }\r
+ private void createFooterTextSelect(String category) {\r
+ LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+ options.put("None", null);\r
+ options.put("Footer X", "Footer {id}");\r
+ options.put("X", "{id}");\r
\r
- }\r
- });\r
+ createSelectAction("Texts in footer", category, options, "None",\r
+ footerTextCommand);\r
}\r
\r
- private Component createHeaderTextCheckbox() {\r
- return super.createCheckboxAction("Texts in header", false,\r
- new Command<Table, Boolean>() {\r
+ private void createHeaderTextCheckbox(String category) {\r
+ LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
+ options.put("None", null);\r
+ options.put("Col: {id}", "Col: {id}");\r
+ options.put("Header {id} - every second", "Header {id}");\r
\r
- public void execute(Table c, Boolean value) {\r
+ createSelectAction("Texts in header", category, options, "None",\r
+ new Command<Table, String>() {\r
+ public void execute(Table c, String value, Object data) {\r
+ int nr = 0;\r
for (Object propertyId : c.getContainerPropertyIds()) {\r
- if (value) {\r
- c.setColumnHeader(propertyId, "Header: "\r
- + propertyId);\r
+ nr++;\r
+ if (value != null && value.equals("Header {id}")\r
+ && nr % 2 == 0) {\r
+ c.setColumnHeader(propertyId, null);\r
+ } else if (value != null) {\r
+ c.setColumnHeader(\r
+ propertyId,\r
+ value.replace("{id}",\r
+ propertyId.toString()));\r
} else {\r
c.setColumnHeader(propertyId, null);\r
-\r
}\r
}\r
\r
});\r
}\r
\r
- private Component createItemClickListenerCheckbox() {\r
- return super.createCheckboxAction("Item click listener", false,\r
- new Command<Table, Boolean>() {\r
+ private void createItemClickListenerCheckbox(String category) {\r
+ Command<Table, Boolean> itemClickListenerCommand = new Command<Table, Boolean>() {\r
\r
- public void execute(Table c, Boolean value) {\r
- if (value) {\r
- c.addListener((ItemClickListener) Tables.this);\r
- } else {\r
- c.removeListener((ItemClickListener) Tables.this);\r
- }\r
+ public void execute(Table c, Boolean value, Object data) {\r
+ if (value) {\r
+ c.addListener((ItemClickListener) Tables.this);\r
+ } else {\r
+ c.removeListener((ItemClickListener) Tables.this);\r
+ }\r
\r
- }\r
- });\r
+ }\r
+ };\r
+ createBooleanAction("Item click listener", category, false,\r
+ itemClickListenerCommand);\r
}\r
\r
- private Component createHeaderClickListenerCheckbox() {\r
- return super.createCheckboxAction("Header click listener", false,\r
- new Command<Table, Boolean>() {\r
+ private void createHeaderClickListenerCheckbox(String category) {\r
\r
- public void execute(Table c, Boolean value) {\r
- if (value) {\r
- c.addListener((HeaderClickListener) Tables.this);\r
- } else {\r
- c.removeListener((HeaderClickListener) Tables.this);\r
- }\r
-\r
- }\r
- });\r
+ createBooleanAction("Header click listener", category, false,\r
+ headerClickListenerCommand);\r
}\r
\r
- private Component createFooterClickListenerCheckbox() {\r
- return super.createCheckboxAction("Footer click listener", false,\r
- new Command<Table, Boolean>() {\r
-\r
- public void execute(Table c, Boolean value) {\r
- if (value) {\r
- c.addListener((FooterClickListener) Tables.this);\r
- } else {\r
- c.removeListener((FooterClickListener) Tables.this);\r
- }\r
+ private void createFooterClickListenerCheckbox(String category) {\r
\r
- }\r
- });\r
+ createBooleanAction("Footer click listener", category, false,\r
+ footerClickListenerCommand);\r
}\r
\r
- private Component createColumnResizeListenerCheckbox() {\r
- return super.createCheckboxAction("Column resize listener", false,\r
- new Command<Table, Boolean>() {\r
+ private void createColumnResizeListenerCheckbox(String category) {\r
\r
- public void execute(Table c, Boolean value) {\r
- if (value) {\r
- c.addListener((ColumnResizeListener) Tables.this);\r
- } else {\r
- c.removeListener((ColumnResizeListener) Tables.this);\r
- }\r
-\r
- }\r
- });\r
+ createBooleanAction("Column resize listener", category, false,\r
+ columnResizeListenerCommand);\r
}\r
\r
// TODO:\r
// Visible columns\r
- // Column headers\r
- // Column footers\r
// Column icons\r
// Column alignments\r
// Column width\r
// Column expand ratio\r
// Column collapse\r
- // Column reordering allowed\r
- // Column collapsing allowed\r
// setCurrentPageFirstItemIndex()\r
// setColumnHeaderMode(int)\r
// setRowHeaderMode(int)\r
\r
// Cache rate\r
// CurrentPageFirstItemId\r
- private Component createNullSelectCheckbox() {\r
- return super.createCheckboxAction("NullSelection", false,\r
- new Command<Table, Boolean>() {\r
\r
- public void execute(Table c, Boolean value) {\r
- c.setNullSelectionAllowed(value);\r
- }\r
- });\r
- }\r
-\r
- private Component createFooterVisibilityCheckbox() {\r
- return createCheckboxAction("Footer visible", true,\r
+ protected void createFooterVisibilityCheckbox(String category) {\r
+ createBooleanAction("Footer visible", category, true,\r
new Command<Table, Boolean>() {\r
\r
- public void execute(Table c, Boolean value) {\r
+ public void execute(Table c, Boolean value, Object data) {\r
c.setFooterVisible(value);\r
}\r
});\r
}\r
\r
- private Component createHeaderVisibilitySelect() {\r
+ protected void createHeaderVisibilitySelect(String category) {\r
LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();\r
options.put("Explicit", Table.COLUMN_HEADER_MODE_EXPLICIT);\r
options.put("Explicit defaults id",\r
options.put("Id", Table.COLUMN_HEADER_MODE_ID);\r
options.put("Hidden", Table.COLUMN_HEADER_MODE_HIDDEN);\r
\r
- return createSelectAction("Header mode", options,\r
+ createSelectAction("Header mode", category, options,\r
"Explicit defaults id", new Command<Table, Integer>() {\r
\r
- public void execute(Table c, Integer value) {\r
+ public void execute(Table c, Integer value, Object data) {\r
c.setColumnHeaderMode(value);\r
\r
}\r
});\r
}\r
\r
- protected Component createWidthSelect() {\r
- LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
- options.put("Undefined", null);\r
- options.put("200px", "200px");\r
- options.put("500px", "500px");\r
- options.put("800px", "800px");\r
-\r
- return super.createSelectAction("Width", options, "Undefined",\r
- new Command<Table, String>() {\r
-\r
- public void execute(Table t, String value) {\r
- t.setWidth(value);\r
- }\r
- });\r
- }\r
-\r
- protected Component createHeightSelect() {\r
- LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();\r
- options.put("Undefined", null);\r
- options.put("200px", "200px");\r
- options.put("500px", "500px");\r
- options.put("800px", "800px");\r
-\r
- return super.createSelectAction("Height", options, "Undefined",\r
- new Command<Table, String>() {\r
-\r
- public void execute(Table t, String value) {\r
- t.setHeight(value);\r
- }\r
- });\r
- }\r
-\r
- protected Component createPageLengthSelect() {\r
+ protected void createPageLengthSelect(String category) {\r
LinkedHashMap<String, Integer> options = new LinkedHashMap<String, Integer>();\r
options.put("0", 0);\r
options.put("5", 5);\r
options.put("20", 20);\r
options.put("50", 50);\r
\r
- return super.createSelectAction("PageLength", options, "10",\r
+ createSelectAction("PageLength", category, options, "10",\r
new Command<Table, Integer>() {\r
\r
- public void execute(Table t, Integer value) {\r
+ public void execute(Table t, Integer value, Object data) {\r
t.setPageLength(value);\r
}\r
});\r
}\r
\r
- protected Component createItemsInContainerSelect() {\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
- return super.createSelectAction("Items in container", options, "20",\r
- new Command<Table, Integer>() {\r
-\r
- public void execute(Table t, Integer value) {\r
- t.setContainerDataSource(createContainer(t\r
- .getContainerDataSource()\r
- .getContainerPropertyIds().size(), value));\r
- }\r
- });\r
- }\r
-\r
- protected Component createColumnsInContainerSelect() {\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
- return super.createSelectAction("Columns in container", options, "10",\r
- new Command<Table, Integer>() {\r
-\r
- public void execute(Table t, Integer value) {\r
- t.setContainerDataSource(createContainer(value, t\r
- .getContainerDataSource().size()));\r
- }\r
- });\r
- }\r
-\r
private enum SelectMode {\r
NONE, SINGLE, MULTI_SIMPLE, MULTI;\r
}\r
\r
- protected Component createSelectionModeSelect() {\r
+ protected void createSelectionModeSelect(String category) {\r
LinkedHashMap<String, SelectMode> options = new LinkedHashMap<String, SelectMode>();\r
options.put("None", SelectMode.NONE);\r
options.put("Single", SelectMode.SINGLE);\r
options.put("Multi - simple", SelectMode.MULTI_SIMPLE);\r
options.put("Multi - ctrl/shift", SelectMode.MULTI);\r
\r
- return super.createSelectAction("Selection Mode", options,\r
+ createSelectAction("Selection Mode", category, options,\r
"Multi - ctrl/shift", new Command<Table, SelectMode>() {\r
\r
- public void execute(Table t, SelectMode value) {\r
+ public void execute(Table t, SelectMode value, Object data) {\r
switch (value) {\r
case NONE:\r
t.setSelectable(false);\r
}\r
\r
public void itemClick(ItemClickEvent event) {\r
- log("ItemClick on " + event.getPropertyId() + " using "\r
- + event.getButtonName());\r
+ log("ItemClick on " + event.getItemId() + "/" + event.getPropertyId()\r
+ + " using " + event.getButtonName());\r
}\r
}\r
actions.add(createButtonAction("Toggle Enabled",\r
new Command<Upload, Boolean>() {\r
\r
- public void execute(Upload c, Boolean value) {\r
+ public void execute(Upload c, Boolean value, Object data) {\r
c.setEnabled(!c.isEnabled());\r
}\r
}));\r