]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix VaadinFinderLocator for UIElement (#14010).
authorDmitrii Rogozin <dmitrii@vaadin.com>
Mon, 20 Oct 2014 13:25:22 +0000 (16:25 +0300)
committerVaadin Code Review <review@vaadin.com>
Tue, 21 Oct 2014 16:58:43 +0000 (16:58 +0000)
Change-Id: If25ebdcdd4df438402d1cdc60a63c629e84c73a0

client/src/com/vaadin/client/componentlocator/LocatorUtil.java
client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java
client/tests/src/com/vaadin/client/LocatorUtilTest.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/ui/VaadinFinderLocatorUISearchTest.java [new file with mode: 0644]

index 1d1c06587b43201bdfde0c42697c16ad80ff8e97..7de0de3855042f61d53b0f256d66ce3bd980bc1e 100644 (file)
@@ -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);
+    }
 }
index a36ea1ac853e31a40f243893444965e51afa0740..7346e489e518c6af03ca26b9d577fef8d78cd294 100644 (file)
@@ -267,32 +267,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}
      */
@@ -305,7 +279,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());
@@ -579,11 +553,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 (file)
index 0000000..15536ac
--- /dev/null
@@ -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);
+    }
+}
diff --git a/uitest/src/com/vaadin/tests/components/ui/VaadinFinderLocatorUISearchTest.java b/uitest/src/com/vaadin/tests/components/ui/VaadinFinderLocatorUISearchTest.java
new file mode 100644 (file)
index 0000000..37766dd
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * 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.ui;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.UIElement;
+import com.vaadin.tests.components.button.ButtonClick;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * 
+ * @since
+ * @author Vaadin Ltd
+ */
+public class VaadinFinderLocatorUISearchTest extends MultiBrowserTest {
+
+    @Override
+    protected Class<?> getUIClass() {
+        return ButtonClick.class;
+    }
+
+    @Test
+    public void getUIElementTest() {
+        openTestURL();
+        UIElement ui = $(UIElement.class).first();
+        Assert.assertNotNull("Couldn't find the UI Element on the page", ui);
+    }
+}