From c521f6ed4c40eeee5f4a9fa1628aff711e37bb7d Mon Sep 17 00:00:00 2001 From: Automerge Date: Wed, 18 Apr 2012 13:21:15 +0000 Subject: [merge from 6.7] Test for #8662: Improved old #2864 test case and added a TestBench script svn changeset:23572/svn branch:6.8 --- .../components/table/TestCurrentPageFirstItem.html | 42 +++++++++++ .../components/table/TestCurrentPageFirstItem.java | 83 +++++++++++++--------- 2 files changed, 91 insertions(+), 34 deletions(-) create mode 100644 tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.html (limited to 'tests') diff --git a/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.html b/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.html new file mode 100644 index 0000000000..ac06706aa5 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.html @@ -0,0 +1,42 @@ + + + + + + +TestCurrentPageFirstItem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestCurrentPageFirstItem
open/run/TestCurrentPageFirstItem?restartApplication
clickvaadin=runTestCurrentPageFirstItem::/VHorizontalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]
clickvaadin=runTestCurrentPageFirstItem::/VHorizontalLayout[0]/ChildComponentContainer[5]/VButton[0]/domChild[0]
clickvaadin=runTestCurrentPageFirstItem::/VHorizontalLayout[0]/ChildComponentContainer[4]/VButton[0]/domChild[0]/domChild[0]
screenCapture
+ + diff --git a/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java b/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java index 1733b15e80..6e38f2a156 100644 --- a/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java +++ b/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java @@ -1,60 +1,75 @@ package com.vaadin.tests.components.table; -import com.vaadin.Application; 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.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Table; -import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; -public class TestCurrentPageFirstItem extends Application implements - ClickListener { +public class TestCurrentPageFirstItem extends TestBase implements ClickListener { private Button buttonIndex; private Button buttonItem; - private Table table; + private Table[] tables = new Table[4]; private int counter = 0; IndexedContainer container = new IndexedContainer(); @Override - public void init() { - try { - Window main = new Window("Table header Test"); - setMainWindow(main); - main.setSizeFull(); - // setTheme("testtheme"); - VerticalLayout baseLayout = new VerticalLayout(); - main.setContent(baseLayout); - - table = new Table(); - container.addContainerProperty("row", String.class, ""); - table.setContainerDataSource(container); - table.setWidth("100%"); - table.setPageLength(3); - buttonIndex = new Button("Add row and select last index", this); - buttonItem = new Button("Add row and select last item", this); - - baseLayout.addComponent(table); - baseLayout.addComponent(buttonIndex); - baseLayout.addComponent(buttonItem); - } catch (Exception e) { - e.printStackTrace(); + public void setup() { + container.addContainerProperty("row", String.class, ""); + + HorizontalLayout baseLayout = new HorizontalLayout(); + baseLayout.setHeight("115px"); + addComponent(baseLayout); + + for (int i = 0; i < tables.length; ++i) { + Table t = new Table(); + t.setContainerDataSource(container); + t.setWidth("100px"); + baseLayout.addComponent(t); + tables[i] = t; } + tables[0].setSizeFull(); + tables[0].setCaption("Full"); + tables[1].setHeight("100px"); + tables[1].setCaption("100px"); + tables[2].setHeight("95%"); + tables[2].setCaption("95%"); + tables[3].setPageLength(3); + tables[3].setCaption("3 rows"); + + buttonIndex = new Button("Add row and select last index", this); + buttonItem = new Button("Add row and select last item", this); + baseLayout.addComponent(buttonIndex); + baseLayout.addComponent(buttonItem); } public void buttonClick(ClickEvent event) { Item item = container.addItem(++counter); item.getItemProperty("row").setValue(counter + ""); - table.select(counter); - if (event.getButton() == buttonIndex) { - table.setCurrentPageFirstItemIndex(((Container.Indexed) table - .getContainerDataSource()).indexOfId(counter)); - } else { - table.setCurrentPageFirstItemId(counter); + for (int i = 0; i < tables.length; ++i) { + Table t = tables[i]; + t.select(counter); + if (event.getButton() == buttonIndex) { + t.setCurrentPageFirstItemIndex(((Container.Indexed) t + .getContainerDataSource()).indexOfId(counter)); + } else { + t.setCurrentPageFirstItemId(counter); + } } } + + @Override + protected String getDescription() { + return "Table height changes when using setCurrentPageFirstItemId"; + } + + @Override + protected Integer getTicketNumber() { + return 2864; + } } -- cgit v1.2.3 From 4e9afbf56db644334d1d172c0193706aa64551ee Mon Sep 17 00:00:00 2001 From: Automerge Date: Wed, 18 Apr 2012 13:21:22 +0000 Subject: [merge from 6.7] Fixed layout to match test script and screenshots svn changeset:23573/svn branch:6.8 --- .../com/vaadin/tests/components/table/TestCurrentPageFirstItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java b/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java index 6e38f2a156..2bc03f9814 100644 --- a/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java +++ b/tests/testbench/com/vaadin/tests/components/table/TestCurrentPageFirstItem.java @@ -24,7 +24,7 @@ public class TestCurrentPageFirstItem extends TestBase implements ClickListener HorizontalLayout baseLayout = new HorizontalLayout(); baseLayout.setHeight("115px"); - addComponent(baseLayout); + getMainWindow().setContent(baseLayout); for (int i = 0; i < tables.length; ++i) { Table t = new Table(); -- cgit v1.2.3 From 9a695b7c8ca1b6c5bdc9d29f9088e694a895420d Mon Sep 17 00:00:00 2001 From: Automerge Date: Wed, 18 Apr 2012 13:21:27 +0000 Subject: [merge from 6.7] added tests case that contains varios setups to check scrolling and related stuff work with touch devices svn changeset:23574/svn branch:6.8 --- .../vaadin/tests/components/TouchScrollables.java | 238 +++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 tests/testbench/com/vaadin/tests/components/TouchScrollables.java (limited to 'tests') diff --git a/tests/testbench/com/vaadin/tests/components/TouchScrollables.java b/tests/testbench/com/vaadin/tests/components/TouchScrollables.java new file mode 100644 index 0000000000..39e5bb02c4 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/TouchScrollables.java @@ -0,0 +1,238 @@ +package com.vaadin.tests.components; + +import java.util.Collection; + +import com.vaadin.data.Item; +import com.vaadin.data.util.IndexedContainer; +import com.vaadin.event.DataBoundTransferable; +import com.vaadin.event.dd.DragAndDropEvent; +import com.vaadin.event.dd.DropHandler; +import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; +import com.vaadin.event.dd.acceptcriteria.SourceIs; +import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation; +import com.vaadin.tests.util.Person; +import com.vaadin.tests.util.PersonContainer; +import com.vaadin.tests.util.TestUtils; +import com.vaadin.ui.AbstractComponent; +import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Component; +import com.vaadin.ui.CssLayout; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Panel; +import com.vaadin.ui.Table; + +public class TouchScrollables extends TestBase { + java.util.Random r = new java.util.Random(1); + + private HorizontalLayout testSelector; + + @Override + public void setup() { + testSelector = new HorizontalLayout(); + getLayout().addComponent(testSelector); + + CssLayout cssLayout = new CssLayout(); + final Table table = new Table(); + + Button button = new Button("Make pagelength 0"); + button.addListener(new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + table.setCacheRate(100); + table.setHeight("400px"); + } + }); + + cssLayout.addComponent(button); + + table.addContainerProperty("foo", String.class, "bar"); + table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX); + for (int i = 0; i < 1000; i++) { + table.addItem(); + } + cssLayout.addComponent(table); + cssLayout.setCaption("Table"); + + addTest(cssLayout); + + cssLayout = new CssLayout(); + cssLayout.setCaption("Panel"); + + final Panel p = new Panel(); + p.setScrollable(true); + p.setHeight("400px"); + p.setCaption("Panel"); + Label l50 = null; + for (int i = 0; i < 100; i++) { + Label c = new Label("Label" + i); + p.addComponent(c); + if (i == 50) { + l50 = c; + } + } + + final Label l = l50; + button = new Button("Scroll to label 50", new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + getLayout().getWindow().scrollIntoView(l); + } + }); + cssLayout.addComponent(button); + button = new Button("Scroll to 100px", new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + p.setScrollTop(100); + } + }); + cssLayout.addComponent(button); + cssLayout.addComponent(p); + + addTest(cssLayout); + + TestUtils + .injectCSS( + getLayout().getWindow(), + ".v-table-row-drag-middle .v-table-cell-content {" + + " background-color: inherit ; border-bottom: 1px solid cyan;" + + "}" + + ".v-table-row-drag-middle .v-table-cell-wrapper {" + + " margin-bottom: -1px;" + "}" + "" + + ); + + addDDSortableTable(); + + } + + private void addDDSortableTable() { + final Table table; + table = new Table(); + table.setCaption("DD sortable table"); + // table.setWidth("100%"); + table.setPageLength(10); + table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID); + table.setSelectable(true); + table.setMultiSelect(true); + populateTable(table); + + /* + * Make table rows draggable + */ + table.setDragMode(Table.TableDragMode.ROW); + + table.setDropHandler(new DropHandler() { + // accept only drags from this table + AcceptCriterion crit = new SourceIs(table); + + public AcceptCriterion getAcceptCriterion() { + return crit; + } + + public void drop(DragAndDropEvent dropEvent) { + AbstractSelectTargetDetails dropTargetData = (AbstractSelectTargetDetails) dropEvent + .getTargetDetails(); + DataBoundTransferable transferable = (DataBoundTransferable) dropEvent + .getTransferable(); + Object itemIdOver = dropTargetData.getItemIdOver(); + Object itemId = transferable.getItemId(); + if (itemId == null || itemIdOver == null + || itemId.equals(itemIdOver)) { + return; // no move happened + } + + // IndexedContainer goodies... (hint: don't use it in real apps) + IndexedContainer containerDataSource = (IndexedContainer) table + .getContainerDataSource(); + int newIndex = containerDataSource.indexOfId(itemIdOver) - 1; + if (dropTargetData.getDropLocation() != VerticalDropLocation.TOP) { + newIndex++; + } + if (newIndex < 0) { + newIndex = 0; + } + Object idAfter = containerDataSource.getIdByIndex(newIndex); + Collection selections = (Collection) table.getValue(); + if (selections != null && selections.contains(itemId)) { + // dragged a selected item, if multiple rows selected, drag + // them too (functionality similar to apple mail) + for (Object object : selections) { + moveAfter(containerDataSource, object, idAfter); + } + + } else { + // move just the dragged row, not considering selection at + // all + moveAfter(containerDataSource, itemId, idAfter); + } + + } + + private void moveAfter(IndexedContainer containerDataSource, + Object itemId, Object idAfter) { + try { + IndexedContainer clone = null; + clone = (IndexedContainer) containerDataSource.clone(); + containerDataSource.removeItem(itemId); + Item newItem = containerDataSource.addItemAfter(idAfter, + itemId); + Item item = clone.getItem(itemId); + for (Object propId : item.getItemPropertyIds()) { + newItem.getItemProperty(propId).setValue( + item.getItemProperty(propId).getValue()); + } + + // TODO Auto-generated method stub + } catch (CloneNotSupportedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + }); + addTest(table); + } + + private void populateTable(Table table) { + table.addContainerProperty("Name", String.class, ""); + table.addContainerProperty("Weight", Integer.class, 0); + + PersonContainer testData = PersonContainer.createWithTestData(); + + for (int i = 0; i < 40; i++) { + Item addItem = table.addItem("Item" + i); + Person p = testData.getIdByIndex(i); + addItem.getItemProperty("Name").setValue( + p.getFirstName() + " " + p.getLastName()); + addItem.getItemProperty("Weight").setValue(50 + r.nextInt(60)); + } + + } + + private Component testComponent; + + private void addTest(final AbstractComponent t) { + Button button = new Button(t.getCaption()); + testSelector.addComponent(button); + button.addListener(new Button.ClickListener() { + + public void buttonClick(ClickEvent event) { + if (testComponent != null) { + getLayout().removeComponent(testComponent); + } + testComponent = t; + getLayout().addComponent(t); + } + }); + } + + @Override + protected String getDescription() { + return "Various components and setups suitable for testing scrolling on touch devices."; + } + + @Override + protected Integer getTicketNumber() { + return null; + } +} -- cgit v1.2.3 From 1a95d50942f64bec70647587408f37d34addb767 Mon Sep 17 00:00:00 2001 From: Automerge Date: Wed, 18 Apr 2012 13:21:32 +0000 Subject: [merge from 6.7] enhanced test case svn changeset:23575/svn branch:6.8 --- .../vaadin/tests/components/TouchScrollables.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/testbench/com/vaadin/tests/components/TouchScrollables.java b/tests/testbench/com/vaadin/tests/components/TouchScrollables.java index 39e5bb02c4..8d3ef715cc 100644 --- a/tests/testbench/com/vaadin/tests/components/TouchScrollables.java +++ b/tests/testbench/com/vaadin/tests/components/TouchScrollables.java @@ -4,6 +4,8 @@ import java.util.Collection; import com.vaadin.data.Item; import com.vaadin.data.util.IndexedContainer; +import com.vaadin.event.Action; +import com.vaadin.event.Action.Handler; import com.vaadin.event.DataBoundTransferable; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; @@ -108,12 +110,28 @@ public class TouchScrollables extends TestBase { private void addDDSortableTable() { final Table table; table = new Table(); - table.setCaption("DD sortable table"); + table.setCaption("DD sortable table with context menus"); // table.setWidth("100%"); table.setPageLength(10); table.setRowHeaderMode(Table.ROW_HEADER_MODE_ID); table.setSelectable(true); table.setMultiSelect(true); + + table.addActionHandler(new Handler() { + + Action[] actions = new Action[] { new Action("FOO"), + new Action("BAR"), new Action("CAR") }; + + public Action[] getActions(Object target, Object sender) { + return actions; + } + + public void handleAction(Action action, Object sender, Object target) { + getLayout().getWindow().showNotification(action.getCaption()); + + } + }); + populateTable(table); /* -- cgit v1.2.3 From 41a97f25d5a23c984698097c7f42e56e239425b7 Mon Sep 17 00:00:00 2001 From: Automerge Date: Wed, 18 Apr 2012 17:07:29 +0000 Subject: [merge from 6.7] improved test case svn changeset:23580/svn branch:6.8 --- .../vaadin/tests/components/TouchScrollables.java | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/testbench/com/vaadin/tests/components/TouchScrollables.java b/tests/testbench/com/vaadin/tests/components/TouchScrollables.java index 8d3ef715cc..88335a1996 100644 --- a/tests/testbench/com/vaadin/tests/components/TouchScrollables.java +++ b/tests/testbench/com/vaadin/tests/components/TouchScrollables.java @@ -39,14 +39,26 @@ public class TouchScrollables extends TestBase { CssLayout cssLayout = new CssLayout(); final Table table = new Table(); - Button button = new Button("Make pagelength 0"); + Button button = new Button("Toggle lazyloading"); button.addListener(new Button.ClickListener() { public void buttonClick(ClickEvent event) { - table.setCacheRate(100); - table.setHeight("400px"); + if (table.getCacheRate() == 100) { + table.setCacheRate(2); + table.setPageLength(15); + } else { + table.setCacheRate(100); + table.setHeight("400px"); + } } }); + cssLayout.addComponent(button); + button = new Button("Toggle selectable"); + button.addListener(new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + table.setSelectable(!table.isSelectable()); + } + }); cssLayout.addComponent(button); table.addContainerProperty("foo", String.class, "bar"); @@ -95,7 +107,7 @@ public class TouchScrollables extends TestBase { TestUtils .injectCSS( getLayout().getWindow(), - ".v-table-row-drag-middle .v-table-cell-content {" + "body * {-webkit-user-select: none;} .v-table-row-drag-middle .v-table-cell-content {" + " background-color: inherit ; border-bottom: 1px solid cyan;" + "}" + ".v-table-row-drag-middle .v-table-cell-wrapper {" -- cgit v1.2.3 From 3e090564a903aa1f39ef212d21382ffeab43e6cd Mon Sep 17 00:00:00 2001 From: Automerge Date: Thu, 19 Apr 2012 13:07:40 +0000 Subject: [merge from 6.7] Test case and fix for #8625: Firefox and IE9 need an overflow hack to prevent unwanted scrollbars with nested TabSheets in some cases svn changeset:23592/svn branch:6.8 --- .../vaadin/terminal/gwt/client/ui/VTabsheet.java | 9 +++- .../tabsheet/ScrollbarsInNestedTabsheets.html | 32 ++++++++++++ .../tabsheet/ScrollbarsInNestedTabsheets.java | 58 ++++++++++++++++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/ScrollbarsInNestedTabsheets.html create mode 100644 tests/testbench/com/vaadin/tests/components/tabsheet/ScrollbarsInNestedTabsheets.java (limited to 'tests') diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java index 7b9b900289..f1a5b31379 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java @@ -1257,7 +1257,14 @@ public class VTabsheet extends VTabsheetBase implements Focusable, */ iLayout(); client.runDescendentsLayout(this); - + /* + * Firefox and IE9 need a nudge to prevent unwanted scrollbars with + * Chameleon theme (#8625) + */ + if (BrowserInfo.get().isFirefox() || BrowserInfo.get().isIE9()) { + Util.setStyleTemporarily((Element) tp.getElement() + .getFirstChildElement(), "overflow", ""); + } return false; } else { /* diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/ScrollbarsInNestedTabsheets.html b/tests/testbench/com/vaadin/tests/components/tabsheet/ScrollbarsInNestedTabsheets.html new file mode 100644 index 0000000000..f5579c9875 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/tabsheet/ScrollbarsInNestedTabsheets.html @@ -0,0 +1,32 @@ + + + + + + +ScrollbarsInNestedTabsheets + + + + + + + + + + + + + + + + + + + + + + +
ScrollbarsInNestedTabsheets
open/run/ScrollbarsInNestedTabsheets?restartApplication
mouseClickvaadin=runScrollbarsInNestedTabsheets::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VTabsheet[0]/VTabsheetPanel[0]/VTabsheet[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]27,8
screenCaptureshould-not-have-scrollbars
+ + diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/ScrollbarsInNestedTabsheets.java b/tests/testbench/com/vaadin/tests/components/tabsheet/ScrollbarsInNestedTabsheets.java new file mode 100644 index 0000000000..de250539ff --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/tabsheet/ScrollbarsInNestedTabsheets.java @@ -0,0 +1,58 @@ +package com.vaadin.tests.components.tabsheet; + +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.DateField; +import com.vaadin.ui.Label; +import com.vaadin.ui.Layout; +import com.vaadin.ui.TabSheet; +import com.vaadin.ui.TextField; +import com.vaadin.ui.VerticalLayout; + +@SuppressWarnings("serial") +public class ScrollbarsInNestedTabsheets extends TestBase { + + @Override + public void setup() { + setTheme("chameleon"); + final Label l = new Label("Select Sub Tab 2"); + final TabSheet t = new TabSheet(); + final TabSheet t2 = getTabSheet(); + t.addTab(t2, "Main Tab"); + addComponent(l); + addComponent(t); + } + + private TabSheet getTabSheet() { + final TabSheet t = new TabSheet(); + t.addTab(getDummyLayout1(), "Sub Tab 1"); + t.addTab(getDummyLayout2(), "Sub Tab 2"); + + return t; + } + + private Layout getDummyLayout1() { + final VerticalLayout l = new VerticalLayout(); + l.addComponent(new DateField("Date")); + + return l; + } + + private Layout getDummyLayout2() { + final VerticalLayout l = new VerticalLayout(); + l.addComponent(new DateField("Date")); + l.addComponent(new TextField("TextField")); + + return l; + } + + @Override + protected String getDescription() { + return "Nested tabsheets show unwanted scrollbars with Chameleon theme when the inner tabsheet is resized"; + } + + @Override + protected Integer getTicketNumber() { + return 8625; + } + +} \ No newline at end of file -- cgit v1.2.3