package com.vaadin.tests.components.tabsheet; import java.util.LinkedHashMap; import com.vaadin.server.Resource; import com.vaadin.tests.components.AbstractComponentContainerTest; import com.vaadin.ui.Component; import com.vaadin.ui.TabSheet; import com.vaadin.ui.TabSheet.CloseHandler; import com.vaadin.ui.TabSheet.SelectedTabChangeEvent; import com.vaadin.ui.TabSheet.SelectedTabChangeListener; import com.vaadin.ui.TabSheet.Tab; public class TabSheetTest<T extends TabSheet> extends AbstractComponentContainerTest<T> implements SelectedTabChangeListener { private Command<T, Integer> setTabCaption = new Command<T, Integer>() { @Override public void execute(T c, Integer value, Object data) { c.getTab(value).setCaption((String) data); } }; private Command<T, Integer> setTabIcon = new Command<T, Integer>() { @Override public void execute(T c, Integer value, Object data) { c.getTab(value).setIcon((Resource) data, "tabicon"); } }; private Command<T, Integer> setTabClosable = new Command<T, Integer>() { @Override public void execute(T c, Integer value, Object data) { c.getTab(value).setClosable((Boolean) data); } }; private Command<T, Boolean> setCloseHandlerListener = new Command<T, Boolean>() { @Override public void execute(T c, Boolean value, Object data) { if (value) { c.setCloseHandler(new CloseHandler() { @Override public void onTabClose(TabSheet tabsheet, Component c) { tabClosed(tabsheet, tabsheet.getTab(c)); tabsheet.removeComponent(c); } }); } else { c.setCloseHandler(new CloseHandler() { @Override public void onTabClose(TabSheet tabsheet, Component c) { tabsheet.removeComponent(c); } }); } } }; private Command<T, Boolean> setSelectedTabListener = new Command<T, Boolean>() { @Override public void execute(T c, Boolean value, Object data) { if (value) { c.addSelectedTabChangeListener(TabSheetTest.this); } else { c.removeSelectedTabChangeListener(TabSheetTest.this); } } }; private Command<T, Integer> selectTab = new Command<T, Integer>() { @Override public void execute(T c, Integer index, Object data) { c.setSelectedTab(c.getTab(index).getComponent()); } }; private Command<T, Boolean> hideTabs = new Command<T, Boolean>() { @Override public void execute(T c, Boolean value, Object data) { c.hideTabs(value); } }; @SuppressWarnings("unchecked") @Override protected Class<T> getTestClass() { return (Class<T>) TabSheet.class; } @Override protected void createActions() { super.createActions(); createSetTabCaptionIcon(CATEGORY_FEATURES); createSelectTab(CATEGORY_FEATURES); createClosableToggle(CATEGORY_FEATURES); createCloseHandlerToggle(CATEGORY_LISTENERS); createSelectListenerToggle(CATEGORY_LISTENERS); createHideTabsToggle(CATEGORY_FEATURES); // TODO // Insert tab at x } private void createHideTabsToggle(String category) { createBooleanAction("Hide tabs", category, false, hideTabs); } private void createSelectListenerToggle(String category) { createBooleanAction("Selected tab listener", category, false, setSelectedTabListener); } private void createCloseHandlerToggle(String category) { createBooleanAction("Close event listener (handler)", category, false, setCloseHandlerListener); } private void createClosableToggle(String category) { String closableCategory = "Set tab closable"; createCategory(closableCategory, category); for (int i = 0; i < 20; i++) { String tabClosableCategory = "Tab " + i + " closable"; createCategory(tabClosableCategory, closableCategory); createClickAction("true", tabClosableCategory, setTabClosable, i, true); createClickAction("false", tabClosableCategory, setTabClosable, i, false); } } private void createSelectTab(String category) { String selectTabCategory = "Select tab"; createCategory(selectTabCategory, category); for (int i = 0; i < 20; i++) { createClickAction("Select tab " + i, selectTabCategory, selectTab, i); } } private void createSetTabCaptionIcon(String category) { String captionCategory = "Set tab caption"; String iconCategory = "Set tab icon"; createCategory(captionCategory, category); createCategory(iconCategory, category); String captionOptions[] = new String[] { "", "{id}", "Tab {id}", "A long caption for tab {id}" }; LinkedHashMap<String, Resource> iconOptions = new LinkedHashMap<>(); iconOptions.put("-", null); iconOptions.put("16x16 (cachable)", ICON_16_USER_PNG_CACHEABLE); iconOptions.put("16x16 (uncachable)", ICON_16_USER_PNG_UNCACHEABLE); iconOptions.put("32x32 (cachable)", ICON_32_ATTENTION_PNG_CACHEABLE); iconOptions.put("32x32 (uncachable)", ICON_32_ATTENTION_PNG_UNCACHEABLE); iconOptions.put("64x64 (cachable)", ICON_64_EMAIL_REPLY_PNG_CACHEABLE); iconOptions.put("64x64 (uncachable)", ICON_64_EMAIL_REPLY_PNG_UNCACHEABLE); for (int i = 0; i < 20; i++) { String tabCaptionCategory = "Tab " + i + " caption"; String tabIconCategory = "Tab " + i + " icon"; createCategory(tabCaptionCategory, captionCategory); createCategory(tabIconCategory, iconCategory); createClickAction("(null)", tabCaptionCategory, setTabCaption, Integer.valueOf(i), null); createClickAction("(null)", tabIconCategory, setTabIcon, Integer.valueOf(i), null); for (String option : captionOptions) { option = option.replace("{id}", String.valueOf(i)); createClickAction(option, tabCaptionCategory, setTabCaption, Integer.valueOf(i), option); } for (String option : iconOptions.keySet()) { Resource icon = iconOptions.get(option); createClickAction(option, tabIconCategory, setTabIcon, Integer.valueOf(i), icon); } } } private void tabClosed(TabSheet tabSheet, Tab tab) { log("Tab " + tabSheet.getTabPosition(tab) + " closed"); } @Override public void selectedTabChange(SelectedTabChangeEvent event) { TabSheet ts = event.getTabSheet(); log("Tab " + ts.getTabPosition(ts.getTab(ts.getSelectedTab())) + " selected"); } }