diff options
author | Denis Anisimov <denis@vaadin.com> | 2014-12-10 18:55:26 +0200 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2015-02-02 08:37:16 +0000 |
commit | e052d648749312225098093a53dc7a19ea870cfd (patch) | |
tree | 733bdba0f4471051ae29563ec2e58e0255d2b7f8 | |
parent | 15c4b00eee1b0aa19e13ffdc103de677be7c2d67 (diff) | |
download | vaadin-framework-e052d648749312225098093a53dc7a19ea870cfd.tar.gz vaadin-framework-e052d648749312225098093a53dc7a19ea870cfd.zip |
Avoid client side exception using keyboard navigation (#15343).
Change-Id: Ibed97b23de72007a6ffe5450bd8c3f271447f8d1
3 files changed, 132 insertions, 2 deletions
diff --git a/client/src/com/vaadin/client/ui/VTree.java b/client/src/com/vaadin/client/ui/VTree.java index 6539eb49a9..8729de4a43 100644 --- a/client/src/com/vaadin/client/ui/VTree.java +++ b/client/src/com/vaadin/client/ui/VTree.java @@ -1737,8 +1737,8 @@ public class VTree extends FocusElementPanel implements VHasDropHandler, selectNode(node, true); } } + showTooltipForKeyboardNavigation(node); } - showTooltipForKeyboardNavigation(node); return true; } @@ -1763,8 +1763,8 @@ public class VTree extends FocusElementPanel implements VHasDropHandler, selectNode(node, true); } } + showTooltipForKeyboardNavigation(node); } - showTooltipForKeyboardNavigation(node); return true; } diff --git a/uitest/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationToNone.java b/uitest/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationToNone.java new file mode 100644 index 0000000000..dfea493281 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationToNone.java @@ -0,0 +1,64 @@ +/* + * Copyright 2000-2014 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.components.tree; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Tree; + +/** + * Test UI for keyboard navigation for first and last tree item. + * + * @author Vaadin Ltd + */ +public class TreeKeyboardNavigationToNone extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + final Tree tree = new Tree(); + tree.addItem("a"); + tree.addItem("b"); + + tree.select("a"); + addComponents(tree); + tree.focus(); + + Button button = new Button("Select last item", + new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + tree.select("b"); + tree.focus(); + } + }); + addComponent(button); + } + + @Override + protected Integer getTicketNumber() { + return 15343; + } + + @Override + protected String getTestDescription() { + return "Keyboard navigation should not throw client side exception " + + "when there are no items to navigate."; + } + +} diff --git a/uitest/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationToNoneTest.java b/uitest/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationToNoneTest.java new file mode 100644 index 0000000000..98f1896b82 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/tree/TreeKeyboardNavigationToNoneTest.java @@ -0,0 +1,66 @@ +/* + * Copyright 2000-2014 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.components.tree; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.Keys; +import org.openqa.selenium.interactions.Actions; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +/** + * Test for keyboard navigation in tree in case when there are no items to + * navigate. + * + * @author Vaadin Ltd + */ +public class TreeKeyboardNavigationToNoneTest extends MultiBrowserTest { + + @Before + public void setUp() { + setDebug(true); + openTestURL(); + } + + @Test + public void navigateUpForTheFirstItem() { + sendKey(Keys.ARROW_UP); + checkNotificationErrorAbsence("first"); + } + + @Test + public void navigateDownForTheLastItem() { + $(ButtonElement.class).first().click(); + sendKey(Keys.ARROW_DOWN); + checkNotificationErrorAbsence("last"); + } + + private void checkNotificationErrorAbsence(String item) { + Assert.assertFalse( + "Notification is found after using keyboard for navigation " + + "from " + item + " tree item", + isElementPresent(By.className("v-Notification"))); + } + + private void sendKey(Keys key) { + Actions actions = new Actions(getDriver()); + actions.sendKeys(key).build().perform(); + } +} |