Can run tests under gdb.

pull/730/head
Jussi Pakkanen 8 years ago
parent 3f3c9c5329
commit a5a4c85eca
  1. 43
      mesontest.py

@ -31,6 +31,26 @@ parser.add_argument('--list', default=False, dest='list', action='store_true',
help='List available tests.') help='List available tests.')
parser.add_argument('tests', nargs='*') parser.add_argument('tests', nargs='*')
def gdbrun(test):
child_env = os.environ.copy()
child_env.update(test.env)
# On success will exit cleanly. On failure gdb will ask user
# if they really want to exit.
exe = test.fname
args = test.cmd_args
if len(args) > 0:
argset = ['-ex', 'set args ' + ' '.join(args)]
else:
argset = []
cmd = ['gdb', '--quiet'] + argset + ['-ex', 'run', '-ex', 'quit'] + exe
# FIXME a ton of stuff. run_single_test grabs stdout & co,
# which we do not want to do when running under gdb.
p = subprocess.Popen(cmd,
env=child_env,
cwd=test.workdir,
)
p.communicate()
def run(args): def run(args):
datafile = 'meson-private/meson_test_setup.dat' datafile = 'meson-private/meson_test_setup.dat'
options = parser.parse_args(args) options = parser.parse_args(args)
@ -48,22 +68,17 @@ def run(args):
return 0 return 0
for t in tests: for t in tests:
if t.name in options.tests: if t.name in options.tests:
if options.gdb:
# On success will exit cleanly. On failure gdb will ask user
# if they really want to exit.
wrap = ['gdb', '--quiet', '-ex', 'run', '-ex', 'quit']
# FIXME a ton of stuff. run_single_test grabs stdout & co,
# which we do not want to do when running under gdb.
for i in range(options.repeat): for i in range(options.repeat):
print('Running: %s %d/%d' % (t.name, i+1, options.repeat)) print('Running: %s %d/%d' % (t.name, i+1, options.repeat))
res = meson_test.run_single_test(wrap, t) if options.gdb:
if (res.returncode == 0 and res.should_fail) or \ gdbrun(t)
(res.returncode != 0 and not res.should_fail): else:
print(res.stdo) res = meson_test.run_single_test(wrap, t)
print(res.stde) if (res.returncode == 0 and res.should_fail) or \
print(res.returncode) (res.returncode != 0 and not res.should_fail):
print(res.should_fail) print(res.stdo)
raise RuntimeError('Test failed.') print(res.stde)
raise RuntimeError('Test failed.')
if __name__ == '__main__': if __name__ == '__main__':
sys.exit(run(sys.argv[1:])) sys.exit(run(sys.argv[1:]))

Loading…
Cancel
Save