diff options
| author | Ajax <commial@gmail.com> | 2016-12-22 17:49:32 +0100 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2017-01-14 14:24:16 +0100 |
| commit | 0cf75919aed484cf406a24132e1716787cd32ac6 (patch) | |
| tree | 28acbc442b97313dd848f202007d53ab8f8f59a1 /test/utils/testset.py | |
| parent | 69376ab17bf46e60bda168a81667e17af620ffe2 (diff) | |
| download | miasm-0cf75919aed484cf406a24132e1716787cd32ac6.tar.gz miasm-0cf75919aed484cf406a24132e1716787cd32ac6.zip | |
Add a only-tags option for test_all
Diffstat (limited to 'test/utils/testset.py')
| -rw-r--r-- | test/utils/testset.py | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/test/utils/testset.py b/test/utils/testset.py index 4336f4fa..e1df01a4 100644 --- a/test/utils/testset.py +++ b/test/utils/testset.py @@ -267,26 +267,36 @@ class TestSet(object): """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") + If @include_tags and @exclude_tags are used together, @exclude_tags will + act as a blacklist on @include_tags generated tests + """ - new_testset_include = [] - new_testset_exclude = list(self.tests) + new_testset = [] - # 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 + include_tags = set(include_tags) + exclude_tags = set(exclude_tags) + if include_tags.intersection(exclude_tags): + raise ValueError("Tags are mutually included and excluded: %s" % include_tags.intersection(exclude_tags)) - # Update testset list - if include_tags: - self.tests = new_testset_include - elif exclude_tags: - self.tests = new_testset_exclude + for test in self.tests: + tags = set(test.tags) + if exclude_tags.intersection(tags): + # Ignore the current test because it is excluded + continue + if not include_tags: + new_testset.append(test) + else: + if include_tags.intersection(tags): + new_testset.append(test) + + # Add tests dependencies + dependency = list(test.depends) + while dependency: + subtest = dependency.pop() + if subtest not in new_testset: + new_testset.append(subtest) + for subdepends in subtest.depends: + if subdepends not in new_testset: + dependency.append(subdepends) + + self.tests = new_testset |