Index: javatests/org/chromium/distiller/JsTestSuiteBase.java |
diff --git a/javatests/org/chromium/distiller/JsTestSuiteBase.java b/javatests/org/chromium/distiller/JsTestSuiteBase.java |
index e3fbb094920c1f27b9894877ce9dddcbaeafb6ff..4860e5415566c4fa5582f8d1cbbf333148fdf169 100644 |
--- a/javatests/org/chromium/distiller/JsTestSuiteBase.java |
+++ b/javatests/org/chromium/distiller/JsTestSuiteBase.java |
@@ -8,6 +8,8 @@ import com.google.gwt.core.client.JavaScriptException; |
import com.google.gwt.regexp.shared.RegExp; |
import com.google.gwt.user.client.Window; |
+import java.util.ArrayList; |
+import java.util.List; |
import java.util.Map; |
import java.util.Set; |
import java.util.TreeMap; |
@@ -125,14 +127,60 @@ public class JsTestSuiteBase { |
} |
private class TestFilter { |
- RegExp regexp; |
+ List<RegExp> pos; |
+ List<RegExp> neg; |
+ |
TestFilter(String filter) { |
- if (filter != null) regexp = RegExp.compile(filter); |
+ pos = new ArrayList<RegExp>(); |
+ neg = new ArrayList<RegExp>(); |
+ |
+ if (filter == null) return; |
+ |
+ int begin = 0; |
+ filter = filter + ":"; |
+ for (int i = 0; i < filter.length(); i++) { |
cjhopman
2015/03/31 17:55:40
how about just split on "-" and then split each si
wychen
2015/03/31 18:26:49
Done.
|
+ if (filter.charAt(i) == ':' || filter.charAt(i) == '-') { |
+ if (begin != i) { |
+ Boolean isNeg = false; |
cjhopman
2015/03/31 17:55:40
Doesn't this need to be initialized outside the lo
wychen
2015/03/31 18:26:49
isNeg is used to tell whether the current segment
|
+ |
+ if (filter.charAt(begin) == '-') { |
+ isNeg = true; |
+ begin++; |
+ } |
+ String q = filter.substring(begin, i); |
+ q = q.replace(".", "\\."); |
+ q = q.replace("*", ".*"); |
+ q = q.replace("?", "."); |
+ RegExp r = RegExp.compile("^" + q + "$"); |
+ if (isNeg) { |
+ neg.add(r); |
+ } else { |
+ pos.add(r); |
+ } |
+ } |
+ if (filter.charAt(i) == ':') { |
+ begin = i + 1; |
+ } else { |
+ begin = i; |
+ } |
+ } |
+ } |
} |
public boolean test(String className, String methodName) { |
- if (regexp == null) return true; |
- return regexp.test(className + "." + methodName); |
+ boolean ans = false; |
+ if (pos.size() == 0) ans = true; |
+ for (int i = 0; i < pos.size(); i++) { |
+ if (pos.get(i).test(className + "." + methodName)) { |
+ ans = true; |
+ } |
+ } |
+ for (int i = 0; i < neg.size(); i++) { |
+ if (neg.get(i).test(className + "." + methodName)) { |
+ ans = false; |
+ } |
+ } |
+ return ans; |
} |
} |