Add should_fail kwarg to test to indicate tests that should fail.

pull/75/head
Jussi Pakkanen 10 years ago
parent 85132e8948
commit d289887b1b
  1. 5
      backends.py
  2. 8
      interpreter.py
  3. 3
      meson_test.py
  4. 3
      test cases/common/75 should fail/failing.c
  5. 4
      test cases/common/75 should fail/meson.build

@ -87,7 +87,7 @@ def do_conf_file(src, dst, confdata):
class TestSerialisation:
def __init__(self, name, fname, is_cross, exe_wrapper, is_parallel, cmd_args, env,
valgrind_args):
should_fail, valgrind_args):
self.name = name
self.fname = fname
self.is_cross = is_cross
@ -95,6 +95,7 @@ class TestSerialisation:
self.is_parallel = is_parallel
self.cmd_args = cmd_args
self.env = env
self.should_fail = should_fail
self.valgrind_args = valgrind_args
# This class contains the basic functionality that is needed by all backends.
@ -315,7 +316,7 @@ class Backend():
else:
exe_wrapper = None
ts = TestSerialisation(t.get_name(), fname, is_cross, exe_wrapper,
t.is_parallel, t.cmd_args, t.env, t.valgrind_args)
t.is_parallel, t.cmd_args, t.env, t.should_fail, t.valgrind_args)
arr.append(ts)
pickle.dump(arr, datafile)

@ -429,13 +429,14 @@ class RunTargetHolder(InterpreterObject):
self.held_object = build.RunTarget(name, command, args, subdir)
class Test(InterpreterObject):
def __init__(self, name, exe, is_parallel, cmd_args, env, valgrind_args):
def __init__(self, name, exe, is_parallel, cmd_args, env, should_fail, valgrind_args):
InterpreterObject.__init__(self)
self.name = name
self.exe = exe
self.is_parallel = is_parallel
self.cmd_args = cmd_args
self.env = env
self.should_fail = should_fail
self.valgrind_args = valgrind_args
def get_exe(self):
@ -1310,7 +1311,10 @@ class Interpreter():
for a in valgrind_args:
if not isinstance(a, str):
raise InterpreterException('Valgrind_arg not a string.')
t = Test(args[0], args[1].held_object, par, cmd_args, env, valgrind_args)
should_fail = kwargs.get('should_fail', False)
if not isinstance(should_fail, bool):
raise InterpreterException('Keyword argument should_fail must be a boolean.')
t = Test(args[0], args[1].held_object, par, cmd_args, env, should_fail, valgrind_args)
self.build.tests.append(t)
mlog.debug('Adding test "', mlog.bold(args[0]), '".', sep='')

@ -99,7 +99,8 @@ def run_single_test(wrap, test):
duration = endtime - starttime
stdo = stdo.decode()
stde = stde.decode()
if p.returncode == 0:
if (not test.should_fail and p.returncode == 0) or \
(test.should_fail and p.returncode != 0):
res = 'OK'
else:
res = 'FAIL'

@ -0,0 +1,3 @@
int main(int argc, char **argv) {
return 1;
}

@ -0,0 +1,4 @@
project('should fail', 'c')
exe = executable('prog', 'failing.c')
test('failing', exe, should_fail : true)
Loading…
Cancel
Save