summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
-rw-r--r--uitest/src/com/vaadin/tests/components/ui/VaadinFinderLocatorUISearchTest.java43
4 files changed, 155 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 a36ea1ac85..7346e489e5 100644
--- a/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java
+++ b/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java
@@ -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
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);
+ }
+}
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
index 0000000000..37766dd060
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/ui/VaadinFinderLocatorUISearchTest.java
@@ -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);
+ }
+}