From c75cf3956abddcf71ec72e0743eae1cdd52aa661 Mon Sep 17 00:00:00 2001 From: Johannes Dahlström Date: Mon, 3 Sep 2012 12:31:35 +0000 Subject: TestBench test case for #8291 svn changeset:24289/svn branch:6.8 --- .../components/table/TableReduceContainerSize.html | 67 ++++++++++ .../components/table/TableReduceContainerSize.java | 147 +++++++++++++++++++++ .../com/vaadin/tests/tickets/Ticket8291.java | 121 ----------------- 3 files changed, 214 insertions(+), 121 deletions(-) create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableReduceContainerSize.html create mode 100644 tests/testbench/com/vaadin/tests/components/table/TableReduceContainerSize.java delete mode 100644 tests/testbench/com/vaadin/tests/tickets/Ticket8291.java diff --git a/tests/testbench/com/vaadin/tests/components/table/TableReduceContainerSize.html b/tests/testbench/com/vaadin/tests/components/table/TableReduceContainerSize.html new file mode 100644 index 0000000000..9bd0149bdb --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/table/TableReduceContainerSize.html @@ -0,0 +1,67 @@ + + + + + + +TableReduceContainerSize + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TableReduceContainerSize
open/run/TableReduceContainerSize?restartApplication
scrollvaadin=runTableReduceContainerSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]19700
pause300
clickvaadin=runTableReduceContainerSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runTableReduceContainerSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VLabel[0]Index: *
clickvaadin=runTableReduceContainerSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[3]/VButton[0]/domChild[0]/domChild[0]
scrollvaadin=runTableReduceContainerSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]19700
pause300
clickvaadin=runTableReduceContainerSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[2]/VButton[0]/domChild[0]/domChild[0]
assertTextvaadin=runTableReduceContainerSize::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VHorizontalLayout[0]/ChildComponentContainer[1]/VLabel[0]Index: *
+ + diff --git a/tests/testbench/com/vaadin/tests/components/table/TableReduceContainerSize.java b/tests/testbench/com/vaadin/tests/components/table/TableReduceContainerSize.java new file mode 100644 index 0000000000..bc729ef042 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/table/TableReduceContainerSize.java @@ -0,0 +1,147 @@ +package com.vaadin.tests.components.table; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.vaadin.data.Container.Filter; +import com.vaadin.data.Item; +import com.vaadin.data.util.BeanItemContainer; +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; + +/** + * Test for #8291 and #7666: NegativeArraySizeException when Table scrolled to + * the end and its size reduced. + */ +public class TableReduceContainerSize extends TestBase { + + @Override + protected void setup() { + addComponent(new TestView()); + } + + private static class DecimateFilter implements Filter { + public boolean passesFilter(Object itemId, Item item) + throws UnsupportedOperationException { + return ((((TestObject) itemId).property3 % 10) == 0); + } + + public boolean appliesToProperty(Object propertyId) { + return true; + } + } + + private static class TestView extends HorizontalLayout { + + private Filter filter = null; + + private boolean reduceData; + + private TestView() { + final Table table = new Table(); + List data = createData(1000); + final BeanItemContainer container = new BeanItemContainer( + TestObject.class, data) { + + @Override + public int size() { + if (reduceData) { + return 100; + } else { + return super.size(); + } + } + }; + table.setContainerDataSource(container); + addComponent(table); + final Label label = new Label(); + addComponent(label); + Button button = new Button("Click"); + button.addListener(new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + try { + reduceData = !reduceData; + table.refreshRowCache(); + label.setValue("Index: " + + table.getCurrentPageFirstItemIndex()); + } catch (Exception e) { + label.setValue("Exception: " + + e.getClass().getSimpleName()); + } + } + }); + addComponent(button); + Button button2 = new Button("Filter"); + button2.addListener(new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + try { + if (filter != null) { + container.removeAllContainerFilters(); + filter = null; + } else { + filter = new DecimateFilter(); + container.addContainerFilter(filter); + } + table.refreshRowCache(); + label.setValue("Index: " + + table.getCurrentPageFirstItemIndex()); + } catch (Exception e) { + label.setValue("Exception: " + + e.getClass().getSimpleName()); + } + } + }); + addComponent(button2); + } + } + + private static List createData(int count) { + ArrayList data = new ArrayList(count); + for (int i = 0; i < count; i++) { + data.add(new TestObject("string-" + i, new Date(), i)); + } + return data; + } + + public static class TestObject { + + private String property1; + private Date property2; + private Integer property3; + + public TestObject(String property1, Date property2, Integer property3) { + this.property1 = property1; + this.property2 = property2; + this.property3 = property3; + } + + public String getProperty1() { + return property1; + } + + public Date getProperty2() { + return property2; + } + + public Integer getProperty3() { + return property3; + } + + } + + @Override + protected String getDescription() { + return "Table throws NegativeArraySizeException if container size is reduced to less than current scroll position"; + } + + @Override + protected Integer getTicketNumber() { + return 8291; + } + +} diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket8291.java b/tests/testbench/com/vaadin/tests/tickets/Ticket8291.java deleted file mode 100644 index 86b5db953b..0000000000 --- a/tests/testbench/com/vaadin/tests/tickets/Ticket8291.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.vaadin.tests.tickets; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import com.vaadin.Application; -import com.vaadin.data.Container.Filter; -import com.vaadin.data.Item; -import com.vaadin.data.util.BeanItemContainer; -import com.vaadin.ui.Button; -import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Table; -import com.vaadin.ui.Window; - -/** - * Test for #8291 and #7666: NegativeArraySizeException when Table scrolled to - * the end and its size reduced. - */ -public class Ticket8291 extends Application { - - @Override - public void init() { - setMainWindow(new Window("", new TestView())); - } - - private static class DecimateFilter implements Filter { - public boolean passesFilter(Object itemId, Item item) - throws UnsupportedOperationException { - return ((((TestObject) itemId).property3 % 10) == 0); - } - - public boolean appliesToProperty(Object propertyId) { - return true; - } - } - - private static class TestView extends HorizontalLayout { - - private Filter filter = null; - - private boolean reduceData; - - private TestView() { - final Table table = new Table(); - List data = createData(1000); - final BeanItemContainer container = new BeanItemContainer( - TestObject.class, data) { - - @Override - public int size() { - if (reduceData) { - return 100; - } else { - return super.size(); - } - } - }; - table.setContainerDataSource(container); - addComponent(table); - Button button = new Button("Click"); - button.addListener(new Button.ClickListener() { - public void buttonClick(ClickEvent event) { - reduceData = !reduceData; - table.refreshRowCache(); - } - }); - addComponent(button); - Button button2 = new Button("Filter"); - button2.addListener(new Button.ClickListener() { - public void buttonClick(ClickEvent event) { - if (filter != null) { - container.removeAllContainerFilters(); - filter = null; - } else { - filter = new DecimateFilter(); - container.addContainerFilter(filter); - } - table.refreshRowCache(); - } - }); - addComponent(button2); - } - } - - private static List createData(int count) { - ArrayList data = new ArrayList(count); - for (int i = 0; i < count; i++) { - data.add(new TestObject("string-" + i, new Date(), i)); - } - return data; - } - - public static class TestObject { - - private String property1; - private Date property2; - private Integer property3; - - public TestObject(String property1, Date property2, Integer property3) { - this.property1 = property1; - this.property2 = property2; - this.property3 = property3; - } - - public String getProperty1() { - return property1; - } - - public Date getProperty2() { - return property2; - } - - public Integer getProperty3() { - return property3; - } - - } - -} -- cgit v1.2.3