diff options
author | Teemu Suo-Anttila <teemusa@vaadin.com> | 2013-11-07 11:32:28 +0200 |
---|---|---|
committer | Teemu Suo-Anttila <teemusa@vaadin.com> | 2013-11-07 09:52:41 +0000 |
commit | d2e7b366ef40bd5a27ba4693eba8d80ae8fc4f77 (patch) | |
tree | 11cc418f7e78e63cf8ac8a1aec1d77f41eee72a6 | |
parent | d70d6a2cac7271b2f49805611d77cd3f7eb431f1 (diff) | |
download | vaadin-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.java | 34 |
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; + } + } |