about summary refs log tree commit diff stats
path: root/test/utils
diff options
context:
space:
mode:
Diffstat (limited to 'test/utils')
-rw-r--r--test/utils/test.py9
-rw-r--r--test/utils/testset.py28
2 files changed, 34 insertions, 3 deletions
diff --git a/test/utils/test.py b/test/utils/test.py
index 1caf1013..e4f8888c 100644
--- a/test/utils/test.py
+++ b/test/utils/test.py
@@ -2,20 +2,22 @@ class Test(object):
     "Stand for a test to run"
 
     def __init__(self, command_line, base_dir="", depends=None,
-                 products=None):
+                 products=None, tags=None):
         """Create a Test instance.
         @command_line: list of string standing for arguments to launch
         @base_dir: base directory for launch
         @depends: list of Test instance indicating dependencies
         @products: elements produced to remove after tests
+        @tags: list of str indicating current test categories
         """
         self.command_line = command_line
         self.base_dir = base_dir
         self.depends = depends if depends else []
         self.products = products if products else []
+        self.tags = tags if tags else []
 
     def __repr__(self):
-        displayed = ["command_line", "base_dir", "depends", "products"]
+        displayed = ["command_line", "base_dir", "depends", "products", "tags"]
         return "<Test " + \
             " ".join("%s=%s" % (n, getattr(self,n)) for n in displayed ) + ">"
 
@@ -26,4 +28,5 @@ class Test(object):
         return all([self.command_line == test.command_line,
                     self.base_dir == test.base_dir,
                     self.depends == test.depends,
-                    self.products == test.products])
+                    self.products == test.products,
+                    self.tags == test.tags])
diff --git a/test/utils/testset.py b/test/utils/testset.py
index 5c508836..94e5fe1f 100644
--- a/test/utils/testset.py
+++ b/test/utils/testset.py
@@ -244,3 +244,31 @@ class TestSet(object):
     def tests_passed(self):
         "Return a non zero value if at least one test failed"
         return self.errorcode
+
+    def filter_tags(self, include_tags=None, exclude_tags=None):
+        """Filter tests by tags
+        @include_tags: list of tags' name (whitelist)
+        @exclude_tags: list of tags' name (blacklist)
+        @include_tags and @exclude_tags cannot be used together"""
+
+        if include_tags and exclude_tags:
+            raise ValueError("Include and Exclude cannot be used together")
+
+        new_testset_include = []
+        new_testset_exclude = list(self.tests)
+
+        # Update include and exclude lists
+        for index, test in enumerate(self.tests):
+            for tag in test.tags:
+                if exclude_tags and tag in exclude_tags:
+                    new_testset_exclude.remove(test)
+                    break
+                if include_tags and tag in include_tags:
+                    new_testset_include.append(test)
+                    break
+
+        # Update testset list
+        if include_tags:
+            self.tests = new_testset_include
+        elif exclude_tags:
+            self.tests = new_testset_exclude