The previous implementation didn't really work too well.

If you tried something like
profile.remove_test(""spec/!OpenGL 3.1/primitive-restart-xfb generated")
you'd just get a Python exception and die.

Also, it was painful to remove whole categories of tests, such as
"spec/!OpenGL 3.1/".

The new version allows you to specify a full test name with arguments
as seen above.

Also, it supports *-style wildcards so that and entire category of tests
can be easily removed with something like remove_test("spec/!OpenGL 3.1/*")
---
 framework/core.py |   33 ++++++++++++++++++++++-----------
 1 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/framework/core.py b/framework/core.py
index 6a3b97a..6e8a8c2 100644
--- a/framework/core.py
+++ b/framework/core.py
@@ -518,6 +518,7 @@ class TestProfile:
        def __init__(self):
                self.tests = Group()
                self.test_list = {}
+               self.remove_list = []
 
        def flatten_group_hierarchy(self):
                '''
@@ -541,6 +542,14 @@ class TestProfile:
                # Clear out the old Group()
                self.tests = Group()
 
+       def in_remove_list(self, test):
+               """Is the given test in the list previously specified by calls 
to
+               remove_test()?"""
+               for t in self.remove_list:
+                       if t.match(test):
+                               return True
+               return False
+
        def prepare_test_list(self, env):
                self.flatten_group_hierarchy()
 
@@ -551,6 +560,7 @@ class TestProfile:
                        path, test = item
                        return ((not env.filter or matches_any_regexp(path, 
env.filter)) and
                                not path in env.exclude_tests and
+                               not self.in_remove_list(path) and
                                not matches_any_regexp(path, 
env.exclude_filter))
 
                # Filter out unwanted tests
@@ -578,19 +588,20 @@ class TestProfile:
                                test.doRun(env, path, json_writer)
                ConcurrentTestPool().join()
 
-       def remove_test(self, test_path):
-               """Remove a fully qualified test from the profile.
-
-               ``test_path`` is a string with slash ('/') separated
-               components. It has no leading slash. For example::
-                       test_path = 'spec/glsl-1.30/linker/do-stuff'
+       def remove_test(self, test_pattern):
+               """Remove a test from the profile.
+               ``test_path`` may be a fully-qualified test name (with 
arguemnts)
+               or a pattern containing '*' wildcard characters.  Example:
+                       'spec/glsl-1.30/linker/do-stuff'
+                       'spec/EXT_framebuffer_multisample/polygon-smooth 4'
+                       'spec/!OpenGL 3.1/*'
                """
+               test_pattern = string.replace(test_pattern, ".", "\.")
+               test_pattern = string.replace(test_pattern, "*", ".*")
+               t = re.compile(test_pattern)
+               self.remove_list.append(t)
+
 
-               l = test_path.split('/')
-               group = self.tests[l[0]]
-               for group_name in l[1:-2]:
-                       group = group[group_name]
-               del group[l[-1]]
 
 #############################################################################
 ##### Loaders
-- 
1.7.3.4

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to