aboutsummaryrefslogtreecommitdiff
path: root/run_project_tests.py
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2020-02-29 14:48:12 +0000
committerJon Turney <jon.turney@dronecode.org.uk>2020-02-29 16:35:18 +0000
commit42fbf9299a01c68558302abc354d931675c98ebb (patch)
tree8649aada7ae653841974a248354c258fe3034ccc /run_project_tests.py
parentcc98d262fe0168c1523879746d657eceafd38bb6 (diff)
downloadmeson-42fbf9299a01c68558302abc354d931675c98ebb.zip
meson-42fbf9299a01c68558302abc354d931675c98ebb.tar.gz
meson-42fbf9299a01c68558302abc354d931675c98ebb.tar.bz2
Extend _run_test to test build without regenerate
Add coverage of a simple 'configure then build' sequence, to catch bugs which occur with that. Also, to simplify returning results from functions called by _run_test(), allow it also throw TestResult objects, which run_test() catches and returns.
Diffstat (limited to 'run_project_tests.py')
-rwxr-xr-xrun_project_tests.py55
1 files changed, 34 insertions, 21 deletions
diff --git a/run_project_tests.py b/run_project_tests.py
index 86db599..50ce94f 100755
--- a/run_project_tests.py
+++ b/run_project_tests.py
@@ -63,7 +63,7 @@ class BuildStep(Enum):
validate = 6
-class TestResult:
+class TestResult(BaseException):
def __init__(self, cicmds):
self.msg = '' # empty msg indicates test success
self.stdo = ''
@@ -376,6 +376,8 @@ def run_test(test: TestDef, extra_args, compiler, backend, flags, commands, shou
with AutoDeletedDir(tempfile.mkdtemp(prefix='i ', dir=os.getcwd())) as install_dir:
try:
return _run_test(test, build_dir, install_dir, extra_args, compiler, backend, flags, commands, should_fail)
+ except TestResult as r:
+ return r
finally:
mlog.shutdown() # Close the log file because otherwise Windows wets itself.
@@ -417,29 +419,39 @@ def _run_test(test: TestDef, test_build_dir: str, install_dir: str, extra_args,
testresult.fail('Generating the build system failed.')
return testresult
builddata = build.load(test_build_dir)
- # Touch the meson.build file to force a regenerate so we can test that
- # regeneration works before a build is run.
- ensure_backend_detects_changes(backend)
- os.utime(str(test.path / 'meson.build'))
- # Build with subprocess
dir_args = get_backend_args_for_dir(backend, test_build_dir)
- build_start = time.time()
- pc, o, e = Popen_safe(compile_commands + dir_args, cwd=test_build_dir)
- testresult.add_step(BuildStep.build, o, e, '', time.time() - build_start)
- if should_fail == 'build':
+
+ # Build with subprocess
+ def build_step():
+ build_start = time.time()
+ pc, o, e = Popen_safe(compile_commands + dir_args, cwd=test_build_dir)
+ testresult.add_step(BuildStep.build, o, e, '', time.time() - build_start)
+ if should_fail == 'build':
+ if pc.returncode != 0:
+ raise testresult
+ testresult.fail('Test that should have failed to build succeeded.')
+ raise testresult
if pc.returncode != 0:
- return testresult
- testresult.fail('Test that should have failed to build succeeded.')
- return testresult
- if pc.returncode != 0:
- testresult.fail('Compiling source code failed.')
- return testresult
- # Touch the meson.build file to force a regenerate so we can test that
- # regeneration works after a build is complete.
- ensure_backend_detects_changes(backend)
- os.utime(str(test.path / 'meson.build'))
- test_start = time.time()
+ testresult.fail('Compiling source code failed.')
+ raise testresult
+
+ # Touch the meson.build file to force a regenerate
+ def force_regenerate():
+ ensure_backend_detects_changes(backend)
+ os.utime(str(test.path / 'meson.build'))
+
+ # just test building
+ build_step()
+
+ # test that regeneration works for build step
+ force_regenerate()
+ build_step() # TBD: assert nothing gets built after the regenerate?
+
+ # test that regeneration works for test step
+ force_regenerate()
+
# Test in-process
+ test_start = time.time()
(returncode, tstdo, tstde, test_log) = run_test_inprocess(test_build_dir)
testresult.add_step(BuildStep.test, tstdo, tstde, test_log, time.time() - test_start)
if should_fail == 'test':
@@ -450,6 +462,7 @@ def _run_test(test: TestDef, test_build_dir: str, install_dir: str, extra_args,
if returncode != 0:
testresult.fail('Running unit tests failed.')
return testresult
+
# Do installation, if the backend supports it
if install_commands:
env = os.environ.copy()