Change-Id: If25ebdcdd4df438402d1cdc60a63c629e84c73a0tags/7.4.0.beta1
@@ -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); | |||
} | |||
} |
@@ -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); | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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); | |||
} | |||
} |