Permalink
Browse files

Merge pull request #459 from commial/feature/only-tags

Add a only-tags option for test_all
  • Loading branch information...
serpilliere committed Jan 14, 2017
2 parents 29456a7 + 0cf7591 commit 6fef06f0026aa94db610e223690337949dd39134
Showing with 51 additions and 31 deletions.
  1. +21 −11 test/test_all.py
  2. +30 −20 test/utils/testset.py
View
@@ -57,7 +57,7 @@ def __init__(self, script, jitter ,*args, **kwargs):
# script -> blacklisted jitter
blacklist = {
- "x86/unit/mn_float.py": ["python"],
+ "x86/unit/mn_float.py": ["python", "llvm"],
}
for script in ["x86/sem.py",
"x86/unit/mn_strings.py",
@@ -628,6 +628,9 @@ class ExampleJitterNoPython(ExampleJitter):
parser.add_argument("-t", "--omit-tags", help="Omit tests based on tags \
(tag1,tag2). Available tags are %s. \
By default, no tag is omitted." % ", ".join(TAGS.keys()), default="")
+ parser.add_argument("-o", "--only-tags", help="Restrict to tests based on tags \
+(tag1,tag2). Available tags are %s. \
+By default, all tag are considered." % ", ".join(TAGS.keys()), default="")
parser.add_argument("-n", "--do-not-clean",
help="Do not clean tests products", action="store_true")
args = parser.parse_args()
@@ -637,16 +640,23 @@ class ExampleJitterNoPython(ExampleJitter):
if args.mono is True or args.coverage is True:
multiproc = False
- ## Parse omit-tags argument
+ ## Parse omit-tags and only-tags argument
exclude_tags = []
- for tag in args.omit_tags.split(","):
- if not tag:
- continue
- if tag not in TAGS:
- print "%(red)s[TAG]%(end)s" % cosmetics.colors, \
- "Unkown tag '%s'" % tag
- exit(-1)
- exclude_tags.append(TAGS[tag])
+ include_tags = []
+ for dest, src in ((exclude_tags, args.omit_tags),
+ (include_tags, args.only_tags)):
+ for tag in src.split(","):
+ if not tag:
+ continue
+ if tag not in TAGS:
+ print "%(red)s[TAG]%(end)s" % cosmetics.colors, \
+ "Unkown tag '%s'" % tag
+ exit(-1)
+ dest.append(TAGS[tag])
+
+ if exclude_tags and include_tags:
+ print "%(red)s[TAG]%(end)s" % cosmetics.colors, \
+ "Omit and Only used together: whitelist mode"
# Handle coverage
coveragerc = None
@@ -736,7 +746,7 @@ class ExampleJitterNoPython(ExampleJitter):
# Filter testset according to tags
- testset.filter_tags(exclude_tags=exclude_tags)
+ testset.filter_tags(exclude_tags=exclude_tags, include_tags=include_tags)
# Run tests
testset.run()
View
@@ -267,26 +267,36 @@ 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")
+ 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

0 comments on commit 6fef06f

Please sign in to comment.