def usage(msg=None):
if msg:
print(msg.strip() + '\n')
- print("""Usage: testpd [-dvarslR] [test, ...]
+ print("""Usage: testpd [-dvalsrfcR] [<test1> <test2> ...]
-d Turn on debugging
-v Verbose
-a All tests
- -l List all tests
+ -l List test(s)
-s Show test(s)
-r Run test(s)
- -f Fix failed test(s)
+ -f Fix failed test(s) / create initial output for new test(s)
-c Report decoder code coverage
-R <directory> Save test reports to <directory>
- <test> Protocol decoder name ("i2c") and optionally test name ("i2c/icc")""")
+ <test> Protocol decoder name ("i2c") and optionally test name ("i2c/rtc")""")
sys.exit()
opargs[-1] += ":%s" % op['class']
name += "/%s" % op['class']
if VERBOSE:
- dots = '.' * (60 - len(name) - 2)
+ dots = '.' * (77 - len(name) - 2)
INFO("%s %s " % (name, dots), end='')
results.append({
'testcase': name,
if re.match(reg, results[-1]['error']):
# found it, not an error
results[-1].pop('error')
+ errors -= 1
if VERBOSE:
if 'diff' in results[-1]:
INFO("Output mismatch")
return results, errors
+def get_run_tests_error_diff_counts(results):
+ """Get error and diff counters from run_tests() results."""
+ errs = 0
+ diffs = 0
+ for result in results:
+ if 'error' in result:
+ errs += 1
+ if 'diff' in result:
+ diffs += 1
+ return errs, diffs
+
def gen_report(result):
out = []
opt_all = opt_run = opt_show = opt_list = opt_fix = opt_coverage = False
report_dir = None
-opts, args = getopt(sys.argv[1:], "dvarslfcR:S:")
+try:
+ opts, args = getopt(sys.argv[1:], "dvarslfcR:S:")
+except Exception as e:
+ usage('error while parsing command line arguments: {}'.format(e))
for opt, arg in opts:
if opt == '-d':
DEBUG += 1
try:
if args:
testlist = get_tests(args)
- elif opt_all:
+ elif opt_all or opt_list:
testlist = get_tests(os.listdir(tests_dir))
else:
usage("Specify either -a or tests.")
ERR("Could not find sigrok-dumps repository at %s" % dumps_dir)
sys.exit(1)
results, errors = run_tests(testlist, fix=opt_fix)
- ret = errors
+ ret = 0
+ errs, diffs = get_run_tests_error_diff_counts(results)
+ if errs:
+ ret = 1
+ elif diffs:
+ ret = 2
elif opt_show:
show_tests(testlist)
elif opt_list:
raise
sys.exit(ret)
-