diff options
author | Anna Koskinen <anna@vaadin.com> | 2013-01-11 13:45:32 +0200 |
---|---|---|
committer | Anna Koskinen <anna@vaadin.com> | 2013-01-11 13:45:32 +0200 |
commit | 5b81a29acc9909d45c2299541228992aeb19813c (patch) | |
tree | ea04c992ddaf45479e959c2135868c894c2cc857 /uitest/src | |
parent | 96845bea4d6d1f01dc0d22d2a3f19058a883eb4a (diff) | |
download | vaadin-framework-5b81a29acc9909d45c2299541228992aeb19813c.tar.gz vaadin-framework-5b81a29acc9909d45c2299541228992aeb19813c.zip |
Merge of (#8519) to Vaadin 7.
Table does not refresh after selecting more rows than pagination size.
Change-Id: I352e15f9e124d13b0171b6bb1b8b287f52a056bc
Diffstat (limited to 'uitest/src')
-rw-r--r-- | uitest/src/com/vaadin/tests/components/table/LargeSelectionCausesNPE.html | 72 | ||||
-rw-r--r-- | uitest/src/com/vaadin/tests/components/table/LargeSelectionCausesNPE.java | 166 |
2 files changed, 238 insertions, 0 deletions
diff --git a/uitest/src/com/vaadin/tests/components/table/LargeSelectionCausesNPE.html b/uitest/src/com/vaadin/tests/components/table/LargeSelectionCausesNPE.html new file mode 100644 index 0000000000..8ee0bad9ec --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/LargeSelectionCausesNPE.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:8068/" /> +<title>LargeSelectionCausesNPE</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">LargeSelectionCausesNPE</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/run/com.vaadin.tests.components.table.LargeSelectionCausesNPE?restartApplication</td> + <td></td> +</tr> +<tr> + <td>mouseClick</td> + <td>8519-2</td> + <td>92,9</td> +</tr> +<tr> + <td>scroll</td> + <td>vaadin=runcomvaadintestscomponentstableLargeSelectionCausesNPE::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td> + <td>5257</td> +</tr> +<tr> + <td>waitForElementPresent</td> + <td>8519-262</td> + <td></td> +</tr> +<tr> + <td>mouseClick</td> + <td>8519-262</td> + <td>61,-5248:shift</td> +</tr> +<tr> + <td>scroll</td> + <td>vaadin=runcomvaadintestscomponentstableLargeSelectionCausesNPE::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]</td> + <td>0</td> +</tr> +<tr> + <td>waitForElementPresent</td> + <td>8519-0</td> + <td></td> +</tr> +<tr> + <td>mouseClick</td> + <td>8519-button</td> + <td>23,10</td> +</tr> +<tr> + <td>assertText</td> + <td>8519-0</td> + <td>0-version2</td> +</tr> +<tr> + <td>mouseClick</td> + <td>8519-button</td> + <td></td> +</tr> +<tr> + <td>assertText</td> + <td>8519-0</td> + <td>0</td> +</tr> + +</tbody></table> +</body> +</html> diff --git a/uitest/src/com/vaadin/tests/components/table/LargeSelectionCausesNPE.java b/uitest/src/com/vaadin/tests/components/table/LargeSelectionCausesNPE.java new file mode 100644 index 0000000000..fb782b8ded --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/LargeSelectionCausesNPE.java @@ -0,0 +1,166 @@ +package com.vaadin.tests.components.table; + +import java.util.HashSet; +import java.util.Set; + +import com.vaadin.annotations.AutoGenerated; +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.shared.ui.MarginInfo; +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; +import com.vaadin.ui.Table.Align; +import com.vaadin.ui.Table.ColumnGenerator; +import com.vaadin.ui.VerticalLayout; + +public class LargeSelectionCausesNPE extends TestBase { + + @AutoGenerated + private Table table; + + private static final String ID = "id"; + private static final String NAME = "name"; + private static final String CODE = "code"; + + @Override + protected void setup() { + addComponent(new SelectionExample()); + } + + @Override + protected String getDescription() { + return "Attempting to update table contents while selection reaches beyond cache limits causes a NPE.<br>" + + " Select a large amount of rows, e.g. from name2 to name262, return to the top of the table," + + " then try to update the first item twice.<br>" + + " Test is broken if the original values don't reappear on the second click of the button."; + } + + @Override + protected Integer getTicketNumber() { + return 8519; + } + + public class SelectionExample extends VerticalLayout { + + Table table = new Table(); + Button button = new Button("Update the first item"); + Label nameLabel = new Label(); + + HashSet<Object> markedRows = new HashSet<Object>(); + Label selected = new Label(); + + public SelectionExample() { + addComponent(table); + addComponent(button); + setMargin(new MarginInfo(true, false, false, false)); + + // Label to indicate current selection + selected.setValue("No selection"); + addComponent(selected); + + // set a style name, so we can style rows and cells + table.setStyleName("iso3166"); + + // size + table.setWidth("100%"); + table.setPageLength(5); + + // selectable + table.setSelectable(true); + table.setMultiSelect(true); + table.setImmediate(true); + + // connect data source + table.setContainerDataSource(getContainer()); + + table.addGeneratedColumn(CODE, columnGenerator); + + // turn on column reordering and collapsing + table.setColumnReorderingAllowed(true); + table.setColumnCollapsingAllowed(true); + + // set column headers + table.setVisibleColumns(new String[] { CODE, NAME, ID }); + table.setColumnHeaders(new String[] { "DummyCode", "DummyName", + "DummyId" }); + + // Column alignment + table.setColumnAlignment(ID, Align.CENTER); + + // Column width + table.setColumnWidth(CODE, 70); + table.setColumnExpandRatio(NAME, 1); + table.setColumnWidth(ID, 70); + + // listen for valueChange, a.k.a 'select' and update the label + table.addValueChangeListener(valueChangeListener); + + button.setId(getTicketNumber() + "-button"); + button.addClickListener(clickListener); + } + + Table.ValueChangeListener valueChangeListener = new Table.ValueChangeListener() { + public void valueChange(ValueChangeEvent event) { + // in multiselect mode, a Set of itemIds is returned, + // in singleselect mode the itemId is returned directly + Set<?> value = (Set<?>) event.getProperty().getValue(); + if (null == value || value.size() == 0) { + selected.setValue("No selection"); + } else { + selected.setValue("Selected: " + table.getValue()); + } + } + }; + + Button.ClickListener clickListener = new Button.ClickListener() { + + public void buttonClick(ClickEvent event) { + Property nameProperty = table.getContainerProperty(0, NAME); + if (("0").equals(nameLabel.getValue())) { + nameProperty.setValue(NAME + "0-version2"); + nameLabel.setValue("0-version2"); + } else { + nameProperty.setValue(NAME + 0); + nameLabel.setValue("0"); + } + } + }; + + public IndexedContainer getContainer() { + IndexedContainer container = new IndexedContainer(); + container.addContainerProperty(NAME, String.class, null); + container.addContainerProperty(ID, Integer.class, null); + for (int i = 0; i < 264; i++) { + String name = NAME + i; + int id = i; + Item item = container.addItem(id); + item.getItemProperty(NAME).setValue(name); + item.getItemProperty(ID).setValue(id); + } + container.sort(new Object[] { ID }, new boolean[] { true }); + return container; + } + + ColumnGenerator columnGenerator = new ColumnGenerator() { + + public Object generateCell(Table source, Object itemId, + Object columnId) { + Label label = new Label(); + label.setSizeUndefined(); + label.setValue(itemId.toString()); + label.setId(getTicketNumber() + "-" + itemId); + if (0 == (Integer) itemId) { + nameLabel = label; + } + return label; + } + + }; + } + +} |