Change-Id: If25ebdcdd4df438402d1cdc60a63c629e84c73a0tags/7.4.0.beta1
*/ | */ | ||||
package com.vaadin.client.componentlocator; | package com.vaadin.client.componentlocator; | ||||
import com.google.gwt.regexp.shared.RegExp; | |||||
/** | /** | ||||
* Common String manipulator utilities used in VaadinFinderLocatorStrategy and | * Common String manipulator utilities used in VaadinFinderLocatorStrategy and | ||||
* SelectorPredicates. | * SelectorPredicates. | ||||
protected static int indexOfIgnoringQuoted(String str, char find) { | protected static int indexOfIgnoringQuoted(String str, char find) { | ||||
return indexOfIgnoringQuoted(str, find, 0); | 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); | |||||
} | |||||
} | } |
return connectorHierarchy; | 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} | * {@inheritDoc} | ||||
*/ | */ | ||||
} | } | ||||
List<Element> elements = new ArrayList<Element>(); | List<Element> elements = new ArrayList<Element>(); | ||||
if (isNotificationExpression(path)) { | |||||
if (LocatorUtil.isNotificationElement(path)) { | |||||
for (VNotification n : findNotificationsByPath(path)) { | for (VNotification n : findNotificationsByPath(path)) { | ||||
elements.add(n.getElement()); | elements.add(n.getElement()); | ||||
ComponentConnector parent, String pathFragment, | ComponentConnector parent, String pathFragment, | ||||
boolean collectRecursively) { | boolean collectRecursively) { | ||||
ArrayList<ComponentConnector> potentialMatches = new ArrayList<ComponentConnector>(); | 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) { | if (parent instanceof HasComponentsConnector) { | ||||
List<ComponentConnector> children = ((HasComponentsConnector) parent) | List<ComponentConnector> children = ((HasComponentsConnector) parent) | ||||
.getChildComponents(); | .getChildComponents(); | ||||
for (ComponentConnector child : children) { | for (ComponentConnector child : children) { | ||||
String widgetName = getWidgetName(pathFragment); | |||||
if (connectorMatchesPathFragment(child, widgetName)) { | if (connectorMatchesPathFragment(child, widgetName)) { | ||||
potentialMatches.add(child); | potentialMatches.add(child); | ||||
} | } |
/* | |||||
* 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); | |||||
} | |||||
} |
/* | |||||
* 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); | |||||
} | |||||
} |