diff options
author | Johannes Dahlström <johannesd@vaadin.com> | 2013-01-23 13:14:18 +0200 |
---|---|---|
committer | Johannes Dahlström <johannesd@vaadin.com> | 2013-02-14 15:15:11 +0200 |
commit | 7a111fc541dcc507032cdad6799b477df6d4833f (patch) | |
tree | 426d7a0e7f971562cd5c0be265ae374dcca74802 /uitest/src/com/vaadin/tests/components/table | |
parent | 12996f599cf5284b4c2994764e26e700011e1a64 (diff) | |
download | vaadin-framework-7a111fc541dcc507032cdad6799b477df6d4833f.tar.gz vaadin-framework-7a111fc541dcc507032cdad6799b477df6d4833f.zip |
Merge of (#6160) and (#10470) to Vaadin 7.
Cache handling update.
Change-Id: I81ba74d457eb484f6f2c350629534ab284ead7b7
Diffstat (limited to 'uitest/src/com/vaadin/tests/components/table')
-rw-r--r-- | uitest/src/com/vaadin/tests/components/table/EmptyRowsWhenScrolling.java | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/uitest/src/com/vaadin/tests/components/table/EmptyRowsWhenScrolling.java b/uitest/src/com/vaadin/tests/components/table/EmptyRowsWhenScrolling.java new file mode 100644 index 0000000000..c1ae9b4118 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/EmptyRowsWhenScrolling.java @@ -0,0 +1,275 @@ +package com.vaadin.tests.components.table; + +import java.util.Random; + +import com.vaadin.annotations.AutoGenerated; +import com.vaadin.data.util.BeanContainer; +import com.vaadin.event.ShortcutAction.KeyCode; +import com.vaadin.server.ClassResource; +import com.vaadin.server.Resource; +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.AbsoluteLayout; +import com.vaadin.ui.Alignment; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.Embedded; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Notification; +import com.vaadin.ui.Table; +import com.vaadin.ui.Table.ColumnGenerator; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; + +/** + * This test cannot be automated. http://dev.vaadin.com/ticket/6160, base code + * by user radosdesign. + * + * The test fails if even occasionally empty rows appear in the table. A + * relatively good way to get them (before the fix) is to wait for the page to + * load, move the scrollbar down, press 'R' before the rows have time to be + * rendered, and then move the scrollbar up when no rows have been rendered yet. + * After this, when you scroll down slowly there may be empty rows. This doesn't + * happen always, and you may need to force the threads slower to get it to + * happen at all. On a slow 32-bit Windows 7 with Chrome version 22.0.1229.94 m + * (no GWT dev mode) this test has managed to reproduce the problem maybe nine + * times out of ten. + * + * @author Anna Koskinen / Vaadin Oy + * + */ +public class EmptyRowsWhenScrolling extends UI { + + @Override + public void init(VaadinRequest request) { + getPage().setTitle("Simpletable Application"); + AppView appView = new AppView(this); + setContent(appView); + addAction(new Button.ClickShortcut(appView.getBtnRefreshTable(), + KeyCode.R)); + } + + private class AppView extends CustomComponent { + + @AutoGenerated + private AbsoluteLayout mainLayout; + @AutoGenerated + private VerticalLayout verticalLayout_1; + @AutoGenerated + private Table table; + @AutoGenerated + private HorizontalLayout horizontalLayout_1; + @AutoGenerated + private Button btnRefreshTable; + + /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ + + /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ + + /** + * The constructor should first build the main layout, set the + * composition root and then do any custom initialization. + * + * The constructor will not be automatically regenerated by the visual + * editor. + */ + public AppView(final UI application) { + buildMainLayout(); + setCompositionRoot(mainLayout); + + // Container with sample data + BeanContainer<Integer, SimpleBean> container = new BeanContainer<Integer, SimpleBean>( + SimpleBean.class); + container.setBeanIdProperty("id"); + for (int i = 1; i <= 50; ++i) { + container.addBean(new SimpleBean(i, "image", + "Column1 row " + i, "Column2 row " + i, "Column3 row " + + i, "Column4 row " + i)); + } + table.setContainerDataSource(container); + table.setEditable(true); + table.setColumnReorderingAllowed(true); + table.setVisibleColumns(new String[] { "image", "id", "col1", + "col2", "col3", "col4" }); + table.addGeneratedColumn("image", new ColumnGenerator() { + public Object generateCell(Table source, Object itemId, + Object columnId) { + int imgNum = new Random().nextInt(5) + 1; + try { + // Simulate background work + System.out + .println("Generated column for image /com/example/simpletable/img/px50-" + + imgNum + ".jpg"); + Thread.sleep(50); + } catch (InterruptedException e) { + e.printStackTrace(); + } + Resource resource = new ClassResource( + "/com/example/simpletable/img/px50-" + imgNum + + ".jpg"); + Embedded image = new Embedded("", resource); + image.setWidth("50px"); + image.setHeight("50px"); + image.addClickListener(new com.vaadin.event.MouseEvents.ClickListener() { + public void click( + com.vaadin.event.MouseEvents.ClickEvent event) { + Notification.show("Image clicked!"); + } + }); + return image; + } + }); + + // Refresh table button + getBtnRefreshTable().addClickListener(new ClickListener() { + public void buttonClick(ClickEvent event) { + table.refreshRowCache(); + } + }); + } + + @AutoGenerated + private AbsoluteLayout buildMainLayout() { + // common part: create layout + mainLayout = new AbsoluteLayout(); + mainLayout.setImmediate(false); + mainLayout.setWidth("100%"); + mainLayout.setHeight("100%"); + + // top-level component properties + setWidth("100.0%"); + setHeight("100.0%"); + + // verticalLayout_1 + verticalLayout_1 = buildVerticalLayout_1(); + mainLayout.addComponent(verticalLayout_1, "top:0.0px;left:0.0px;"); + + return mainLayout; + } + + @AutoGenerated + private VerticalLayout buildVerticalLayout_1() { + // common part: create layout + verticalLayout_1 = new VerticalLayout(); + verticalLayout_1.setImmediate(false); + verticalLayout_1.setWidth("100.0%"); + verticalLayout_1.setHeight("100.0%"); + verticalLayout_1.setMargin(false); + + // horizontalLayout_1 + horizontalLayout_1 = buildHorizontalLayout_1(); + verticalLayout_1.addComponent(horizontalLayout_1); + + // table_1 + table = new Table(); + table.setImmediate(false); + table.setWidth("100.0%"); + table.setHeight("100.0%"); + verticalLayout_1.addComponent(table); + verticalLayout_1.setExpandRatio(table, 1.0f); + + return verticalLayout_1; + } + + @AutoGenerated + private HorizontalLayout buildHorizontalLayout_1() { + // common part: create layout + horizontalLayout_1 = new HorizontalLayout(); + horizontalLayout_1.setImmediate(false); + horizontalLayout_1.setWidth("100.0%"); + horizontalLayout_1.setHeight("-1px"); + horizontalLayout_1.setMargin(false); + + // btnRefreshTable + setBtnRefreshTable(new Button()); + getBtnRefreshTable().setCaption("Reload table row cache"); + getBtnRefreshTable().setImmediate(false); + getBtnRefreshTable().setWidth("-1px"); + getBtnRefreshTable().setHeight("-1px"); + horizontalLayout_1.addComponent(getBtnRefreshTable()); + horizontalLayout_1.setComponentAlignment(getBtnRefreshTable(), + new Alignment(33)); + + return horizontalLayout_1; + } + + public Button getBtnRefreshTable() { + return btnRefreshTable; + } + + public void setBtnRefreshTable(Button btnRefreshTable) { + this.btnRefreshTable = btnRefreshTable; + } + + } + + protected class SimpleBean { + private int id; + private String image; + private String col1; + private String col2; + private String col3; + private String col4; + + public SimpleBean(int id, String image, String col1, String col2, + String col3, String col4) { + super(); + this.id = id; + this.image = image; + this.col1 = col1; + this.col2 = col2; + this.col3 = col3; + this.col4 = col4; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getCol1() { + return col1; + } + + public void setCol1(String col1) { + this.col1 = col1; + } + + public String getCol2() { + return col2; + } + + public void setCol2(String col2) { + this.col2 = col2; + } + + public String getCol3() { + return col3; + } + + public void setCol3(String col3) { + this.col3 = col3; + } + + public String getCol4() { + return col4; + } + + public void setCol4(String col4) { + this.col4 = col4; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + } + +} |