From a7b2de20d60ea157501d21d8e5179126571e7c36 Mon Sep 17 00:00:00 2001 From: Ilia Motornyi Date: Mon, 10 Jul 2017 15:04:22 +0300 Subject: Implement tree item context click Fixes #9606 Fixes #9645 Fixes #9647 --- .../tests/contextclick/TreeV8ContextClick.java | 72 ++++++++++++++++++++++ .../tests/contextclick/TreeV8ContextClickTest.java | 63 +++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 uitest/src/main/java/com/vaadin/tests/contextclick/TreeV8ContextClick.java create mode 100644 uitest/src/test/java/com/vaadin/tests/contextclick/TreeV8ContextClickTest.java (limited to 'uitest') diff --git a/uitest/src/main/java/com/vaadin/tests/contextclick/TreeV8ContextClick.java b/uitest/src/main/java/com/vaadin/tests/contextclick/TreeV8ContextClick.java new file mode 100644 index 0000000000..ed30eb47d6 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/contextclick/TreeV8ContextClick.java @@ -0,0 +1,72 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.contextclick; + +import com.vaadin.data.TreeData; +import com.vaadin.shared.Registration; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Tree; +import com.vaadin.ui.Tree.TreeContextClickEvent; + +import java.util.Collections; + +public class TreeV8ContextClick extends + AbstractContextClickUI, TreeContextClickEvent> { + + @Override + protected Tree createTestComponent() { + TreeData treeData = new TreeData<>(); + for (int i = 0; i < 3; i++) { + String grandDad = "Granddad " + i; + treeData.addItems(null, grandDad); + for (int j = 0; j < 4; j++) { + String dad = "Dad " + i + "/" + j; + treeData.addItems(grandDad, dad); + for (int k = 0; k < 5; k++) { + treeData.addItems(dad, "Son " + i + "/" + j + "/" + k); + } + } + } + Tree tree = new Tree<>("Clane", treeData); + tree.setWidth("100%"); + return tree; + } + + @Override + protected void handleContextClickEvent( + TreeContextClickEvent event) { + String value = event.getItem(); + log("ContextClickEvent value: " + value); + } + + @Override + protected HorizontalLayout createContextClickControls() { + HorizontalLayout controls = super.createContextClickControls(); + controls.addComponent( + new Button("Remove all content", new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + testComponent.setItems(Collections.emptyList()); + testComponent.setHeight("200px"); + } + })); + return controls; + } + +} diff --git a/uitest/src/test/java/com/vaadin/tests/contextclick/TreeV8ContextClickTest.java b/uitest/src/test/java/com/vaadin/tests/contextclick/TreeV8ContextClickTest.java new file mode 100644 index 0000000000..3272cce334 --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/contextclick/TreeV8ContextClickTest.java @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.contextclick; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.TreeElement; +import org.junit.Test; +import org.openqa.selenium.WebElement; + +import static org.junit.Assert.assertEquals; + +public class TreeV8ContextClickTest extends AbstractContextClickTest { + + @Test + public void testBodyContextClickWithTypedListener() { + addOrRemoveTypedListener(); + + TreeElement tree = $(TreeElement.class).first(); + contextClick(tree.getItem(0)); + + assertEquals( + "1. ContextClickEvent value: Granddad 0", + getLogRow(0)); + + tree.expand(0); + tree.expand(2); + contextClick(tree.getItem(6)); + + assertEquals( + "2. ContextClickEvent value: Son 0/1/3", + getLogRow(0)); + } + + /** + * Performs a context click on given element at coordinates 20, 10 followed + * by a regular click. This prevents browser context menu from blocking + * future operations. + * + * A smaller X offset might hit the resize handle of the previous cell that + * overlaps with the next header cell. + * + * @param e + * web element + */ + @Override + protected void contextClick(WebElement e) { + contextClick(e, 20, 10); + } + +} -- cgit v1.2.3