summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorDmitrii Rogozin <dmitrii@vaadin.com>2014-10-20 16:25:22 +0300
committerMarkus Koivisto <markus@vaadin.com>2014-11-03 09:39:45 +0200
commitb483d2a6e4b3267655920c0baf1e90f8de63d519 (patch)
tree23589623aa267b6dfaed8948befa28afdbdd3c8a /client
parent0c83135955d62e37904fb16d207f6639dfc6e33b (diff)
downloadvaadin-framework-b483d2a6e4b3267655920c0baf1e90f8de63d519.tar.gz
vaadin-framework-b483d2a6e4b3267655920c0baf1e90f8de63d519.zip
Fix VaadinFinderLocator for UIElement (#14010).
Change-Id: If25ebdcdd4df438402d1cdc60a63c629e84c73a0
Diffstat (limited to 'client')
-rw-r--r--client/src/com/vaadin/client/componentlocator/LocatorUtil.java29
-rw-r--r--client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java38
-rw-r--r--client/tests/src/com/vaadin/client/LocatorUtilTest.java73
3 files changed, 112 insertions, 28 deletions
diff --git a/client/src/com/vaadin/client/componentlocator/LocatorUtil.java b/client/src/com/vaadin/client/componentlocator/LocatorUtil.java
index 1d1c06587b..7de0de3855 100644
--- a/client/src/com/vaadin/client/componentlocator/LocatorUtil.java
+++ b/client/src/com/vaadin/client/componentlocator/LocatorUtil.java
@@ -15,6 +15,8 @@
*/
package com.vaadin.client.componentlocator;
+import com.google.gwt.regexp.shared.RegExp;
+
/**
* Common String manipulator utilities used in VaadinFinderLocatorStrategy and
* SelectorPredicates.
@@ -73,4 +75,31 @@ public class LocatorUtil {
protected static int indexOfIgnoringQuoted(String str, char find) {
return indexOfIgnoringQuoted(str, find, 0);
}
+
+ /**
+ * Checks if path refers to vaadin UI element com.vaadin.ui.UI.
+ *
+ * @param path
+ * to vaadin element
+ * @return true if path refers to UI element, false otherwise
+ */
+ public static boolean isUIElement(String path) {
+ String regex = "^\\/{0,2}(com\\.vaadin\\.ui\\.)?V?UI[\\/\\[]?";
+ RegExp regexp = RegExp.compile(regex);
+ return regexp.test(path);
+ }
+
+ /**
+ * Checks if path refers to vaadin Notification element
+ * com.vaadin.ui.Notification.
+ *
+ * @param path
+ * to vaadin element
+ * @return true if path refers to Notification element, false otherwise
+ */
+ public static boolean isNotificationElement(String path) {
+ String regex = "^\\/{0,2}(com\\.vaadin\\.ui\\.)?V?Notification[\\/\\[]?";
+ RegExp regexp = RegExp.compile(regex);
+ return regexp.test(path);
+ }
}
diff --git a/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java b/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java
index 9ed071c38f..1983ce0189 100644
--- a/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java
+++ b/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java
@@ -265,32 +265,6 @@ public class VaadinFinderLocatorStrategy implements LocatorStrategy {
return connectorHierarchy;
}
- private boolean isNotificationExpression(String path) {
- String[] starts = { "//", "/" };
-
- String[] frags = { "com.vaadin.ui.Notification.class",
- "com.vaadin.ui.Notification", "VNotification.class",
- "VNotification", "Notification.class", "Notification" };
-
- String[] ends = { "/", "[" };
-
- for (String s : starts) {
- for (String f : frags) {
- if (path.equals(s + f)) {
- return true;
- }
-
- for (String e : ends) {
- if (path.startsWith(s + f + e)) {
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
/**
* {@inheritDoc}
*/
@@ -303,7 +277,7 @@ public class VaadinFinderLocatorStrategy implements LocatorStrategy {
}
List<Element> elements = new ArrayList<Element>();
- if (isNotificationExpression(path)) {
+ if (LocatorUtil.isNotificationElement(path)) {
for (VNotification n : findNotificationsByPath(path)) {
elements.add(n.getElement());
@@ -571,11 +545,19 @@ public class VaadinFinderLocatorStrategy implements LocatorStrategy {
ComponentConnector parent, String pathFragment,
boolean collectRecursively) {
ArrayList<ComponentConnector> potentialMatches = new ArrayList<ComponentConnector>();
+ String widgetName = getWidgetName(pathFragment);
+ // Special case when searching for UIElement.
+ if (LocatorUtil.isUIElement(pathFragment)) {
+ if (connectorMatchesPathFragment(parent, widgetName)) {
+ potentialMatches.add(parent);
+ }
+ }
if (parent instanceof HasComponentsConnector) {
+
List<ComponentConnector> children = ((HasComponentsConnector) parent)
.getChildComponents();
for (ComponentConnector child : children) {
- String widgetName = getWidgetName(pathFragment);
+
if (connectorMatchesPathFragment(child, widgetName)) {
potentialMatches.add(child);
}
diff --git a/client/tests/src/com/vaadin/client/LocatorUtilTest.java b/client/tests/src/com/vaadin/client/LocatorUtilTest.java
new file mode 100644
index 0000000000..15536ac6fc
--- /dev/null
+++ b/client/tests/src/com/vaadin/client/LocatorUtilTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.client;
+
+import junit.framework.TestCase;
+
+import org.junit.Assert;
+
+import com.vaadin.client.componentlocator.LocatorUtil;
+
+/*
+ * Test LocatorUtil.isUIElement() & isNotificaitonElement methods
+ */
+public class LocatorUtilTest extends TestCase {
+
+ public void testIsUI1() {
+ boolean isUI = LocatorUtil.isUIElement("com.vaadin.ui.UI");
+ Assert.assertTrue(isUI);
+ }
+
+ public void testIsUI2() {
+ boolean isUI = LocatorUtil.isUIElement("/com.vaadin.ui.UI");
+ Assert.assertTrue(isUI);
+ }
+
+ public void testIsUI3() {
+ boolean isUI = LocatorUtil
+ .isUIElement("//com.vaadin.ui.UI[RandomString");
+ Assert.assertTrue(isUI);
+ }
+
+ public void testIsUI4() {
+ boolean isUI = LocatorUtil.isUIElement("//com.vaadin.ui.UI[0]");
+ Assert.assertTrue(isUI);
+ }
+
+ public void testIsNotification1() {
+ boolean isUI = LocatorUtil
+ .isNotificationElement("com.vaadin.ui.VNotification");
+ Assert.assertTrue(isUI);
+ }
+
+ public void testIsNotification2() {
+ boolean isUI = LocatorUtil
+ .isNotificationElement("com.vaadin.ui.Notification");
+ Assert.assertTrue(isUI);
+ }
+
+ public void testIsNotification3() {
+ boolean isUI = LocatorUtil
+ .isNotificationElement("/com.vaadin.ui.VNotification[");
+ Assert.assertTrue(isUI);
+ }
+
+ public void testIsNotification4() {
+ boolean isUI = LocatorUtil
+ .isNotificationElement("//com.vaadin.ui.VNotification[0]");
+ Assert.assertTrue(isUI);
+ }
+}