| Index: tools/testrunner/local/testsuite.py
|
| diff --git a/tools/testrunner/local/testsuite.py b/tools/testrunner/local/testsuite.py
|
| index b4e1856bf6e5b89f4ca6b4b285c76e22b263de77..f3f64150b943778c3387559b143aad014b62bb55 100644
|
| --- a/tools/testrunner/local/testsuite.py
|
| +++ b/tools/testrunner/local/testsuite.py
|
| @@ -132,6 +132,10 @@ class TestSuite(object):
|
| else:
|
| return testcase.path
|
|
|
| + def VirtualTestName(self, testcase):
|
| + """Returns the test path prefixed with the variant name."""
|
| + return "virtual/%s/%s" % (testcase.variant, self.CommonTestName(testcase))
|
| +
|
| def ListTests(self, context):
|
| raise NotImplementedError
|
|
|
| @@ -169,18 +173,27 @@ class TestSuite(object):
|
|
|
| def FilterTestCasesByStatus(self, warn_unused_rules,
|
| slow_tests="dontcare",
|
| - pass_fail_tests="dontcare"):
|
| + pass_fail_tests="dontcare",
|
| + virtual=False):
|
| +
|
| + # Use only virtual rules and wildcards when filtering virtual test cases
|
| + # and generic rules when filtering generic test cases.
|
| + filter_virtual = lambda d: {k:v for k,v in d.iteritems()
|
| + if not(virtual ^ k.startswith("virtual/"))}
|
| + rules = filter_virtual(self.rules)
|
| + wildcards = filter_virtual(self.wildcards)
|
| +
|
| filtered = []
|
| used_rules = set()
|
| for t in self.tests:
|
| slow = False
|
| pass_fail = False
|
| - testname = self.CommonTestName(t)
|
| - if testname in self.rules:
|
| + testname = self.VirtualTestName(t) if virtual else self.CommonTestName(t)
|
| + if testname in rules:
|
| used_rules.add(testname)
|
| # Even for skipped tests, as the TestCase object stays around and
|
| # PrintReport() uses it.
|
| - t.outcomes = self.rules[testname]
|
| + t.outcomes = rules[testname]
|
| if statusfile.DoSkip(t.outcomes):
|
| continue # Don't add skipped tests to |filtered|.
|
| for outcome in t.outcomes:
|
| @@ -189,14 +202,14 @@ class TestSuite(object):
|
| slow = statusfile.IsSlow(t.outcomes)
|
| pass_fail = statusfile.IsPassOrFail(t.outcomes)
|
| skip = False
|
| - for rule in self.wildcards:
|
| + for rule in wildcards:
|
| assert rule[-1] == '*'
|
| if testname.startswith(rule[:-1]):
|
| used_rules.add(rule)
|
| - t.outcomes |= self.wildcards[rule]
|
| + t.outcomes |= wildcards[rule]
|
| if statusfile.DoSkip(t.outcomes):
|
| skip = True
|
| - break # "for rule in self.wildcards"
|
| + break # "for rule in wildcards"
|
| slow = slow or statusfile.IsSlow(t.outcomes)
|
| pass_fail = pass_fail or statusfile.IsPassOrFail(t.outcomes)
|
| if (skip
|
| @@ -209,12 +222,12 @@ class TestSuite(object):
|
| if not warn_unused_rules:
|
| return
|
|
|
| - for rule in self.rules:
|
| + for rule in rules:
|
| if rule not in used_rules:
|
| - print("Unused rule: %s -> %s" % (rule, self.rules[rule]))
|
| - for rule in self.wildcards:
|
| + print("Unused rule: %s -> %s" % (rule, rules[rule]))
|
| + for rule in wildcards:
|
| if rule not in used_rules:
|
| - print("Unused rule: %s -> %s" % (rule, self.wildcards[rule]))
|
| + print("Unused rule: %s -> %s" % (rule, wildcards[rule]))
|
|
|
| def FilterTestCasesByArgs(self, args):
|
| """Filter test cases based on command-line arguments.
|
|
|