coverage.py: allow passing tests by number

This commit is contained in:
Johannes Schauer Marin Rodrigues 2022-06-13 16:01:39 +02:00
parent e9e9cec884
commit 679f6cb2fc
Signed by untrusted user: josch
GPG key ID: F2CBA5C78FBD83E1

View file

@ -122,8 +122,6 @@ def main():
with open("coverage.txt") as f: with open("coverage.txt") as f:
for test in Deb822.iter_paragraphs(f): for test in Deb822.iter_paragraphs(f):
name = test["Test"] name = test["Test"]
if args.test and name not in args.test:
continue
dists = test.get("Dists", default_dist) dists = test.get("Dists", default_dist)
if dists == "any": if dists == "any":
dists = all_dists dists = all_dists
@ -177,23 +175,56 @@ def main():
tt = "null" tt = "null"
tests.append((tt, name, dist, mode, variant, fmt)) tests.append((tt, name, dist, mode, variant, fmt))
torun = []
num_tests = len(tests)
if args.test:
# check if all given tests are either a valid name or a valid number
for test in args.test:
if test in [name for (_, name, _, _, _, _) in tests]:
continue
if not test.isdigit():
print(f"cannot find test named {test}", file=sys.stderr)
exit(1)
if int(test) >= len(tests) or int(test) <= 0 or str(int(test)) != test:
print(f"test number {test} doesn't exist", file=sys.stderr)
exit(1)
for i, (_, name, _, _, _, _) in enumerate(tests):
# if either the number or test name matches, then we use this test,
# otherwise we skip it
if name in args.test:
torun.append(i)
if str(i + 1) in args.test:
torun.append(i)
num_tests = len(torun)
starttime = time.time() starttime = time.time()
skipped = defaultdict(list) skipped = defaultdict(list)
failed = [] failed = []
num_success = 0 num_success = 0
num_finished = 0
for i, (test, name, dist, mode, variant, fmt) in enumerate(tests): for i, (test, name, dist, mode, variant, fmt) in enumerate(tests):
if torun and i not in torun:
continue
print(separator, file=sys.stderr) print(separator, file=sys.stderr)
print("(%d/%d) %s" % (i + 1, len(tests), name), file=sys.stderr) print("(%d/%d) %s" % (i + 1, len(tests), name), file=sys.stderr)
print("dist: %s" % dist, file=sys.stderr) print("dist: %s" % dist, file=sys.stderr)
print("mode: %s" % mode, file=sys.stderr) print("mode: %s" % mode, file=sys.stderr)
print("variant: %s" % variant, file=sys.stderr) print("variant: %s" % variant, file=sys.stderr)
print("format: %s" % fmt, file=sys.stderr) print("format: %s" % fmt, file=sys.stderr)
if i > 0: if num_finished > 0:
currenttime = time.time() currenttime = time.time()
timeleft = timedelta( timeleft = timedelta(
seconds=int((len(tests) - i) * (currenttime - starttime) / i) seconds=int(
(num_tests - num_finished)
* (currenttime - starttime)
/ num_finished
)
) )
print("time left: %s" % timeleft, file=sys.stderr) print("time left: %s" % timeleft, file=sys.stderr)
if failed:
print("failed: %d" % len(failed))
num_finished += 1
with open("tests/" + name) as fin, open("shared/test.sh", "w") as fout: with open("tests/" + name) as fin, open("shared/test.sh", "w") as fout:
for line in fin: for line in fin:
line = line.replace("{{ CMD }}", cmd) line = line.replace("{{ CMD }}", cmd)