aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Drummond <ldrumm@rtps.co>2021-02-18 19:54:55 +0000
committerJussi Pakkanen <jpakkane@gmail.com>2021-02-19 17:17:20 +0200
commit79f7328d6a010e56c28eb9442b61931cf13b04e6 (patch)
treefecb1b2de41b021851992f80f38d7dc9455fb694
parent90a7de3f2ba4b0510c2341346645eb7989376b62 (diff)
downloadmeson-79f7328d6a010e56c28eb9442b61931cf13b04e6.zip
meson-79f7328d6a010e56c28eb9442b61931cf13b04e6.tar.gz
meson-79f7328d6a010e56c28eb9442b61931cf13b04e6.tar.bz2
[TAP] Fix TAP parser when test exits with status
Some time between 0.56 and 0.57 the TAP parser broke when a test exits with a nonzero status. The TAP protocol does not specify this behaviour - giving latitude to implementers, and meson's previous behaviour was to report the exit status gracefully. This patch restores the old behaviour and adds a regression test
-rw-r--r--mesonbuild/mtest.py1
-rw-r--r--test cases/failing test/5 tap tests/meson.build4
-rw-r--r--test cases/failing test/5 tap tests/tester_with_status.c8
3 files changed, 12 insertions, 1 deletions
diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py
index 95ad77b..d5bcf94 100644
--- a/mesonbuild/mtest.py
+++ b/mesonbuild/mtest.py
@@ -1004,6 +1004,7 @@ class TestRunTAP(TestRun):
stdo: str, stde: str) -> None:
if returncode != 0 and not res.was_killed():
res = TestResult.ERROR
+ stde = stde or ''
stde += '\n(test program exited with status code {})'.format(returncode,)
super().complete(returncode, res, stdo, stde)
diff --git a/test cases/failing test/5 tap tests/meson.build b/test cases/failing test/5 tap tests/meson.build
index c49043b..664ac34 100644
--- a/test cases/failing test/5 tap tests/meson.build
+++ b/test cases/failing test/5 tap tests/meson.build
@@ -1,7 +1,9 @@
project('test features', 'c')
tester = executable('tester', 'tester.c')
-test('nonzero return code', tester, args : [], protocol: 'tap')
+test_with_status = executable('test-with-status', 'tester_with_status.c')
+test('nonzero return code no tests', tester, args : [], protocol: 'tap')
+test('nonzero return code with tests', test_with_status, protocol: 'tap')
test('missing test', tester, args : ['1..1'], protocol: 'tap')
test('incorrect skip', tester, args : ['1..1 # skip\nok 1'], protocol: 'tap')
test('partially skipped', tester, args : ['not ok 1\nok 2 # skip'], protocol: 'tap')
diff --git a/test cases/failing test/5 tap tests/tester_with_status.c b/test cases/failing test/5 tap tests/tester_with_status.c
new file mode 100644
index 0000000..7613afe
--- /dev/null
+++ b/test cases/failing test/5 tap tests/tester_with_status.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char **argv) {
+ puts("1..1");
+ puts("not ok 1 - some test");
+ return 2;
+}