summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/scripts/sampler-all-samples.html155
-rw-r--r--tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.html4
-rw-r--r--tests/src/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java49
-rw-r--r--tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html2
-rw-r--r--tests/src/com/vaadin/tests/components/table/CtrlShiftMultiselect.java53
-rw-r--r--tests/src/com/vaadin/tests/components/table/Footer.html347
-rw-r--r--tests/src/com/vaadin/tests/components/table/Footer.java134
-rw-r--r--tests/src/com/vaadin/tests/components/table/FooterClick.html72
-rw-r--r--tests/src/com/vaadin/tests/components/table/FooterClick.java71
-rw-r--r--tests/src/com/vaadin/tests/components/table/HeaderClick.html72
-rw-r--r--tests/src/com/vaadin/tests/components/table/HeaderClick.java64
-rw-r--r--tests/src/com/vaadin/tests/components/table/KeyControl.java134
-rw-r--r--tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html4
-rw-r--r--tests/src/com/vaadin/tests/components/table/PropertyValueChange.html6
-rw-r--r--tests/src/com/vaadin/tests/components/table/TableContextMenuOnField.java93
-rw-r--r--tests/src/com/vaadin/tests/components/table/TableRowHeight2.html4
-rw-r--r--tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.html4
-rw-r--r--tests/src/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java117
-rw-r--r--tests/src/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java49
-rw-r--r--tests/src/com/vaadin/tests/server/component/table/TestFooter.java94
-rw-r--r--tests/src/com/vaadin/tests/server/component/table/TestFooterClickHandlers.java83
-rw-r--r--tests/src/com/vaadin/tests/server/component/table/TestHeaderClickHandlers.java83
-rw-r--r--tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java57
23 files changed, 1739 insertions, 12 deletions
diff --git a/tests/scripts/sampler-all-samples.html b/tests/scripts/sampler-all-samples.html
index b5a7435cba..6db13b7810 100644
--- a/tests/scripts/sampler-all-samples.html
+++ b/tests/scripts/sampler-all-samples.html
@@ -1153,6 +1153,56 @@
<td></td>
<td></td>
</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
<!--Start over from the main page-->
<tr>
<td>mouseClick</td>
@@ -2175,6 +2225,27 @@
<td></td>
<td></td>
</tr>
+<!--TableFooter-->
+<tr>
+<td>screenCapture</td>
+<td></td>
+<td>TableFooter</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
<!--TableColumnReordering-->
<tr>
<td>screenCapture</td>
@@ -2385,6 +2456,69 @@
<td></td>
<td></td>
</tr>
+<!--TableMultipleSelection-->
+<tr>
+<td>screenCapture</td>
+<td></td>
+<td>TableMultipleSelection</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<!--TableClickHandlers-->
+<tr>
+<td>screenCapture</td>
+<td></td>
+<td>TableClickHandlers</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<!--TableKeyboardNavigation-->
+<tr>
+<td>screenCapture</td>
+<td></td>
+<td>TableKeyboardNavigation</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
<!--TreeSingleSelect-->
<tr>
<td>screenCapture</td>
@@ -2469,6 +2603,27 @@
<td></td>
<td></td>
</tr>
+<!--TreeKeyboardNavigation-->
+<tr>
+<td>screenCapture</td>
+<td></td>
+<td>TreeKeyboardNavigation</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>mouseClick</td>
+<td>vaadin=sampler::/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[7]/VHorizontalLayout[0]/ChildComponentContainer[1]/VNativeButton[0]</td>
+<td>1,1</td>
+</tr>
+<tr>
+<td>waitForVaadin</td>
+<td></td>
+<td></td>
+</tr>
<!--DragDropTreeSorting-->
<tr>
<td>screenCapture</td>
diff --git a/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.html b/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.html
index 16d18d2e50..28fe12f5a2 100644
--- a/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.html
+++ b/tests/src/com/vaadin/tests/components/button/ButtonUndefinedWidth.html
@@ -43,7 +43,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
@@ -53,7 +53,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VNativeButton[0]</td>
+ <td>vaadin=runcomvaadintestscomponentsbuttonButtonUndefinedWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VNativeButton[0]</td>
<td></td>
</tr>
<tr>
diff --git a/tests/src/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java b/tests/src/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java
new file mode 100644
index 0000000000..6178d25a2a
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/combobox/ComboBoxEnablesComboBox.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.components.combobox;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.ComboBox;
+
+public class ComboBoxEnablesComboBox extends TestBase {
+
+ private ComboBox cb2;
+
+ @Override
+ protected void setup() {
+ ComboBox cb = new ComboBox("Always enabled");
+ cb.setImmediate(true);
+ populate(cb);
+ cb.addListener(new ValueChangeListener() {
+
+ public void valueChange(ValueChangeEvent event) {
+ cb2.setEnabled(true);
+ }
+
+ });
+ cb2 = new ComboBox("Initially disabled");
+ cb2.setImmediate(true);
+ cb2.setEnabled(false);
+ populate(cb2);
+
+ addComponent(cb);
+ addComponent(cb2);
+ }
+
+ private void populate(ComboBox cb) {
+ for (int i = 1; i < 10; i++) {
+ cb.addItem("Item " + i);
+ }
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Selecting an item in the first combobox enables the second.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 4632;
+ }
+
+}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html b/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html
index 89e67af354..9e529836b6 100644
--- a/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html
+++ b/tests/src/com/vaadin/tests/components/table/ColumnCollapsingAndColumnExpansion.html
@@ -92,7 +92,7 @@
</tr>
<tr>
<td>contextmenu</td>
- <td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentstableColumnCollapsingAndColumnExpansion::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
diff --git a/tests/src/com/vaadin/tests/components/table/CtrlShiftMultiselect.java b/tests/src/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
new file mode 100644
index 0000000000..02f4af045b
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/CtrlShiftMultiselect.java
@@ -0,0 +1,53 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class CtrlShiftMultiselect extends TestBase {
+
+ @Override
+ protected void setup() {
+ final Table table = new Table("Multiselectable table");
+
+ table.setContainerDataSource(createContainer());
+ table.setImmediate(true);
+
+ table.setSelectable(true);
+ table.setMultiSelect(true);
+
+ table.setWidth("400px");
+ table.setHeight("400px");
+
+ addComponent(table);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Improve Table multiselect to use Ctrl and Shift for selection";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 3520;
+ }
+
+ private Container createContainer() {
+ IndexedContainer container = new IndexedContainer();
+ container.addContainerProperty("col1", String.class, "");
+ container.addContainerProperty("col2", String.class, "");
+ container.addContainerProperty("col3", String.class, "");
+
+ for (int i = 0; i < 100; i++) {
+ Item item = container.addItem("item " + i);
+ item.getItemProperty("col1").setValue("first" + i);
+ item.getItemProperty("col2").setValue("middle" + i);
+ item.getItemProperty("col3").setValue("last" + i);
+ }
+
+ return container;
+ }
+}
diff --git a/tests/src/com/vaadin/tests/components/table/Footer.html b/tests/src/com/vaadin/tests/components/table/Footer.html
new file mode 100644
index 0000000000..2d5fbe9846
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/Footer.html
@@ -0,0 +1,347 @@
+<?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>Footer</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Footer</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.Footer</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td>Footer1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td>Footer2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td>Footer3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+ <td>11,8</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VCheckBox[0]/domChild[0]</td>
+ <td>6,8</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td>Footer3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td>Footer2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td>Footer2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td>Footer3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[1]</td>
+ <td>9,10</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//td[@id='gwt-uid-3']/span/div</td>
+ <td>0,9</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[1]</td>
+ <td>12,13</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VContextMenu[0]#option1</td>
+ <td>10,7</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>-45,13</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>enterCharacter</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>fuu</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td>fuu</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>-61,2</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>enterCharacter</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>bar</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td>bar</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>-21,9</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyTextPresent</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>-18,9</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>enterCharacter</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>Footer1</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>-56,-4</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>enterCharacter</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>Footer2</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>124,17</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>enterCharacter</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>Footer3</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[2]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooter::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[3]/VHorizontalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/src/com/vaadin/tests/components/table/Footer.java b/tests/src/com/vaadin/tests/components/table/Footer.java
new file mode 100644
index 0000000000..4dc032fdd2
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/Footer.java
@@ -0,0 +1,134 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Button.ClickEvent;
+
+@SuppressWarnings("serial")
+public class Footer extends TestBase {
+
+ @Override
+ protected void setup() {
+ HorizontalLayout layout = new HorizontalLayout();
+ layout.setSpacing(true);
+
+ final Table table = new Table();
+ table.setWidth("400px");
+ table.setHeight("400px");
+
+ table.setContainerDataSource(createContainer());
+ table.setImmediate(true);
+
+ table.setColumnCollapsingAllowed(true);
+ table.setColumnReorderingAllowed(true);
+
+ table.setFooterVisible(true);
+
+ table.setColumnFooter("col1", "Footer1");
+ table.setColumnFooter("col2", "Footer2");
+ table.setColumnFooter("col3", "Footer3");
+
+ table.setColumnAlignment("col2", Table.ALIGN_CENTER);
+ table.setColumnAlignment("col3", Table.ALIGN_RIGHT);
+
+ layout.addComponent(table);
+
+ // Add some options to play with
+ VerticalLayout options = new VerticalLayout();
+ options.setSpacing(true);
+
+ final CheckBox visible = new CheckBox("Footers Visible", true);
+ visible.setImmediate(true);
+ visible.addListener(new Property.ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ table.setFooterVisible(visible.booleanValue());
+
+ }
+ });
+
+ options.addComponent(visible);
+
+ final TextField footer1Value = new TextField(null, "Footer1");
+ footer1Value.setImmediate(true);
+ Button footer1Btn = new Button("Change", new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ table.setColumnFooter("col1",
+ footer1Value.getValue() == null ? "" : footer1Value
+ .getValue().toString());
+ }
+ });
+ HorizontalLayout footer1 = new HorizontalLayout();
+ footer1.addComponent(footer1Value);
+ footer1.addComponent(footer1Btn);
+ options.addComponent(footer1);
+
+ final TextField footer2Value = new TextField(null, "Footer2");
+ footer2Value.setImmediate(true);
+ Button footer2Btn = new Button("Change", new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ table.setColumnFooter("col2",
+ footer2Value.getValue() == null ? "" : footer2Value
+ .getValue().toString());
+ }
+ });
+ HorizontalLayout footer2 = new HorizontalLayout();
+ footer2.addComponent(footer2Value);
+ footer2.addComponent(footer2Btn);
+ options.addComponent(footer2);
+
+ final TextField footer3Value = new TextField(null, "Footer3");
+ footer3Value.setImmediate(true);
+ Button footer3Btn = new Button("Change", new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ table.setColumnFooter("col3",
+ footer3Value.getValue() == null ? "" : footer3Value
+ .getValue().toString());
+ }
+ });
+ HorizontalLayout footer3 = new HorizontalLayout();
+ footer3.addComponent(footer3Value);
+ footer3.addComponent(footer3Btn);
+ options.addComponent(footer3);
+
+ layout.addComponent(options);
+
+ addComponent(layout);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Table with footer";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 1553;
+ }
+
+ private Container createContainer() {
+ IndexedContainer container = new IndexedContainer();
+ container.addContainerProperty("col1", String.class, "");
+ container.addContainerProperty("col2", String.class, "");
+ container.addContainerProperty("col3", String.class, "");
+
+ for (int i = 0; i < 100; i++) {
+ Item item = container.addItem("item " + i);
+ item.getItemProperty("col1").setValue("first" + i);
+ item.getItemProperty("col2").setValue("middle" + i);
+ item.getItemProperty("col3").setValue("last" + i);
+ }
+
+ return container;
+ }
+
+}
diff --git a/tests/src/com/vaadin/tests/components/table/FooterClick.html b/tests/src/com/vaadin/tests/components/table/FooterClick.html
new file mode 100644
index 0000000000..e9a5a41c50
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/FooterClick.html
@@ -0,0 +1,72 @@
+<?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>FooterClick</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">FooterClick</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.FooterClick</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooterClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+ <td>41,7</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyValue</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooterClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+ <td>col1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooterClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]</td>
+ <td>69,12</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyValue</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooterClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+ <td>col2</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooterClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[2]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[0]</td>
+ <td>19,3</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyValue</td>
+ <td>vaadin=runcomvaadintestscomponentstableFooterClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+ <td>col3</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/src/com/vaadin/tests/components/table/FooterClick.java b/tests/src/com/vaadin/tests/components/table/FooterClick.java
new file mode 100644
index 0000000000..07c0b83142
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/FooterClick.java
@@ -0,0 +1,71 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Table.FooterClickEvent;
+
+@SuppressWarnings("serial")
+public class FooterClick extends TestBase {
+
+ private final String COLUMN1_PROPERTY_ID = "col1";
+ private final String COLUMN2_PROPERTY_ID = "col2";
+ private final String COLUMN3_PROPERTY_ID = "col3";
+
+ @Override
+ protected void setup() {
+ final Table table = new Table();
+ table.setContainerDataSource(createContainer());
+ table.setWidth("400px");
+ table.setHeight("400px");
+ table.setImmediate(true);
+ table.setFooterVisible(true);
+
+ table.setColumnFooter(COLUMN1_PROPERTY_ID, "fuu");
+ table.setColumnFooter(COLUMN2_PROPERTY_ID, "bar");
+ table.setColumnFooter(COLUMN3_PROPERTY_ID, "fuubar");
+
+ final TextField columnField = new TextField(
+ "ProperyId of clicked column");
+
+ // Set the footer click handler
+ table.setFooterClickHandler(new Table.FooterClickHandler() {
+ public void handleFooterClick(FooterClickEvent event) {
+ columnField.setValue(event.getPropertyId());
+ }
+ });
+
+ addComponent(table);
+ addComponent(columnField);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Tests the footer click handler";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 4516;
+ }
+
+ private Container createContainer() {
+ IndexedContainer container = new IndexedContainer();
+ container.addContainerProperty(COLUMN1_PROPERTY_ID, String.class, "");
+ container.addContainerProperty(COLUMN2_PROPERTY_ID, String.class, "");
+ container.addContainerProperty(COLUMN3_PROPERTY_ID, String.class, "");
+
+ for (int i = 0; i < 100; i++) {
+ Item item = container.addItem("item " + i);
+ item.getItemProperty(COLUMN1_PROPERTY_ID).setValue("first" + i);
+ item.getItemProperty(COLUMN2_PROPERTY_ID).setValue("middle" + i);
+ item.getItemProperty(COLUMN3_PROPERTY_ID).setValue("last" + i);
+ }
+
+ return container;
+ }
+
+}
diff --git a/tests/src/com/vaadin/tests/components/table/HeaderClick.html b/tests/src/com/vaadin/tests/components/table/HeaderClick.html
new file mode 100644
index 0000000000..d1aabc3234
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/HeaderClick.html
@@ -0,0 +1,72 @@
+<?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="http://localhost:8080/" />
+<title>HeaderClick</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HeaderClick</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.table.HeaderClick</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>37,11</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyValue</td>
+ <td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+ <td>col1</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[1]</td>
+ <td>36,9</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyValue</td>
+ <td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+ <td>col2</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
+ <td>8,11</td>
+</tr>
+<tr>
+ <td>waitForVaadin</td>
+ <td></td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyValue</td>
+ <td>vaadin=runcomvaadintestscomponentstableHeaderClick::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTextField[0]</td>
+ <td>col3</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/tests/src/com/vaadin/tests/components/table/HeaderClick.java b/tests/src/com/vaadin/tests/components/table/HeaderClick.java
new file mode 100644
index 0000000000..d295e17a2b
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/HeaderClick.java
@@ -0,0 +1,64 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Table.HeaderClickEvent;
+
+@SuppressWarnings("serial")
+public class HeaderClick extends TestBase {
+
+ @Override
+ protected void setup() {
+ final Table table = new Table();
+ table.setContainerDataSource(createContainer());
+ table.setWidth("400px");
+ table.setHeight("400px");
+ table.setImmediate(true);
+
+ final TextField columnField = new TextField(
+ "ProperyId of clicked column");
+
+ // Add header click handler
+ table.setHeaderClickHandler(new Table.HeaderClickHandler() {
+ public void handleHeaderClick(HeaderClickEvent event) {
+ columnField.setValue(event.getPropertyId());
+ }
+ });
+
+
+ addComponent(table);
+ addComponent(columnField);
+
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Tests the header click handler";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 4515;
+ }
+
+ private Container createContainer() {
+ IndexedContainer container = new IndexedContainer();
+ container.addContainerProperty("col1", String.class, "");
+ container.addContainerProperty("col2", String.class, "");
+ container.addContainerProperty("col3", String.class, "");
+
+ for (int i = 0; i < 100; i++) {
+ Item item = container.addItem("item " + i);
+ item.getItemProperty("col1").setValue("first" + i);
+ item.getItemProperty("col2").setValue("middle" + i);
+ item.getItemProperty("col3").setValue("last" + i);
+ }
+
+ return container;
+ }
+
+}
diff --git a/tests/src/com/vaadin/tests/components/table/KeyControl.java b/tests/src/com/vaadin/tests/components/table/KeyControl.java
new file mode 100644
index 0000000000..b13c53a43f
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/KeyControl.java
@@ -0,0 +1,134 @@
+package com.vaadin.tests.components.table;
+
+import java.util.Set;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+public class KeyControl extends TestBase {
+
+ private final Label selected1 = new Label("No selected items.");
+ private final Table table1 = new Table("Read only table");
+
+ private final Label selected2 = new Label("No selected items");
+ private final Table table2 = new Table("Selectable table");
+
+ private final Label selected3 = new Label("Not selected items");
+ private final Table table3 = new Table("Multi-selectable table");
+
+ @Override
+ protected void setup() {
+ HorizontalLayout layout = new HorizontalLayout();
+ layout.setSpacing(true);
+ addComponent(layout);
+
+ // Create read only table
+ VerticalLayout layout1 = new VerticalLayout();
+ layout1.setSpacing(true);
+
+ table1.setContainerDataSource(createContainer());
+ table1.setWidth("300px");
+ table1.setHeight("300px");
+ table1.setImmediate(true);
+ layout1.addComponent(table1);
+
+ table1.addListener(new Table.ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ Set<String> value = (Set<String>) table1.getValue();
+ selected1
+ .setValue(value.toString() + " TOTAL: " + value.size());
+ }
+ });
+
+ layout1.addComponent(selected1);
+ layout.addComponent(layout1);
+
+ // Create single select table
+ VerticalLayout layout2 = new VerticalLayout();
+ layout2.setSpacing(true);
+
+ table2.setContainerDataSource(createContainer());
+ table2.setSelectable(true);
+ table2.setWidth("300px");
+ table2.setHeight("300px");
+ table2.setImmediate(true);
+ layout2.addComponent(table2);
+
+ table2.addListener(new Table.ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ String value = table2.getValue() == null ? "No selected items"
+ : table2.getValue().toString();
+ selected2.setValue(value);
+ }
+ });
+
+ layout2.addComponent(selected2);
+ layout.addComponent(layout2);
+
+ // Create multi select table
+ VerticalLayout layout3 = new VerticalLayout();
+ layout3.setSpacing(true);
+
+ table3.setContainerDataSource(createContainer());
+ table3.setSelectable(true);
+ table3.setMultiSelect(true);
+ table3.setWidth("300px");
+ table3.setHeight("300px");
+ table3.setImmediate(true);
+ layout3.addComponent(table3);
+
+ table3.addListener(new Table.ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ Set<String> value = (Set<String>) table3.getValue();
+ selected3.setValue(value.size() == 0 ? "No selected items"
+ : value + ": Total " + value.size() + " items");
+ }
+ });
+
+ selected3.setWidth("300px");
+ selected3.setHeight("500px");
+ layout3.addComponent(selected3);
+ layout.addComponent(layout3);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Add keyboard control to the Table";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 2390;
+ }
+
+ private Container createContainer() {
+ IndexedContainer container = new IndexedContainer();
+ container.addContainerProperty("col1", String.class, "");
+ container.addContainerProperty("col2", String.class, "");
+ container.addContainerProperty("col3", String.class, "");
+ container.addContainerProperty("col4", String.class, "");
+ container.addContainerProperty("col5", String.class, "");
+ container.addContainerProperty("col6", String.class, "");
+
+ for (int i = 0; i < 100; i++) {
+ Item item = container.addItem("item " + i);
+ item.getItemProperty("col1").setValue("First column " + i);
+ item.getItemProperty("col2").setValue("Second column " + i);
+ item.getItemProperty("col3").setValue("Third column" + i);
+ item.getItemProperty("col4").setValue("Fourth column" + i);
+ item.getItemProperty("col5").setValue("Fifth column" + i);
+ item.getItemProperty("col6").setValue("Sixth column" + i);
+ }
+
+ return container;
+ }
+
+}
diff --git a/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html b/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html
index e8dccea4e7..f82b1aedd3 100644
--- a/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html
+++ b/tests/src/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.html
@@ -23,7 +23,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VLabel[1]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VLabel[1]/domChild[0]</td>
<td></td>
</tr>
<tr>
@@ -38,7 +38,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VLabel[1]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentstableLabelEmbeddedClickThroughForTable::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VLabel[1]/domChild[0]</td>
<td></td>
</tr>
<tr>
diff --git a/tests/src/com/vaadin/tests/components/table/PropertyValueChange.html b/tests/src/com/vaadin/tests/components/table/PropertyValueChange.html
index 41f97ebb61..71d323cdc0 100644
--- a/tests/src/com/vaadin/tests/components/table/PropertyValueChange.html
+++ b/tests/src/com/vaadin/tests/components/table/PropertyValueChange.html
@@ -28,7 +28,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VFilterSelect[0]/domChild[1]</td>
+ <td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VFilterSelect[0]/domChild[1]</td>
<td></td>
</tr>
<tr>
@@ -48,7 +48,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
+ <td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
<td></td>
</tr>
<tr>
@@ -58,7 +58,7 @@
</tr>
<tr>
<td>type</td>
- <td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
+ <td>vaadin=runcomvaadintestscomponentstablePropertyValueChange::PID_Seditortable/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VTextField[0]</td>
<td>9</td>
</tr>
<tr>
diff --git a/tests/src/com/vaadin/tests/components/table/TableContextMenuOnField.java b/tests/src/com/vaadin/tests/components/table/TableContextMenuOnField.java
new file mode 100644
index 0000000000..4c6f658a24
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/TableContextMenuOnField.java
@@ -0,0 +1,93 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.event.Action;
+import com.vaadin.event.LayoutEvents.LayoutClickEvent;
+import com.vaadin.event.LayoutEvents.LayoutClickListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Link;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class TableContextMenuOnField extends TestBase {
+
+ private static final Action ACTION_MYACTION = new Action("Action!!");
+
+ @Override
+ protected void setup() {
+ Table table = new Table();
+ table.setSelectable(true);
+ table.setMultiSelect(true);
+
+ table.addActionHandler(new Action.Handler() {
+ public void handleAction(Action action, Object sender, Object target) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Action[] getActions(Object target, Object sender) {
+ return new Action[] { ACTION_MYACTION };
+ }
+ });
+
+ table.addGeneratedColumn("layout", new Table.ColumnGenerator() {
+
+ public Component generateCell(Table source, Object itemId,
+ Object columnId) {
+
+ VerticalLayout layout = new VerticalLayout();
+ layout.addComponent(new TextField());
+
+ layout.addListener(new LayoutClickListener() {
+
+ public void layoutClick(LayoutClickEvent event) {
+ getMainWindow().showNotification("HELLO");
+
+ }
+ });
+
+ return layout;
+ }
+ });
+
+ table.addGeneratedColumn("textfield", new Table.ColumnGenerator() {
+ public Component generateCell(Table source, Object itemId,
+ Object columnId) {
+ return new TextField();
+ }
+ });
+
+ table.addGeneratedColumn("link", new Table.ColumnGenerator() {
+ public Component generateCell(Table source, Object itemId,
+ Object columnId) {
+ return new Link("Link", null);
+ }
+ });
+
+ table.addGeneratedColumn("button", new Table.ColumnGenerator() {
+ public Component generateCell(Table source, Object itemId,
+ Object columnId) {
+ return new Button("Button");
+ }
+ });
+
+ table.addItem();
+ table.addItem();
+ table.addItem();
+ addComponent(table);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Right clicking on an item without a context menu should bring"
+ + "up the Tables context menu";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 4264;
+ }
+
+}
diff --git a/tests/src/com/vaadin/tests/components/table/TableRowHeight2.html b/tests/src/com/vaadin/tests/components/table/TableRowHeight2.html
index bd83c1d9dc..a440ff84fb 100644
--- a/tests/src/com/vaadin/tests/components/table/TableRowHeight2.html
+++ b/tests/src/com/vaadin/tests/components/table/TableRowHeight2.html
@@ -28,7 +28,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentstableTableRowHeight2::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VButton[1]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableRowHeight2::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[0]/VButton[1]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
@@ -38,7 +38,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentstableTableRowHeight2::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VButton[1]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentstableTableRowHeight2::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[1]/VButton[1]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
diff --git a/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.html b/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.html
index 5b5ea40168..17d17f41eb 100644
--- a/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.html
+++ b/tests/src/com/vaadin/tests/components/table/TextFieldRelativeWidth.html
@@ -28,7 +28,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentstableTextFieldRelativeWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentstableTextFieldRelativeWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[2]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
@@ -38,7 +38,7 @@
</tr>
<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestscomponentstableTextFieldRelativeWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/ScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[4]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestscomponentstableTextFieldRelativeWidth::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/FocusableScrollPanel[0]/VScrollTable$VScrollTableBody[0]/VScrollTable$VScrollTableBody$VScrollTableRow[4]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
diff --git a/tests/src/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java b/tests/src/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java
new file mode 100644
index 0000000000..1a329b17f5
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/tree/CtrlShiftMultiselect.java
@@ -0,0 +1,117 @@
+package com.vaadin.tests.components.tree;
+
+import java.util.Set;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Tree;
+
+public class CtrlShiftMultiselect extends TestBase {
+
+ private final Tree tree = new Tree();
+ private final Label valueLbl = new Label("No selection");
+
+ @Override
+ protected void setup() {
+
+ getLayout().setSpacing(true);
+
+ tree.setContainerDataSource(createContainer());
+ tree.setItemCaptionPropertyId("name");
+ tree.setWidth("300px");
+ tree.setImmediate(true);
+ tree.setSelectable(true);
+ tree.setMultiSelect(true);
+ tree.expandItemsRecursively("Item 1");
+ tree.expandItemsRecursively("Item 4");
+
+ tree.addListener(new Property.ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ if (tree.getValue() instanceof Set) {
+ Set<Object> itemIds = (Set<Object>) tree.getValue();
+ if (itemIds.size() == 0) {
+ valueLbl.setValue("No selection");
+ } else {
+ valueLbl.setValue(itemIds);
+ }
+ } else {
+ valueLbl.setValue(tree.getValue());
+ }
+ }
+ });
+
+ addComponent(tree);
+
+ valueLbl.setWidth("300px");
+ valueLbl.setHeight("600px");
+ addComponent(valueLbl);
+
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Add ctlr+shift multi selection in Tree";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 4259;
+ }
+
+ private HierarchicalContainer createContainer() {
+ HierarchicalContainer cont = new HierarchicalContainer();
+ cont.addContainerProperty("name", String.class, "");
+
+ for (int i = 0; i < 20; i++) {
+ Item item = cont.addItem("Item " + i);
+ item.getItemProperty("name").setValue("Item " + i);
+ cont.setChildrenAllowed("Item " + i, false);
+
+ if (i == 1 || i == 4) {
+ cont.setChildrenAllowed("Item " + i, true);
+ }
+
+ // Add three items to item 1
+ if (i > 1 && i < 4) {
+ cont.setParent("Item " + i, "Item 1");
+ }
+
+ // Add 5 items to item 4
+ if (i > 4 && i < 10) {
+ cont.setChildrenAllowed("Item " + i, true);
+
+ if (i == 7) {
+ item = cont.addItem("Item 71");
+ item.getItemProperty("name").setValue("Item 71");
+ cont.setParent("Item 71", "Item " + i);
+ cont.setChildrenAllowed("Item 71", false);
+
+ item = cont.addItem("Item 72");
+ item.getItemProperty("name").setValue("Item 72");
+ cont.setParent("Item 72", "Item " + i);
+ cont.setChildrenAllowed("Item 72", true);
+
+ item = cont.addItem("Item 73");
+ item.getItemProperty("name").setValue("Item 73");
+ cont.setParent("Item 73", "Item 72");
+ cont.setChildrenAllowed("Item 73", true);
+
+ item = cont.addItem("Item 74");
+ item.getItemProperty("name").setValue("Item 74");
+ cont.setParent("Item 74", "Item " + i);
+ cont.setChildrenAllowed("Item 74", true);
+ }
+
+ cont.setParent("Item " + i, "Item " + (i - 1));
+
+ }
+ }
+
+ return cont;
+ }
+
+}
diff --git a/tests/src/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java b/tests/src/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java
new file mode 100644
index 0000000000..e17fb284dc
--- /dev/null
+++ b/tests/src/com/vaadin/tests/server/component/orderedlayout/TestOrderedLayout.java
@@ -0,0 +1,49 @@
+package com.vaadin.tests.server.component.orderedlayout;
+
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.AbstractOrderedLayout;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class TestOrderedLayout extends TestCase {
+
+ public void testVLIteration() {
+ testIndexing(new VerticalLayout(), 10);
+ }
+
+ public void testHLIteration() {
+ testIndexing(new HorizontalLayout(), 12);
+ }
+
+ public void testIndexing(AbstractOrderedLayout aol, int nrComponents) {
+ Component[] components = generateComponents(nrComponents);
+ for (Component c : components) {
+ aol.addComponent(c);
+ }
+ for (int i = 0; i < nrComponents; i++) {
+ assert (aol.getComponent(i) == components[i]);
+ assert (aol.getComponentIndex(components[i]) == i);
+ }
+
+ // Iteration should be in indexed order
+ int idx = 0;
+ for (Iterator<Component> i = aol.getComponentIterator(); i.hasNext();) {
+ Component c = i.next();
+ assert (aol.getComponentIndex(c) == idx++);
+ }
+ }
+
+ private Component[] generateComponents(int nr) {
+ Component[] components = new Component[nr];
+ for (int i = 0; i < nr; i++) {
+ components[i] = new Label("" + i);
+ }
+
+ return components;
+ }
+}
diff --git a/tests/src/com/vaadin/tests/server/component/table/TestFooter.java b/tests/src/com/vaadin/tests/server/component/table/TestFooter.java
new file mode 100644
index 0000000000..ae880f8f09
--- /dev/null
+++ b/tests/src/com/vaadin/tests/server/component/table/TestFooter.java
@@ -0,0 +1,94 @@
+package com.vaadin.tests.server.component.table;
+
+import junit.framework.TestCase;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Table;
+
+/**
+ * Test case for testing the footer API
+ *
+ */
+public class TestFooter extends TestCase {
+
+ /**
+ * Tests if setting the footer visibility works properly
+ */
+ public void testFooterVisibility() {
+ Table table = new Table("Test table", createContainer());
+
+ // The footer should by default be hidden
+ assertFalse(table.isFooterVisible());
+
+ // Set footer visibility to tru should be reflected in the
+ // isFooterVisible() method
+ table.setFooterVisible(true);
+ assertTrue(table.isFooterVisible());
+ }
+
+ /**
+ * Tests adding footers to the columns
+ */
+ public void testAddingFooters() {
+ Table table = new Table("Test table", createContainer());
+
+ // Table should not contain any footers at initialization
+ assertNull(table.getColumnFooter("col1"));
+ assertNull(table.getColumnFooter("col2"));
+ assertNull(table.getColumnFooter("col3"));
+
+ // Adding column footer
+ table.setColumnFooter("col1", "Footer1");
+ assertEquals("Footer1", table.getColumnFooter("col1"));
+
+ // Add another footer
+ table.setColumnFooter("col2", "Footer2");
+ assertEquals("Footer2", table.getColumnFooter("col2"));
+
+ // Add footer for a non-existing column
+ table.setColumnFooter("fail", "FooterFail");
+ }
+
+ /**
+ * Test removing footers
+ */
+ public void testRemovingFooters() {
+ Table table = new Table("Test table", createContainer());
+ table.setColumnFooter("col1", "Footer1");
+ table.setColumnFooter("col2", "Footer2");
+
+ // Test removing footer
+ assertNotNull(table.getColumnFooter("col1"));
+ table.setColumnFooter("col1", null);
+ assertNull(table.getColumnFooter("col1"));
+
+ // The other footer should still be there
+ assertNotNull(table.getColumnFooter("col2"));
+
+ // Remove non-existing footer
+ table.setColumnFooter("fail", null);
+ }
+
+ /**
+ * Creates a container with three properties "col1,col2,col3" with 100 items
+ *
+ * @return Returns the created table
+ */
+ private static Container createContainer() {
+ IndexedContainer container = new IndexedContainer();
+ container.addContainerProperty("col1", String.class, "");
+ container.addContainerProperty("col2", String.class, "");
+ container.addContainerProperty("col3", String.class, "");
+
+ for (int i = 0; i < 100; i++) {
+ Item item = container.addItem("item " + i);
+ item.getItemProperty("col1").setValue("first" + i);
+ item.getItemProperty("col2").setValue("middle" + i);
+ item.getItemProperty("col3").setValue("last" + i);
+ }
+
+ return container;
+ }
+}
diff --git a/tests/src/com/vaadin/tests/server/component/table/TestFooterClickHandlers.java b/tests/src/com/vaadin/tests/server/component/table/TestFooterClickHandlers.java
new file mode 100644
index 0000000000..70a2c4dda1
--- /dev/null
+++ b/tests/src/com/vaadin/tests/server/component/table/TestFooterClickHandlers.java
@@ -0,0 +1,83 @@
+package com.vaadin.tests.server.component.table;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.FooterClickEvent;
+import com.vaadin.ui.Table.FooterClickHandler;
+
+/**
+ * Tests the footer click handler
+ */
+public class TestFooterClickHandlers extends TestCase {
+
+ /**
+ * Tests setting the click handler
+ */
+ public void testAddingClickHandler() {
+ final Table table = new Table();
+
+ // Create click handler
+ FooterClickHandler handler = new FooterClickHandler() {
+ public void handleFooterClick(FooterClickEvent event) {
+ }
+ };
+
+ // No predefined footer click listeners should be present
+ assertNull(table.getFooterClickHandler());
+
+ // Set the click handler
+ table.setFooterClickHandler(handler);
+ assertEquals(handler, table.getFooterClickHandler());
+ }
+
+ /**
+ * Tests changing the click handler to another one
+ */
+ public void testChangingClickHandler() {
+ final Table table = new Table();
+
+ // Create 2 click handlers
+ FooterClickHandler handler1 = new FooterClickHandler() {
+ public void handleFooterClick(FooterClickEvent event) {
+ }
+ };
+
+ FooterClickHandler handler2 = new FooterClickHandler() {
+ public void handleFooterClick(FooterClickEvent event) {
+ }
+ };
+
+ // Set the click handler
+ table.setFooterClickHandler(handler1);
+ assertEquals(handler1, table.getFooterClickHandler());
+
+ // Change the click handler to another one
+ table.setFooterClickHandler(handler2);
+ assertEquals(handler2, table.getFooterClickHandler());
+ }
+
+ /**
+ * Tests if click handler is removed
+ */
+ public void testRemovingClickHandler() {
+ final Table table = new Table();
+
+ // Create click handler
+ FooterClickHandler handler = new FooterClickHandler() {
+ public void handleFooterClick(FooterClickEvent event) {
+ }
+ };
+
+ // No predefined footer click listeners should be present
+ assertNull(table.getFooterClickHandler());
+
+ // Set the click handler
+ table.setFooterClickHandler(handler);
+ assertEquals(handler, table.getFooterClickHandler());
+
+ // Remove the click handler
+ table.setFooterClickHandler(null);
+ assertNull(table.getFooterClickHandler());
+ }
+}
diff --git a/tests/src/com/vaadin/tests/server/component/table/TestHeaderClickHandlers.java b/tests/src/com/vaadin/tests/server/component/table/TestHeaderClickHandlers.java
new file mode 100644
index 0000000000..7365e4ae2d
--- /dev/null
+++ b/tests/src/com/vaadin/tests/server/component/table/TestHeaderClickHandlers.java
@@ -0,0 +1,83 @@
+package com.vaadin.tests.server.component.table;
+
+import junit.framework.TestCase;
+
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.HeaderClickEvent;
+import com.vaadin.ui.Table.HeaderClickHandler;
+
+/**
+ * Tests the header click handler
+ */
+public class TestHeaderClickHandlers extends TestCase {
+
+ /**
+ * Tests setting the click handler
+ */
+ public void testAddingClickHandler() {
+ final Table table = new Table();
+
+ // Create click handler
+ HeaderClickHandler handler = new HeaderClickHandler() {
+ public void handleHeaderClick(HeaderClickEvent event) {
+ }
+ };
+
+ // No predefined header click listeners should be present
+ assertNull(table.getHeaderClickHandler());
+
+ // Set the click handler
+ table.setHeaderClickHandler(handler);
+ assertEquals(handler, table.getHeaderClickHandler());
+ }
+
+ /**
+ * Tests changing the click handler to another one
+ */
+ public void testChangingClickHandler() {
+ final Table table = new Table();
+
+ // Create 2 click handlers
+ HeaderClickHandler handler1 = new HeaderClickHandler() {
+ public void handleHeaderClick(HeaderClickEvent event) {
+ }
+ };
+
+ HeaderClickHandler handler2 = new HeaderClickHandler() {
+ public void handleHeaderClick(HeaderClickEvent event) {
+ }
+ };
+
+ // Set the click handler
+ table.setHeaderClickHandler(handler1);
+ assertEquals(handler1, table.getHeaderClickHandler());
+
+ // Change the click handler to another one
+ table.setHeaderClickHandler(handler2);
+ assertEquals(handler2, table.getHeaderClickHandler());
+ }
+
+ /**
+ * Tests if click handler is removed
+ */
+ public void testRemovingClickHandler() {
+ final Table table = new Table();
+
+ // Create click handler
+ HeaderClickHandler handler = new HeaderClickHandler() {
+ public void handleHeaderClick(HeaderClickEvent event) {
+ }
+ };
+
+ // No predefined header click listeners should be present
+ assertNull(table.getHeaderClickHandler());
+
+ // Set the click handler
+ table.setHeaderClickHandler(handler);
+ assertEquals(handler, table.getHeaderClickHandler());
+
+ // Remove the click handler
+ table.setHeaderClickHandler(null);
+ assertNull(table.getHeaderClickHandler());
+ }
+}
diff --git a/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java b/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java
new file mode 100644
index 0000000000..c87ebe9a91
--- /dev/null
+++ b/tests/src/com/vaadin/tests/server/component/table/TestMultipleSelection.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.server.component.table;
+
+import java.util.Arrays;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.AbstractSelect.MultiSelectMode;
+
+public class TestMultipleSelection extends TestCase {
+
+ /**
+ * Tests weather the multiple select mode is set when using Table.set
+ */
+ @SuppressWarnings("unchecked")
+ public void testSetMultipleItems() {
+ Table table = new Table("", createTestContainer());
+
+ // Tests if multiple selection is set
+ table.setMultiSelect(true);
+ assertTrue(table.isMultiSelect());
+
+ // Test multiselect by setting several items at once
+
+ table.setValue(Arrays.asList("1", new String[] { "3" }));
+ assertEquals(2, ((Set<String>) table.getValue()).size());
+ }
+
+ /**
+ * Tests setting the multiselect mode of the Table. The multiselect mode
+ * affects how mouse selection is made in the table by the user.
+ */
+ public void testSetMultiSelectMode() {
+ Table table = new Table("", createTestContainer());
+
+ // Default multiselect mode should be MultiSelectMode.DEFAULT
+ assertEquals(MultiSelectMode.DEFAULT, table.getMultiSelectMode());
+
+ // Tests if multiselectmode is set
+ table.setMultiSelectMode(MultiSelectMode.SIMPLE);
+ assertEquals(MultiSelectMode.SIMPLE, table.getMultiSelectMode());
+ }
+
+ /**
+ * Creates a testing container for the tests
+ *
+ * @return A new container with test items
+ */
+ private Container createTestContainer() {
+ IndexedContainer container = new IndexedContainer(Arrays.asList("1",
+ new String[] { "2", "3", "4" }));
+ return container;
+ }
+}