[Piglit] [PATCH 1/4] framework: Fix filtering of excluded tests.

Kenneth Graunke kenneth at whitecape.org
Fri Feb 17 01:38:48 PST 2012

del dict[key] will raise a KeyError if the key isn't actually in the
dictionary.  This can happen if, say, a test didn't match the -t option
and subsequently matched a -x option.

Also, deleting dictionary items while iterating over them is apparently
not safe in Python 3, so we may as well just create a new dictionary
with only the entries we want.

This is simpler anyway.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
 framework/core.py |   13 +++++--------
 1 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/framework/core.py b/framework/core.py
index 2414709..a84c68f 100644
--- a/framework/core.py
+++ b/framework/core.py
@@ -520,15 +520,12 @@ class TestProfile:
 		def matches_any_regexp(x, re_list):
 			return True in map(lambda r: r.search(x) != None, re_list)
+		def test_matches((path, test)):
+			return (matches_any_regexp(path, env.filter) and
+			        not matches_any_regexp(path, env.exclude_filter))
 		# Filter out unwanted tests
-		for path in self.test_list.keys():
-			# Exclude tests that don't match any of the `filter' regexps (-t options)
-			if env.filter and not matches_any_regexp(path, env.filter):
-				del self.test_list[path]
-			# Exclude tests that match an `exclude_filter' regexp (-x options)
-			if env.exclude_filter and matches_any_regexp(path, env.exclude_filter):
-				del self.test_list[path]
+		self.test_list = dict(filter(test_matches, self.test_list.items()))
 		# Queue up all the concurrent tests, so the pool is filled
 		# at the start of the test run.

More information about the Piglit mailing list