summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/src/com/vaadin/tests/components/AbstractComponentTest.java34
-rw-r--r--tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java3
-rw-r--r--tests/src/com/vaadin/tests/components/table/TableColumnAlignment.html305
-rw-r--r--tests/src/com/vaadin/tests/components/table/TableColumnHeaders244
-rw-r--r--tests/src/com/vaadin/tests/components/table/TableColumnIcons.html185
-rw-r--r--tests/src/com/vaadin/tests/components/table/TableGeneratedColumns.html223
-rw-r--r--tests/src/com/vaadin/tests/components/table/Tables.java306
7 files changed, 1269 insertions, 31 deletions
diff --git a/tests/src/com/vaadin/tests/components/AbstractComponentTest.java b/tests/src/com/vaadin/tests/components/AbstractComponentTest.java
index b00ca3025b..8344ed216a 100644
--- a/tests/src/com/vaadin/tests/components/AbstractComponentTest.java
+++ b/tests/src/com/vaadin/tests/components/AbstractComponentTest.java
@@ -57,6 +57,7 @@ public abstract class AbstractComponentTest<T extends AbstractComponent>
* Maps the category name to a menu item
*/
private Map<String, MenuItem> categoryToMenuItem = new HashMap<String, MenuItem>();
+ private Map<MenuItem, String> menuItemToCategory = new HashMap<MenuItem, String>();
// Logging
private Log log;
@@ -362,15 +363,16 @@ public abstract class AbstractComponentTest<T extends AbstractComponent>
}
/**
- * Creates category "category" in parent category "parentCategory". Each
- * category name must be globally unique.
+ * Creates category named "category" with id "categoryId" in parent category
+ * "parentCategory". Each categoryId must be globally unique.
*
* @param category
+ * @param categoryId
* @param parentCategory
* @return
*/
protected MenuItem createCategory(String category, String parentCategory) {
- if (categoryToMenuItem.containsKey(category)) {
+ if (hasCategory(category)) {
return categoryToMenuItem.get(category);
}
MenuItem item;
@@ -380,9 +382,35 @@ public abstract class AbstractComponentTest<T extends AbstractComponent>
item = getCategoryMenuItem(parentCategory).addItem(category, null);
}
categoryToMenuItem.put(category, item);
+ menuItemToCategory.put(item, category);
return item;
}
+ protected boolean hasCategory(String categoryId) {
+ return categoryToMenuItem.containsKey(categoryId);
+ }
+
+ protected void removeCategory(String categoryId) {
+ if (!hasCategory(categoryId)) {
+ throw new IllegalArgumentException("Category '" + categoryId
+ + "' does not exist");
+ }
+
+ MenuItem item = getCategoryMenuItem(categoryId);
+ Object[] children = item.getChildren().toArray();
+ for (Object child : children) {
+ if (menuItemToCategory.containsKey(child)) {
+ removeCategory(menuItemToCategory.get(child));
+ }
+ }
+ // Detach from parent
+ item.getParent().removeChild(item);
+ // Clean mappings
+ categoryToMenuItem.remove(categoryId);
+ menuItemToCategory.remove(item);
+
+ }
+
private MenuBar.Command menuBooleanCommand(
final com.vaadin.tests.components.ComponentTestCase.Command<T, Boolean> booleanCommand,
final Object data) {
diff --git a/tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java b/tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java
index 982ab02834..1b04198da0 100644
--- a/tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java
+++ b/tests/src/com/vaadin/tests/components/AbstractComponentTestCase.java
@@ -15,6 +15,9 @@ import com.vaadin.ui.Layout.SpacingHandler;
public abstract class AbstractComponentTestCase<T extends AbstractComponent>
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");
diff --git a/tests/src/com/vaadin/tests/components/table/TableColumnAlignment.html b/tests/src/com/vaadin/tests/components/table/TableColumnAlignment.html
new file mode 100644
index 0000000000..49bb86dbce
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/TableColumnAlignment.html
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+ <td></td>
+</tr>
+<!--Add some footers as it should be aligned aswell-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>22,8</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item7</td>
+ <td>37,12</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+ <td>85,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>73,6</td>
+</tr>
+<!--Align 1r,2c,3l,4r,5c-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>23,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>53,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>61,3</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>41,13</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+ <td>46,0</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>24,9</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>41,3</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+ <td>24,1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>51,8</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
+ <td>32,11</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>34,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>42,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+ <td>37,11</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>50,14</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+ <td>15,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>13,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>42,3</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+ <td>42,9</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>32,14</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+ <td>36,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>48,21</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>46,14</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+ <td>35,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>43,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
+ <td>24,11</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>aligned-1r-2c-3l-4r-5c</td>
+</tr>
+<!--Align column back to left-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>35,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>37,3</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>50,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>60,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+ <td>38,12</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>39,8</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>56,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+ <td>44,1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>53,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+ <td>30,11</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>49,9</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>44,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+ <td>44,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>36,13</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+ <td>54,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>32,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>33,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+ <td>53,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>48,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+ <td>28,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>29,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>34,12</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+ <td>36,1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>34,3</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+ <td>31,8</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>aligned-all-left</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableColumnHeaders b/tests/src/com/vaadin/tests/components/table/TableColumnHeaders
new file mode 100644
index 0000000000..9f4e6cb8da
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/TableColumnHeaders
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+ <td></td>
+</tr>
+<!--3 properties-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>63,19</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+ <td>54,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>43,3</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+ <td>17,3</td>
+</tr>
+<!--Property 1 -> "A nice column"-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>51,14</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>39,2</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>51,1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+ <td>52,12</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+ <td>46,2</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+ <td>A nice column</td>
+</tr>
+<!--Property 2 -> "A"-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>54,12</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>58,8</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item1</td>
+ <td>46,0</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item5</td>
+ <td>22,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
+ <td>31,11</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+ <td>A</td>
+</tr>
+<!--Header mode -> id-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>24,1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+ <td>51,9</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>50,1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>72,11</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+ <td>Property 1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+ <td>Property 2</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
+ <td>Property 3</td>
+</tr>
+<!--Header mode -> Explicit-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>22,9</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+ <td>43,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>34,3</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item0</td>
+ <td>48,12</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+ <td>A nice column</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+ <td>A</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
+ <td></td>
+</tr>
+<!--Header mode hidden-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>49,13</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+ <td>44,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>72,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+ <td>40,10</td>
+</tr>
+<tr>
+ <td>assertNotVisible</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]</td>
+ <td>A nice column<br /><br /><br />A<br /><br /><br />Property 3</td>
+</tr>
+<!--explicit defaults id-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>39,11</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item6</td>
+ <td>39,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>51,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item1</td>
+ <td>73,11</td>
+</tr>
+<tr>
+ <td>assertVisible</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]</td>
+ <td>A nice column<br /><br /><br />A<br /><br /><br />Property 3</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]</td>
+ <td>A nice column</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[2]</td>
+ <td>A</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[2]</td>
+ <td>Property 3</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableColumnIcons.html b/tests/src/com/vaadin/tests/components/table/TableColumnIcons.html
new file mode 100644
index 0000000000..81b8be89fa
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/TableColumnIcons.html
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+ <td></td>
+</tr>
+<!--Add icons to property 1,5,10-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>19,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>31,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>48,8</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+ <td>45,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item1</td>
+ <td>38,14</td>
+</tr>
+<!--ensure icon is there-->
+<tr>
+ <td>assertElementPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>2,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>24,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+ <td>49,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+ <td>29,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item3</td>
+ <td>51,7</td>
+</tr>
+<tr>
+ <td>assertElementPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[4]/domChild[2]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>20,12</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>45,14</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item9</td>
+ <td>36,2</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+ <td>46,14</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item4</td>
+ <td>72,10</td>
+</tr>
+<tr>
+ <td>assertElementPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[2]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>icons-on-properties-1-5-10</td>
+</tr>
+<!--Remove icons from 1 and 10-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>21,1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>42,14</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>17,6</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+ <td>52,12</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+ <td>27,9</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>45,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>53,2</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item9</td>
+ <td>45,1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item4</td>
+ <td>41,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item0</td>
+ <td>13,5</td>
+</tr>
+<tr>
+ <td>assertElementNotPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[9]/domChild[2]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertElementNotPresent</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>icon-on-5</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/src/com/vaadin/tests/components/table/TableGeneratedColumns.html b/tests/src/com/vaadin/tests/components/table/TableGeneratedColumns.html
new file mode 100644
index 0000000000..19326e9f12
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/TableGeneratedColumns.html
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.Tables?restartApplication</td>
+ <td></td>
+</tr>
+<!--Hide log to allow screenshots to be consistent-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item1</td>
+ <td>23,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item0</td>
+ <td>58,13</td>
+</tr>
+<!--width 700px-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>44,2</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item2</td>
+ <td>41,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>36,4</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item8</td>
+ <td>53,17</td>
+</tr>
+<!--2 properties-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>31,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item5</td>
+ <td>36,11</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item0</td>
+ <td>86,8</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>22,7</td>
+</tr>
+<!--add 100% wide button-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>27,8</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+ <td>37,8</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+ <td>77,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>45,10</td>
+</tr>
+<!--Ensure button is resized with column-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+ <td>1,11</td>
+</tr>
+<tr>
+ <td>dragAndDrop</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+ <td>-100,0</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>button-100%-after-column-resize</td>
+</tr>
+<!--Add undefined wide label-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>45,21</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item8</td>
+ <td>30,2</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item4</td>
+ <td>109,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item3</td>
+ <td>71,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>button-and-label</td>
+</tr>
+<!--Reload to relayout (this shouldn't be necessary)-->
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.Tables</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>button-and-label-after-reload</td>
+</tr>
+<!--Align generated button right (should not make a difference)-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>17,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>48,11</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item2</td>
+ <td>39,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>53,13</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+ <td>16,6</td>
+</tr>
+<!--Align generated label right (should make a difference)-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_Smenu#item0</td>
+ <td>17,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[0]/VMenuBar[0]#item9</td>
+ <td>48,11</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[1]/VMenuBar[0]#item3</td>
+ <td>39,10</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[2]/VMenuBar[0]#item2</td>
+ <td>53,13</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::Root/VOverlay[3]/VMenuBar[0]#item2</td>
+ <td>16,6</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>label-aligned-right</td>
+</tr>
+<!--Resize right aligned column with undef wide Label-->
+<tr>
+ <td>dragAndDrop</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
+ <td>-20,0</td>
+</tr>
+<tr>
+ <td>dragAndDrop</td>
+ <td>vaadin=runcomvaadintestscomponentstableTables::PID_StestComponent/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
+ <td>20,0</td>
+</tr>
+<!--Should match after resizing back and forth-->
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>label-aligned-right</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/src/com/vaadin/tests/components/table/Tables.java b/tests/src/com/vaadin/tests/components/table/Tables.java
index dc11022027..f663fbb48b 100644
--- a/tests/src/com/vaadin/tests/components/table/Tables.java
+++ b/tests/src/com/vaadin/tests/components/table/Tables.java
@@ -8,9 +8,14 @@ import java.util.List;
import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
+import com.vaadin.terminal.Resource;
import com.vaadin.tests.components.select.AbstractSelectTestCase;
import com.vaadin.ui.AbstractSelect.MultiSelectMode;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.ColumnGenerator;
import com.vaadin.ui.Table.ColumnResizeEvent;
import com.vaadin.ui.Table.ColumnResizeListener;
import com.vaadin.ui.Table.FooterClickEvent;
@@ -25,7 +30,7 @@ public class Tables<T extends Table> extends AbstractSelectTestCase<T>
protected static final String CATEGORY_ROWS = "Rows";
private static final String CATEGORY_HEADER = "Header";
private static final String CATEGORY_FOOTER = "Footer";
- private static final String CATEGORY_VISIBLE_COLUMNS = "Visible columns";
+ private static final String CATEGORY_COLUMNS = "Columns";
@Override
protected Class<T> getTestClass() {
@@ -33,7 +38,15 @@ public class Tables<T extends Table> extends AbstractSelectTestCase<T>
}
/* COMMANDS */
- private Command<T, Boolean> visibleColumnCommand = new Command<T, Boolean>() {
+ private Command<T, String> columnAlignmentCommand = new Command<T, String>() {
+
+ public void execute(T c, String alignment, Object propertyId) {
+ c.setColumnAlignment(propertyId, alignment);
+ }
+
+ };
+
+ private Command<T, Boolean> columnVisibleCommand = new Command<T, Boolean>() {
public void execute(Table c, Boolean visible, Object propertyId) {
List<Object> visibleColumns = new ArrayList<Object>(Arrays.asList(c
.getVisibleColumns()));
@@ -50,6 +63,14 @@ public class Tables<T extends Table> extends AbstractSelectTestCase<T>
}
};
+ private Command<T, Boolean> columnCollapsed = new Command<T, Boolean>() {
+
+ public void execute(T c, Boolean collapsed, Object propertyId) {
+ c.setColumnCollapsed(propertyId, collapsed);
+
+ }
+ };
+
protected Command<T, Boolean> columnResizeListenerCommand = new Command<T, Boolean>() {
public void execute(Table c, Boolean value, Object data) {
@@ -107,16 +128,10 @@ public class Tables<T extends Table> extends AbstractSelectTestCase<T>
}
};
- public class Alignments {
-
- }
+ protected Command<T, Object> alignColumnLeftCommand = new Command<T, Object>() {
- protected Command<T, Alignments> columnAlignmentCommand = new Command<T, Alignments>() {
-
- public void execute(T c, Alignments value, Object data) {
- // TODO
- // for (Object propertyId : c.getContainerPropertyIds()) {
- // }
+ public void execute(T c, Object propertyId, Object data) {
+ c.setColumnAlignment(propertyId, (String) data);
}
};
@@ -140,6 +155,110 @@ public class Tables<T extends Table> extends AbstractSelectTestCase<T>
}
}
};
+ private Command<T, Integer> columnWidthCommand = new Command<T, Integer>() {
+
+ public void execute(T c, Integer width, Object propertyId) {
+ c.setColumnWidth(propertyId, width);
+
+ }
+ };
+
+ private Command<T, Resource> columnIconCommand = new Command<T, Resource>() {
+
+ public void execute(T c, Resource icon, Object propertyId) {
+ c.setColumnIcon(propertyId, icon);
+
+ }
+ };
+ private Command<T, Integer> columnHeaderModeCommand = new Command<T, Integer>() {
+
+ public void execute(T c, Integer columnHeaderMode, Object data) {
+ c.setColumnHeaderMode(columnHeaderMode);
+
+ }
+ };
+ private Command<T, String> columnHeaderCommand = new Command<T, String>() {
+
+ public void execute(T c, String header, Object propertyId) {
+ c.setColumnHeader(propertyId, header);
+
+ }
+ };
+ private Command<T, Float> columnExpandRatioCommand = new Command<T, Float>() {
+
+ public void execute(T c, Float expandRatio, Object propertyId) {
+ c.setColumnExpandRatio(propertyId, expandRatio);
+ }
+ };
+
+ private class GeneratedColumn {
+ private Class<? extends Component> type;
+ private String width;
+
+ public GeneratedColumn(Class<? extends Component> type, String width) {
+ super();
+ this.type = type;
+ this.width = width;
+ }
+ }
+
+ String generatedColumnId = "Generated ";
+ int generatedColumnNextNr = 1;
+
+ private Command<T, GeneratedColumn> addGeneratedColumnCommand = new Command<T, GeneratedColumn>() {
+
+ public void execute(T c, final GeneratedColumn col, Object data) {
+ while (c.getColumnGenerator(generatedColumnId
+ + generatedColumnNextNr) != null) {
+ generatedColumnNextNr++;
+ }
+
+ c.addGeneratedColumn(generatedColumnId + generatedColumnNextNr,
+ new ColumnGenerator() {
+
+ public Component generateCell(Table source,
+ Object itemId, Object columnId) {
+ if (col.type == Button.class) {
+ Button b = new Button();
+ b.setCaption(itemId + "/" + columnId);
+ b.setWidth(col.width);
+ return b;
+ } else if (col.type == Label.class) {
+ Label l = new Label();
+ l.setValue(itemId + "/" + columnId);
+ l.setWidth(col.width);
+ return l;
+ }
+
+ return null;
+ }
+ });
+ generatedColumnNextNr++;
+ createColumnOptions(false);
+
+ }
+ };
+ private Command<T, Object> removeGeneratedColumnsCommand = new Command<T, Object>() {
+
+ public void execute(T c, Object value, Object data) {
+ for (int i = 0; i < generatedColumnNextNr; i++) {
+ String columnId = generatedColumnId + i;
+ if (c.getColumnGenerator(columnId) != null) {
+ c.removeGeneratedColumn(columnId);
+ }
+
+ }
+ createColumnOptions(false);
+
+ }
+ };
+ private Command<T, Boolean> setSortEnabledCommand = new Command<T, Boolean>() {
+
+ public void execute(T c, Boolean value, Object data) {
+ c.setSortDisabled(!value);
+
+ }
+ };
/* COMMANDS END */
@@ -168,9 +287,52 @@ public class Tables<T extends Table> extends AbstractSelectTestCase<T>
createColumnReorderingAllowedCheckbox(CATEGORY_FEATURES);
createColumnCollapsingAllowedCheckbox(CATEGORY_FEATURES);
- createVisibleColumnsMultiToggle(CATEGORY_VISIBLE_COLUMNS);
createContextMenuAction(CATEGORY_FEATURES);
+ createColumnHeaderMode(CATEGORY_FEATURES);
+ createAddGeneratedColumnAction(CATEGORY_FEATURES);
+
+ createBooleanAction("Sort enabled", CATEGORY_FEATURES, true,
+ setSortEnabledCommand);
+ createColumnOptions(true);
+ }
+
+ private void createAddGeneratedColumnAction(String categoryFeatures) {
+ String category = "Generated columns";
+ createCategory(category, categoryFeatures);
+ createClickAction("Add Button", category, addGeneratedColumnCommand,
+ new GeneratedColumn(Button.class, null));
+ createClickAction("Add 200px wide Button", category,
+ addGeneratedColumnCommand, new GeneratedColumn(Button.class,
+ "200px"));
+ createClickAction("Add 100% wide Button", category,
+ addGeneratedColumnCommand, new GeneratedColumn(Button.class,
+ "100%"));
+ createClickAction("Add Label", category, addGeneratedColumnCommand,
+ new GeneratedColumn(Label.class, null));
+ createClickAction("Add 100px Label", category,
+ addGeneratedColumnCommand, new GeneratedColumn(Label.class,
+ "100px"));
+ createClickAction("Add 100% wide Label", category,
+ addGeneratedColumnCommand, new GeneratedColumn(Label.class,
+ "100%"));
+
+ createClickAction("Remove generated columns", category,
+ removeGeneratedColumnsCommand, null);
+ }
+
+ private void createColumnHeaderMode(String category) {
+ LinkedHashMap<String, Integer> columnHeaderModeOptions = new LinkedHashMap<String, Integer>();
+ columnHeaderModeOptions.put("Hidden", Table.COLUMN_HEADER_MODE_HIDDEN);
+ columnHeaderModeOptions.put("Id", Table.COLUMN_HEADER_MODE_ID);
+ columnHeaderModeOptions.put("Explicit",
+ Table.COLUMN_HEADER_MODE_EXPLICIT);
+ columnHeaderModeOptions.put("Explicit defaults id",
+ Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
+
+ createSelectAction("Column header mode", category,
+ columnHeaderModeOptions, "Explicit defaults id",
+ columnHeaderModeCommand);
}
private void createValueSelection(String categorySelection) {
@@ -234,14 +396,104 @@ public class Tables<T extends Table> extends AbstractSelectTestCase<T>
});
}
- private void createVisibleColumnsMultiToggle(String category) {
- LinkedHashMap<String, Object> options = new LinkedHashMap<String, Object>();
+ private void createColumnOptions(boolean init) {
+ if (!init && !hasCategory(CATEGORY_COLUMNS)) {
+ return;
+ }
+
+ long start = System.currentTimeMillis();
+ if (!init) {
+ removeCategory(CATEGORY_COLUMNS);
+ }
+
for (Object id : getComponent().getContainerPropertyIds()) {
- options.put(id.toString(), id);
+ String name = id.toString();
+ createCategory(name, CATEGORY_COLUMNS);
+ createColumnOption(name, id);
+ }
+ for (int i = 0; i < generatedColumnNextNr; i++) {
+ String id = generatedColumnId + i;
+ String name = id;
+ if (getTestComponents().get(0).getColumnGenerator(id) != null) {
+ createCategory(name, CATEGORY_COLUMNS);
+ createColumnOption(name, id);
+ }
+ }
+
+ long end = System.currentTimeMillis();
+ System.err.println("Create options took " + (end - start) + "ms");
+ }
+
+ private class Timer {
+ private long start, last;
+
+ private Timer() {
+ start = System.currentTimeMillis();
+ last = System.currentTimeMillis();
}
- createMultiToggleAction("Visible columns", category, options,
- visibleColumnCommand, true);
+ public void log(String msg) {
+ long now = System.currentTimeMillis();
+ System.err.println("[This: " + (now - last) + "ms, total: "
+ + (now - start) + "ms]: " + msg);
+ last = now;
+ }
+ }
+
+ private void createColumnOption(String category, Object propertyId) {
+ Timer t = new Timer();
+ createBooleanAction("Visible", category, true, columnVisibleCommand,
+ propertyId);
+ t.log("Visible");
+ createBooleanAction("Collapsed", category, false, columnCollapsed,
+ propertyId);
+ t.log("Collapsed");
+ LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
+ options.put("Left", Table.ALIGN_LEFT);
+ options.put("Center", Table.ALIGN_CENTER);
+ options.put("Right", Table.ALIGN_RIGHT);
+
+ createSelectAction("Alignment", category, options, "Left",
+ columnAlignmentCommand, propertyId);
+ t.log("Alignment");
+ LinkedHashMap<String, Integer> widthOptions = new LinkedHashMap<String, Integer>();
+ widthOptions.put("- remove -", -1);
+ for (int i : new int[] { 0, 1, 10, 100, 200, 400 }) {
+ widthOptions.put(i + "px", i);
+ }
+ createSelectAction("Width", category, widthOptions, "- remove -",
+ columnWidthCommand, propertyId);
+ t.log("Width");
+
+ LinkedHashMap<String, Resource> iconOptions = new LinkedHashMap<String, Resource>();
+ iconOptions.put("- none -", null);
+ iconOptions.put("ok 16x16", ICON_16_USER_PNG_CACHEABLE);
+ iconOptions.put("help 16x16", ICON_16_HELP_PNG_CACHEABLE);
+ iconOptions.put("folder 16x16", ICON_16_FOLDER_PNG_CACHEABLE);
+ iconOptions.put("attention 32x32", ICON_32_ATTENTION_PNG_CACHEABLE);
+ createSelectAction("Icon", category, iconOptions, "- none -",
+ columnIconCommand, propertyId);
+
+ t.log("Icon");
+ LinkedHashMap<String, String> columnHeaderOptions = new LinkedHashMap<String, String>();
+ columnHeaderOptions.put("- none -", null);
+ columnHeaderOptions.put("A", "A");
+ columnHeaderOptions.put("A nice column", "A nice column");
+
+ createSelectAction("Column header", category, columnHeaderOptions,
+ "- none -", columnHeaderCommand, propertyId);
+ t.log("Header");
+ LinkedHashMap<String, Float> expandOptions = new LinkedHashMap<String, Float>();
+ expandOptions.put("- remove -", -1f);
+ for (float i : new float[] { 0, 1, 2, 3, 4, 5 }) {
+ expandOptions.put(i + "", i);
+ }
+ createSelectAction("Expand ratio", category, expandOptions,
+ "- remove -", columnExpandRatioCommand, propertyId);
+ t.log("Expand");
+ // Footer text (move)
+ // Header text (move)
+
}
private void createRowHeaderModeSelect(String category) {
@@ -318,20 +570,9 @@ public class Tables<T extends Table> extends AbstractSelectTestCase<T>
}
// TODO:
- // Visible columns
- // Column icons
- // Column alignments
- // Column width
- // Column expand ratio
- // Column collapse
// setCurrentPageFirstItemIndex()
- // setColumnHeaderMode(int)
- // setRowHeaderMode(int)
- // Generated column
// Cell style generator
// Editable
- // Context menu
-
// Cache rate
// CurrentPageFirstItemId
@@ -433,4 +674,13 @@ public class Tables<T extends Table> extends AbstractSelectTestCase<T>
+ event.getButtonName());
}
+ @Override
+ protected void updateContainer() {
+ super.updateContainer();
+
+ // Recreate for the new properties
+ createColumnOptions(false);
+
+ }
+
}