summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <teemusa@vaadin.com>2013-11-07 11:32:28 +0200
committerTeemu Suo-Anttila <teemusa@vaadin.com>2013-11-07 09:52:41 +0000
commitd2e7b366ef40bd5a27ba4693eba8d80ae8fc4f77 (patch)
tree11cc418f7e78e63cf8ac8a1aec1d77f41eee72a6
parentd70d6a2cac7271b2f49805611d77cd3f7eb431f1 (diff)
downloadvaadin-framework-d2e7b366ef40bd5a27ba4693eba8d80ae8fc4f77.tar.gz
vaadin-framework-d2e7b366ef40bd5a27ba4693eba8d80ae8fc4f77.zip
Support special characters in quotes in locators (#12738).
Change-Id: I5674bfdab3a5ff3ff9799178bbf9e187fa7ea544
-rw-r--r--client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java34
1 files changed, 31 insertions, 3 deletions
diff --git a/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java b/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java
index 96374e898a..95b2745bf8 100644
--- a/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java
+++ b/client/src/com/vaadin/client/componentlocator/VaadinFinderLocatorStrategy.java
@@ -192,9 +192,10 @@ public class VaadinFinderLocatorStrategy implements LocatorStrategy {
* @return The predicate string for the path fragment or null if none.
*/
private String extractPredicateString(String pathFragment) {
- int ixOpenBracket = pathFragment.indexOf('[');
+ int ixOpenBracket = indexOfIgnoringQuotes(pathFragment, '[');
if (ixOpenBracket >= 0) {
- int ixCloseBracket = pathFragment.indexOf(']', ixOpenBracket);
+ int ixCloseBracket = indexOfIgnoringQuotes(pathFragment, ']',
+ ixOpenBracket);
return pathFragment.substring(ixOpenBracket + 1, ixCloseBracket);
}
return null;
@@ -376,7 +377,7 @@ public class VaadinFinderLocatorStrategy implements LocatorStrategy {
* the path.
*/
private String[] splitFirstFragmentFromTheRest(String path) {
- int ixOfSlash = path.indexOf('/');
+ int ixOfSlash = indexOfIgnoringQuotes(path, '/');
if (ixOfSlash > 0) {
return new String[] { path.substring(0, ixOfSlash),
path.substring(ixOfSlash) };
@@ -384,4 +385,31 @@ public class VaadinFinderLocatorStrategy implements LocatorStrategy {
return new String[] { path };
}
+ private int indexOfIgnoringQuotes(String str, char find) {
+ return indexOfIgnoringQuotes(str, find, 0);
+ }
+
+ private int indexOfIgnoringQuotes(String str, char find, int startingAt) {
+ boolean quote = false;
+ String quoteChars = "'\"";
+ char currentQuote = '"';
+ for (int i = startingAt; i < str.length(); ++i) {
+ char cur = str.charAt(i);
+ if (quote) {
+ if (cur == currentQuote) {
+ quote = !quote;
+ }
+ continue;
+ } else if (cur == find) {
+ return i;
+ } else {
+ if (quoteChars.indexOf(cur) >= 0) {
+ currentQuote = cur;
+ quote = !quote;
+ }
+ }
+ }
+ return -1;
+ }
+
}