From ab17dd711cc3b5200b61b5fd81de81de44c17979 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sauli=20T=C3=A4hk=C3=A4p=C3=A4=C3=A4?= Date: Fri, 5 Sep 2014 15:20:27 +0300 Subject: [PATCH] Revert "Tree item fails with ItemClickListener (#14388)" This reverts commit d71ae18e355468487a947c84d0f92ed9c44b002e which caused regression on #6845. Converted TreeItemClickListeningTest (#6845) to TB4. Change-Id: Ia4c7c5814dc4e8916ab3f80633ceecdfb74040b0 --- client/src/com/vaadin/client/ui/VTree.java | 24 +----- .../tree/TreeItemClickListening.html | 81 ------------------- .../tree/TreeItemClickListening.java | 19 ++--- ...t.java => TreeItemClickListeningTest.java} | 45 +++++------ .../TreeItemSelectionWithoutImmediate.java | 46 ----------- .../com/vaadin/tests/tb3/AbstractTB3Test.java | 35 +++++++- 6 files changed, 63 insertions(+), 187 deletions(-) delete mode 100644 uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.html rename uitest/src/com/vaadin/tests/components/tree/{TreeItemSelectionWithoutImmediateTest.java => TreeItemClickListeningTest.java} (50%) delete mode 100644 uitest/src/com/vaadin/tests/components/tree/TreeItemSelectionWithoutImmediate.java diff --git a/client/src/com/vaadin/client/ui/VTree.java b/client/src/com/vaadin/client/ui/VTree.java index caa728ab21..b12053ea04 100644 --- a/client/src/com/vaadin/client/ui/VTree.java +++ b/client/src/com/vaadin/client/ui/VTree.java @@ -160,13 +160,6 @@ public class VTree extends FocusElementPanel implements VHasDropHandler, private boolean selectionHasChanged = false; - /* - * to fix #14388. The cause of defect #14388: event 'clickEvent' is sent to - * server before updating of "selected" variable, but should be send after - * it - */ - private boolean sendClickEventNow = false; - /** For internal use only. May be removed or replaced in the future. */ public String[] bodyActionKeys; @@ -478,15 +471,9 @@ public class VTree extends FocusElementPanel implements VHasDropHandler, Command command = new Command() { @Override public void execute() { - /* - * we should send selection to server immediately in 2 cases: 1) - * 'immediate' property of Tree is true 2) sendClickEventNow is - * true - */ client.updateVariable(paintableId, "selected", selectedIds.toArray(new String[selectedIds.size()]), - sendClickEventNow || immediate); - sendClickEventNow = false; + immediate); selectionHasChanged = false; } }; @@ -844,7 +831,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler, // server. We do not want to send the event if there is a // selection event happening after this. In all other cases // we want to send it immediately. - sendClickEventNow = true; + boolean sendClickEventNow = true; if (details.getButton() == MouseButton.LEFT && immediate && selectable) { @@ -862,13 +849,8 @@ public class VTree extends FocusElementPanel implements VHasDropHandler, } client.updateVariable(paintableId, "clickedKey", key, false); - - /* - * in any case event should not be send immediately here - - * send after updating of "selected" variable - */ client.updateVariable(paintableId, "clickEvent", - details.toString(), false); + details.toString(), sendClickEventNow); } }); } diff --git a/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.html b/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.html deleted file mode 100644 index 841565df2f..0000000000 --- a/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - -New Test - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
New Test
open/run/com.vaadin.tests.components.tree.TreeItemClickListening?restartApplication
mouseClickvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]36,7
assertTextvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_01. Left Click
mouseClickvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[1]45,7
assertTextvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_02. Left Click
mouseClickvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[2]37,13
assertTextvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_03. Left Click
mouseDownRightvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[3]
mouseUpRightvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[3]
assertTextvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_04. Right Click
mouseDownRightvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[4]
mouseUpRightvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[4]
assertTextvaadin=runcomvaadintestscomponentstreeTreeItemClickListening::PID_SLog_row_05. Right Click
- - diff --git a/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.java b/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.java index 724c1c6f62..a3f2b113cd 100644 --- a/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.java +++ b/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListening.java @@ -1,24 +1,22 @@ package com.vaadin.tests.components.tree; import com.vaadin.event.ItemClickEvent; -import com.vaadin.tests.components.TestBase; -import com.vaadin.tests.util.Log; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUIWithLog; import com.vaadin.ui.Tree; -public class TreeItemClickListening extends TestBase { +public class TreeItemClickListening extends AbstractTestUIWithLog { private int clickCounter = 0; - private Log log = new Log(5); - @Override - protected void setup() { + protected void setup(VaadinRequest request) { Tree tree = new Tree(); tree.setImmediate(true); tree.addContainerProperty("caption", String.class, ""); - for (int i = 1; i <= 10; i++) { + for (int i = 1; i <= 2; i++) { String item = "Node " + i; tree.addItem(item); tree.getContainerProperty(item, "caption").setValue("Caption " + i); @@ -38,19 +36,15 @@ public class TreeItemClickListening extends TestBase { case RIGHT: log.log("Right Click"); break; - case MIDDLE: - log.log("Middle Click"); - break; } } }); addComponent(tree); - addComponent(log); } @Override - protected String getDescription() { + protected String getTestDescription() { return "Item click event should be triggered from all mouse button clicks"; } @@ -58,5 +52,4 @@ public class TreeItemClickListening extends TestBase { protected Integer getTicketNumber() { return 6845; } - } diff --git a/uitest/src/com/vaadin/tests/components/tree/TreeItemSelectionWithoutImmediateTest.java b/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListeningTest.java similarity index 50% rename from uitest/src/com/vaadin/tests/components/tree/TreeItemSelectionWithoutImmediateTest.java rename to uitest/src/com/vaadin/tests/components/tree/TreeItemClickListeningTest.java index 2fb35b1680..2567fdb16d 100644 --- a/uitest/src/com/vaadin/tests/components/tree/TreeItemSelectionWithoutImmediateTest.java +++ b/uitest/src/com/vaadin/tests/components/tree/TreeItemClickListeningTest.java @@ -16,7 +16,6 @@ package com.vaadin.tests.components.tree; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; import org.junit.Test; import org.openqa.selenium.WebElement; @@ -25,37 +24,37 @@ import org.openqa.selenium.interactions.Actions; import com.vaadin.testbench.By; import com.vaadin.tests.tb3.MultiBrowserTest; -public class TreeItemSelectionWithoutImmediateTest extends MultiBrowserTest { +public class TreeItemClickListeningTest extends MultiBrowserTest { - private static final long serialVersionUID = 1L; + private WebElement getTreeNode(String caption) { + return getDriver().findElement( + By.xpath("//span[text() = '" + caption + "']")); + } @Test - public void testSelectTreeWithItemClickListenerNotImmediate() - throws InterruptedException { + public void test() throws InterruptedException { openTestURL(); - // click on item i (in circle we select next item and check if it is - // selected in tree) - for (int i = 1; i <= 4; i++) { - WebElement treeItem = getTreeNode(String.format( - TreeItemSelectionWithoutImmediate.MENU_ITEM_TEMPLATE, i)); - - new Actions(getDriver()).moveToElement(treeItem).click().perform(); - Thread.sleep(100); + performLeftClick(); + assertEventFired("1. Left Click"); - WebElement selectedElement = driver.findElement(By - .className("v-tree-node-selected")); + performRightClick(); + assertEventFired("2. Right Click"); + } - treeItem = getTreeNode(String.format( - TreeItemSelectionWithoutImmediate.MENU_ITEM_TEMPLATE, i)); + private void assertEventFired(String text) { + assertThat( + String.format("Couldn't find text '%s' from the log.", text), + logContainsText(text)); + } - assertThat("Clicked element should be selected", selectedElement - .getText().equals(treeItem.getText()), is(true)); - } + private void performLeftClick() { + new Actions(driver).click(getTreeNode("Caption 1")).build().perform(); } - private WebElement getTreeNode(String caption) { - return getDriver().findElement( - By.xpath("//span[text() = '" + caption + "']")); + private void performRightClick() { + new Actions(driver).contextClick(getTreeNode("Caption 2")).build() + .perform(); } + } diff --git a/uitest/src/com/vaadin/tests/components/tree/TreeItemSelectionWithoutImmediate.java b/uitest/src/com/vaadin/tests/components/tree/TreeItemSelectionWithoutImmediate.java deleted file mode 100644 index 8e0f39be99..0000000000 --- a/uitest/src/com/vaadin/tests/components/tree/TreeItemSelectionWithoutImmediate.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.vaadin.tests.components.tree; - -import com.vaadin.event.ItemClickEvent; -import com.vaadin.server.VaadinRequest; -import com.vaadin.tests.components.AbstractTestUIWithLog; -import com.vaadin.ui.Tree; - -@SuppressWarnings("serial") -public class TreeItemSelectionWithoutImmediate extends AbstractTestUIWithLog { - - protected static final String TREE_ID = "TreeId"; - - protected static final String MENU_ITEM_TEMPLATE = "Menu Item %d"; - - @Override - protected void setup(VaadinRequest request) { - Tree tree = new Tree("With ItemClickListener not Immediate"); - tree.setId(TREE_ID); - tree.setImmediate(false); - - for (int i = 1; i <= 4; i++) { - tree.addItem(String.format(MENU_ITEM_TEMPLATE, i)); - } - - tree.addItemClickListener(new ItemClickEvent.ItemClickListener() { - - @Override - public void itemClick(ItemClickEvent event) { - log("ItemClickEvent = " + event.getItemId()); - } - }); - - addComponent(tree); - } - - @Override - protected String getTestDescription() { - return "Test for ensuring that selection of tree items works correctly if immediate == false " - + "and ItemClickListener is added to Tree"; - } - - @Override - protected Integer getTicketNumber() { - return 14388; - } -} diff --git a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java index 1e1cbedbd6..8e6370a6fd 100644 --- a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java +++ b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java @@ -27,11 +27,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Field; import java.net.URL; +import java.util.ArrayList; import java.util.Collections; import java.util.List; -import elemental.json.JsonObject; -import elemental.json.impl.JsonUtil; import org.apache.commons.io.IOUtils; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; @@ -66,10 +65,15 @@ import com.vaadin.testbench.TestBench; import com.vaadin.testbench.TestBenchDriverProxy; import com.vaadin.testbench.TestBenchElement; import com.vaadin.testbench.TestBenchTestCase; +import com.vaadin.testbench.elements.LabelElement; +import com.vaadin.testbench.elements.VerticalLayoutElement; import com.vaadin.tests.components.AbstractTestUIWithLog; import com.vaadin.tests.tb3.MultiBrowserTest.Browser; import com.vaadin.ui.UI; +import elemental.json.JsonObject; +import elemental.json.impl.JsonUtil; + /** * Base class for TestBench 3+ tests. All TB3+ tests in the project should * extend this class. @@ -1258,7 +1262,32 @@ public abstract class AbstractTB3Test extends TestBenchTestCase { return null; } - private static JsonObject extractObject(HttpResponse resp) throws IOException { + protected boolean logContainsText(String string) { + List logs = getLogs(); + + for (String text : logs) { + if (text.contains(string)) { + return true; + } + } + + return false; + } + + protected List getLogs() { + VerticalLayoutElement log = $(VerticalLayoutElement.class).id("Log"); + List logLabels = log.$(LabelElement.class).all(); + List logTexts = new ArrayList(); + + for (LabelElement label : logLabels) { + logTexts.add(label.getText()); + } + + return logTexts; + } + + private static JsonObject extractObject(HttpResponse resp) + throws IOException { InputStream contents = resp.getEntity().getContent(); StringWriter writer = new StringWriter(); IOUtils.copy(contents, writer, "UTF8"); -- 2.39.5