summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2017-09-23 21:41:28 +0200
committerDavid Robillard <d@drobilla.net>2017-09-23 21:41:28 +0200
commitc5b2c22fd6d78be36acf0c26f9aa78e435a9986e (patch)
treef2f1a980100f420228b65c6fd789f7c11eb2d43e
parent33ab2c6b223a007ecbfea38415d6d3bb4ffcd944 (diff)
downloadautowaf-c5b2c22fd6d78be36acf0c26f9aa78e435a9986e.tar.gz
autowaf-c5b2c22fd6d78be36acf0c26f9aa78e435a9986e.tar.bz2
autowaf-c5b2c22fd6d78be36acf0c26f9aa78e435a9986e.zip
Improve testing API
-rw-r--r--autowaf.py37
1 files changed, 24 insertions, 13 deletions
diff --git a/autowaf.py b/autowaf.py
index b435fca..2784ba7 100644
--- a/autowaf.py
+++ b/autowaf.py
@@ -710,7 +710,7 @@ def post_test(ctx, appname, dirs=['src'], remove=['*boost*', 'c++*']):
if top_level:
cd_to_orig_dir(ctx, top_level)
-def run_test(ctx, appname, test, desired_status=0, dirs=['src'], name='', header=False):
+def run_test(ctx, appname, test, desired_status=0, dirs=['src'], name='', header=False, quiet=False):
"""Run an individual test.
`test` is either a shell command string, or a list of [name, return status] for
@@ -720,14 +720,17 @@ def run_test(ctx, appname, test, desired_status=0, dirs=['src'], name='', header
ctx.autowaf_local_tests_total += 1
ctx.autowaf_tests[appname]['total'] += 1
+ out = (None,None)
if type(test) == list:
name = test[0]
returncode = test[1]
+ elif callable(test):
+ returncode = test()
else:
s = test
if type(test) == type([]):
s = ' '.join(i)
- if header:
+ if header and not quiet:
Logs.pprint('Green', '\n** Test %s' % s)
cmd = test
if Options.options.test_wrapper:
@@ -735,24 +738,26 @@ def run_test(ctx, appname, test, desired_status=0, dirs=['src'], name='', header
if name == '':
name = test
- if Options.options.verbose_tests:
- proc = subprocess.Popen(cmd, shell=True)
- else:
- proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-
+ proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out = proc.communicate()
returncode = proc.returncode
- if returncode == desired_status:
- Logs.pprint('GREEN', '** Pass %s' % name)
- return True
+ success = desired_status is None or returncode == desired_status
+ if success:
+ if not quiet:
+ Logs.pprint('GREEN', '** Pass %s' % name)
else:
Logs.pprint('RED', '** FAIL %s' % name)
- if type(test) != list:
- Logs.pprint('NORMAL', out[1])
ctx.autowaf_tests_failed += 1
ctx.autowaf_tests[appname]['failed'] += 1
- return False
+ if type(test) != list and not callable(test):
+ Logs.pprint('RED', test)
+
+ if Options.options.verbose_tests and type(test) != list and not callable(test):
+ sys.stdout.write(out[0])
+ sys.stderr.write(out[1])
+
+ return (success, out)
def tests_name(ctx, appname, name='*'):
if name == '*':
@@ -764,6 +769,12 @@ def begin_tests(ctx, appname, name='*'):
ctx.autowaf_local_tests_failed = 0
ctx.autowaf_local_tests_total = 0
Logs.pprint('GREEN', '\n** Begin %s tests' % tests_name(ctx, appname, name))
+ class Handle:
+ def __enter__(self):
+ pass
+ def __exit__(self, type, value, traceback):
+ end_tests(ctx, appname, name)
+ return Handle()
def end_tests(ctx, appname, name='*'):
failures = ctx.autowaf_local_tests_failed