aboutsummaryrefslogtreecommitdiff
path: root/scripts/test_runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/test_runner.py')
-rwxr-xr-xscripts/test_runner.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/scripts/test_runner.py b/scripts/test_runner.py
new file mode 100755
index 0000000..80c3e30
--- /dev/null
+++ b/scripts/test_runner.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+
+""" Test runner """
+
+import argparse
+import os
+import subprocess
+
+def main():
+ """ Main function"""
+
+ parser = argparse.ArgumentParser(description='Run test executables')
+ parser.add_argument('-v', '--verbose', action='store_true', help='Show test stdout/stderr')
+ parser.add_argument('--valgrind', action='store_true', help='Run tests under valgrind')
+ parser.add_argument('test', type=str, nargs='+', help='test executable to run')
+ args = parser.parse_args()
+
+ cwd = os.getcwd()
+ fail_count = 0
+
+ for test in args.test:
+ cmd = []
+ if args.valgrind:
+ cmd += [ 'valgrind', '--leak-check=full', '--error-exitcode=128' ]
+ cmd.append(os.path.join(cwd, test))
+ #print(cmd)
+
+ print(f' {test:.<48}', end='')
+ result = subprocess.run(cmd, capture_output=not args.verbose, check=False)
+ print('ok' if result.returncode == 0 else 'failed')
+ if result.returncode != 0:
+ fail_count += 1
+
+ print(f' Ran {len(args.test)} tests, {fail_count} failed')
+
+
+if __name__ == '__main__':
+ main()