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..ff6fbd94bba7fee604b9f814ac67a490166915db 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,56 @@ public class JsTestSuiteBase { |
} |
private class TestFilter { |
- RegExp regexp; |
+ private final List<RegExp> pos; |
+ private final List<RegExp> neg; |
+ |
+ private RegExp convert(String q) { |
+ // This is a simplified conversion, and doesn't handle all |
+ // possible glob strings correctly. |
+ q = q.replace(".", "\\."); |
+ q = q.replace("*", ".*"); |
+ q = q.replace("?", "."); |
+ return RegExp.compile("^" + q + "$"); |
+ } |
+ |
TestFilter(String filter) { |
- if (filter != null) regexp = RegExp.compile(filter); |
+ pos = new ArrayList<RegExp>(); |
+ neg = new ArrayList<RegExp>(); |
+ |
+ if (filter == null) return; |
+ |
+ String[] segments = filter.split("-"); |
+ if (segments.length > 2) { |
+ LogUtil.logToConsole("[ERROR] filter \"" + filter + "\" is malformed."); |
+ } |
+ for (int i = 0; i < segments.length; i++) { |
+ String[] filters = segments[i].split(":"); |
+ for (int j = 0; j < filters.length; j++) { |
+ if (filters[j].length() == 0) continue; |
+ RegExp r = convert(filters[j]); |
+ if (i == 0) { |
+ pos.add(r); |
+ } else { |
+ neg.add(r); |
+ } |
+ } |
+ } |
} |
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; |
} |
} |