package com.vaadin.tests.components; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; import com.vaadin.server.Resource; import com.vaadin.server.ThemeResource; import com.vaadin.server.UserError; import com.vaadin.ui.AbstractComponent; import com.vaadin.ui.Field; import com.vaadin.ui.Layout.SpacingHandler; public abstract class AbstractComponentTestCase extends TestBase { protected static final ThemeResource ICON_16_HELP_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/help.png"); protected static final ThemeResource ICON_16_FOLDER_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/folder.png"); protected static final ThemeResource ICON_16_ERROR_PNG_CACHEABLE = cacheableThemeResource("../runo/icons/16/error.png"); 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 testComponents = new ArrayList(); abstract protected Class 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(); @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 getTestComponents() { return testComponents; } public interface Command { public void execute(T c, VALUETYPE value, Object data); } /* COMMANDS */ protected Command widthCommand = new Command() { @Override public void execute(T t, String value, Object data) { t.setWidth(value); } }; protected Command heightCommand = new Command() { @Override public void execute(T t, String value, Object data) { t.setHeight(value); } }; protected Command enabledCommand = new Command() { @Override public void execute(T c, Boolean enabled, Object data) { c.setEnabled(enabled); } }; protected Command immediateCommand = new Command() { @Override public void execute(T c, Boolean immediate, Object data) { c.setImmediate(immediate); } }; protected Command errorIndicatorCommand = new Command() { @Override 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 errorMessageCommand = new Command() { @Override 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 requiredCommand = new Command() { @Override 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 requiredErrorMessageCommand = new Command() { @Override public void execute(T c, String value, Object data) { ((Field) c).setRequiredError(value); } }; protected Command descriptionCommand = new Command() { @Override public void execute(T c, String value, Object data) { c.setDescription(value); } }; protected Command readonlyCommand = new Command() { @Override public void execute(T c, Boolean enabled, Object data) { c.setReadOnly(enabled); } }; protected Command visibleCommand = new Command() { @Override public void execute(T c, Boolean enabled, Object data) { c.setVisible(enabled); } }; protected Command iconCommand = new Command() { @Override public void execute(T c, Resource value, Object data) { c.setIcon(value); } }; protected Command captionCommand = new Command() { @Override public void execute(T c, String value, Object data) { c.setCaption(value); } }; protected Command localeCommand = new Command() { @Override public void execute(T c, Locale value, Object data) { c.setLocale(value); } }; protected void doCommand(Command command, VALUET value) { doCommand(command, value, null); } protected void doCommand(Command command, VALUET value, Object data) { for (T c : getTestComponents()) { command.execute(c, value, data); } } protected void doCommand(String commandName, Command command, VALUET value) { doCommand(commandName, command, value, null); } protected void doCommand(String commandName, Command command, VALUET value, Object data) { doCommand(command, value, data); } protected Command styleNameCommand = new Command() { @Override public void execute(T c, String value, Object data) { c.setStyleName(value); } }; protected Command primaryStyleNameCommand = new Command() { @Override public void execute(T c, String value, Object data) { c.setPrimaryStyleName(value); } }; @Override protected String getDescription() { return "Generic test case for " + getTestClass().getSimpleName(); } }