enhance test framework to read meson arguments from a file per test
A 'test_args.txt' file in the same directory as the test case will be parsed by the test framework and the content will be passed as arguments to meson during configuration. The arguments are put before any 'extra_args' to make them overwritable from the command line.
This commit is contained in:
parent
118e043143
commit
5482a23936
18
run_tests.py
18
run_tests.py
|
@ -17,11 +17,13 @@
|
|||
from glob import glob
|
||||
import os, subprocess, shutil, sys, signal
|
||||
from io import StringIO
|
||||
from ast import literal_eval
|
||||
import sys
|
||||
from mesonbuild import environment
|
||||
from mesonbuild import mesonlib
|
||||
from mesonbuild import mlog
|
||||
from mesonbuild import mesonmain
|
||||
from mesonbuild.mesonlib import stringlistify
|
||||
from mesonbuild.scripts import meson_test, meson_benchmark
|
||||
import argparse
|
||||
import xml.etree.ElementTree as ET
|
||||
|
@ -181,6 +183,19 @@ def run_test_inprocess(testdir):
|
|||
os.chdir(old_cwd)
|
||||
return (max(returncode_test, returncode_benchmark), mystdout.getvalue(), mystderr.getvalue())
|
||||
|
||||
def parse_test_args(testdir):
|
||||
args = []
|
||||
try:
|
||||
with open(os.path.join(testdir, 'test_args.txt'), 'r') as f:
|
||||
content = f.read()
|
||||
try:
|
||||
args = literal_eval(content)
|
||||
except Exception:
|
||||
raise Exception('Malformed test_args file.')
|
||||
args = stringlistify(args)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return args
|
||||
|
||||
def run_test(testdir, extra_args, should_succeed):
|
||||
global compile_commands
|
||||
|
@ -190,9 +205,10 @@ def run_test(testdir, extra_args, should_succeed):
|
|||
os.mkdir(test_build_dir)
|
||||
os.mkdir(install_dir)
|
||||
print('Running test: ' + testdir)
|
||||
test_args = parse_test_args(testdir)
|
||||
gen_start = time.time()
|
||||
gen_command = [meson_command, '--prefix', '/usr', '--libdir', 'lib', testdir, test_build_dir]\
|
||||
+ unity_flags + backend_flags + extra_args
|
||||
+ unity_flags + backend_flags + test_args + extra_args
|
||||
(returncode, stdo, stde) = run_configure_inprocess(gen_command)
|
||||
gen_time = time.time() - gen_start
|
||||
if not should_succeed:
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
project('options', 'c')
|
||||
|
||||
assert(get_option('testoption') == 'A string with spaces', 'Incorrect value for testoption option.')
|
||||
assert(get_option('other_one') == true, 'Incorrect value for other_one option.')
|
||||
assert(get_option('combo_opt') == 'one', 'Incorrect value for combo_opt option.')
|
|
@ -0,0 +1,3 @@
|
|||
option('testoption', type : 'string', value : 'optval', description : 'An option to do something')
|
||||
option('other_one', type : 'boolean', value : false)
|
||||
option('combo_opt', type : 'combo', choices : ['one', 'two', 'combo'], value : 'combo')
|
|
@ -0,0 +1,4 @@
|
|||
# This file is not read by meson itself, but by the test framework.
|
||||
# It is not possible to pass arguments to meson from a file.
|
||||
['--werror', '-D', 'testoption=A string with spaces', '-D', 'other_one=true', \
|
||||
'-D', 'combo_opt=one']
|
Loading…
Reference in New Issue