diff options
Diffstat (limited to 'test/utils')
| -rw-r--r-- | test/utils/test.py | 9 | ||||
| -rw-r--r-- | test/utils/testset.py | 28 |
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 |