diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2016-12-26 21:29:09 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2017-01-02 23:52:50 +0200 |
commit | 74f15263b6a9d7fe1f717235a7177e7e4a681d3d (patch) | |
tree | c7a5619a6996f44a01716202adab950b7076d95c | |
parent | ee8a6e6fc5b58b5756f4e01271e77399f2d973bb (diff) | |
download | meson-74f15263b6a9d7fe1f717235a7177e7e4a681d3d.zip meson-74f15263b6a9d7fe1f717235a7177e7e4a681d3d.tar.gz meson-74f15263b6a9d7fe1f717235a7177e7e4a681d3d.tar.bz2 |
Can set envvars in test setups.
-rw-r--r-- | mesonbuild/interpreter.py | 5 | ||||
-rwxr-xr-x | mesontest.py | 8 | ||||
-rwxr-xr-x | run_unittests.py | 13 | ||||
-rw-r--r-- | test cases/unit/2 testsetups/buggy.c | 3 | ||||
-rw-r--r-- | test cases/unit/2 testsetups/meson.build | 1 |
5 files changed, 27 insertions, 3 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index f561062..fb1ff20 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -30,6 +30,7 @@ from .interpreterbase import InterpreterException, InvalidArguments, InvalidCode from .interpreterbase import InterpreterObject, MutableInterpreterObject import os, sys, shutil, uuid +import re import importlib @@ -1207,7 +1208,7 @@ class Interpreter(InterpreterBase): 'add_project_arguments': self.func_add_project_arguments, 'add_global_link_arguments': self.func_add_global_link_arguments, 'add_project_link_arguments': self.func_add_project_link_arguments, - 'add_test_setup' : self.func_add_test_setup, + 'add_test_setup': self.func_add_test_setup, 'add_languages': self.func_add_languages, 'find_program': self.func_find_program, 'find_library': self.func_find_library, @@ -2146,6 +2147,8 @@ requirements use the version keyword argument instead.''') if len(args) != 1: raise InterpreterException('Add_test_setup needs one argument for the setup name.') setup_name = args[0] + if re.fullmatch('[_a-zA-Z][_0-9a-zA-Z]*', setup_name) is None: + raise InterpreterException('Setup name may only contain alphanumeric characters.') try: exe_wrapper = mesonlib.stringlistify(kwargs['exe_wrapper']) except KeyError: diff --git a/mesontest.py b/mesontest.py index 01ed056..6a8291c 100755 --- a/mesontest.py +++ b/mesontest.py @@ -208,6 +208,7 @@ class TestHarness: cmd = wrap + cmd + test.cmd_args starttime = time.time() child_env = os.environ.copy() + child_env.update(self.options.global_env.get_env(child_env)) if isinstance(test.env, build.EnvironmentVariables): test.env = test.env.get_env(child_env) @@ -477,6 +478,7 @@ def merge_suite_options(options): sys.exit('Conflict: both test setup and command line specify an exe wrapper.') if options.wrapper is None: options.wrapper = current.exe_wrapper + return current.env def run(args): options = parser.parse_args(args) @@ -484,7 +486,11 @@ def run(args): options.num_processes = 1 if options.setup is not None: - merge_suite_options(options) + global_env = merge_suite_options(options) + else: + global_env = build.EnvironmentVariables() + + setattr(options, 'global_env', global_env) if options.gdb: options.verbose = True diff --git a/run_unittests.py b/run_unittests.py index b7a393c..7326800 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -57,6 +57,7 @@ class LinuxlikeTests(unittest.TestCase): src_root = os.path.dirname(__file__) src_root = os.path.join(os.getcwd(), src_root) self.builddir = tempfile.mkdtemp() + self.logdir = os.path.join(self.builddir, 'meson-logs') self.prefix = '/usr' self.libdir = os.path.join(self.prefix, 'lib') self.installdir = os.path.join(self.builddir, 'install') @@ -392,12 +393,22 @@ class LinuxlikeTests(unittest.TestCase): self.assertListEqual(meson_exe_dat1, meson_exe_dat2) def test_testsetups(self): + if not shutil.which('valgrind'): + raise unittest.SkipTest('Valgrind not installed.') testdir = os.path.join(self.unit_test_dir, '2 testsetups') self.init(testdir) self.build() self.run_tests() + with open(os.path.join(self.logdir, 'testlog.txt')) as f: + basic_log = f.read() self.assertRaises(subprocess.CalledProcessError, - self._run, self.mtest_command + ['--setup=valgrind']) + self._run, self.mtest_command + ['--setup=valgrind']) + with open(os.path.join(self.logdir, 'testlog-valgrind.txt')) as f: + vg_log = f.read() + self.assertFalse('TEST_ENV is set' in basic_log) + self.assertFalse('Memcheck' in basic_log) + self.assertTrue('TEST_ENV is set' in vg_log) + self.assertTrue('Memcheck' in vg_log) class RewriterTests(unittest.TestCase): diff --git a/test cases/unit/2 testsetups/buggy.c b/test cases/unit/2 testsetups/buggy.c index 1aa56f9..5d20a24 100644 --- a/test cases/unit/2 testsetups/buggy.c +++ b/test cases/unit/2 testsetups/buggy.c @@ -7,5 +7,8 @@ int main(int argc, char **argv) { char *ten = malloc(10); do_nasty(ten); free(ten); + if(getenv("TEST_ENV")) { + printf("TEST_ENV is set.\n"); + } return 0; } diff --git a/test cases/unit/2 testsetups/meson.build b/test cases/unit/2 testsetups/meson.build index f2295f5..23682a7 100644 --- a/test cases/unit/2 testsetups/meson.build +++ b/test cases/unit/2 testsetups/meson.build @@ -2,6 +2,7 @@ project('testsetups', 'c') vg = find_program('valgrind', required : false) +# This is only set when running under Valgrind test setup. env = environment() env.set('TEST_ENV', '1') |