aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/build.py4
-rw-r--r--mesonbuild/interpreter.py6
-rwxr-xr-xmesontest.py21
-rwxr-xr-xrun_unittests.py10
-rw-r--r--test cases/unit/2 testsetups/buggy.c4
-rw-r--r--test cases/unit/2 testsetups/meson.build4
6 files changed, 39 insertions, 10 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 91a3dd8..28456f7 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -229,6 +229,10 @@ class EnvironmentVariables:
def __init__(self):
self.envvars = []
+ def __repr__(self):
+ repr_str = "<{0}: {1}>"
+ return repr_str.format(self.__class__.__name__, self.envvars)
+
def get_value(self, name, values, kwargs):
separator = kwargs.get('separator', os.pathsep)
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 0d252fd..07b5c40 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -134,6 +134,10 @@ class EnvironmentVariablesHolder(MutableInterpreterObject):
'prepend': self.prepend_method,
})
+ def __repr__(self):
+ repr_str = "<{0}: {1}>"
+ return repr_str.format(self.__class__.__name__, self.held_object.envvars)
+
@stringArgs
def add_var(self, method, args, kwargs):
if not isinstance(kwargs.get("separator", ""), str):
@@ -2056,7 +2060,7 @@ requirements use the version keyword argument instead.''')
self.add_test(node, args, kwargs, True)
def unpack_env_kwarg(self, kwargs):
- envlist = kwargs.get('env', [])
+ envlist = kwargs.get('env', EnvironmentVariablesHolder())
if isinstance(envlist, EnvironmentVariablesHolder):
env = envlist.held_object
else:
diff --git a/mesontest.py b/mesontest.py
index 96f0315..980fbee 100755
--- a/mesontest.py
+++ b/mesontest.py
@@ -83,7 +83,7 @@ parser.add_argument('-v', '--verbose', default=False, action='store_true',
help='Do not redirect stdout and stderr')
parser.add_argument('-q', '--quiet', default=False, action='store_true',
help='Produce less output to the terminal.')
-parser.add_argument('-t', '--timeout-multiplier', type=float, default=1.0,
+parser.add_argument('-t', '--timeout-multiplier', type=float, default=None,
help='Define a multiplier for test timeout, for example '
' when running tests in particular conditions they might take'
' more time to execute.')
@@ -393,15 +393,18 @@ TIMEOUT: %4d
if not self.options.logbase or self.options.verbose:
return None, None, None, None
+ namebase = None
logfile_base = os.path.join(self.options.wd, 'meson-logs', self.options.logbase)
- if self.options.wrapper is None:
- logfilename = logfile_base + '.txt'
- jsonlogfilename = logfile_base + '.json'
- else:
+ if self.options.wrapper:
namebase = os.path.split(self.get_wrapper()[0])[1]
- logfilename = logfile_base + '-' + namebase.replace(' ', '_') + '.txt'
- jsonlogfilename = logfile_base + '-' + namebase.replace(' ', '_') + '.json'
+ elif self.options.setup:
+ namebase = self.options.setup
+
+ if namebase:
+ logfile_base += '-' + namebase.replace(' ', '_')
+ logfilename = logfile_base + '.txt'
+ jsonlogfilename = logfile_base + '.json'
jsonlogfile = open(jsonlogfilename, 'w')
logfile = open(logfilename, 'w')
@@ -497,6 +500,8 @@ TIMEOUT: %4d
if os.path.isfile('build.ninja'):
subprocess.check_call([environment.detect_ninja(), 'all'])
tests = self.get_tests()
+ if not tests:
+ return 0
self.run_tests(tests)
return self.fail_count
@@ -555,6 +560,8 @@ def run(args):
global_env = merge_suite_options(options)
else:
global_env = build.EnvironmentVariables()
+ if options.timeout_multiplier is None:
+ options.timeout_multiplier = 1
setattr(options, 'global_env', global_env)
diff --git a/run_unittests.py b/run_unittests.py
index 8c8844d..16ff354 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -602,9 +602,11 @@ class AllPlatformTests(BasePlatformTests):
testdir = os.path.join(self.unit_test_dir, '2 testsetups')
self.init(testdir)
self.build()
+ # Run tests without setup
self.run_tests()
with open(os.path.join(self.logdir, 'testlog.txt')) as f:
basic_log = f.read()
+ # Run buggy test with setup that has env that will make it fail
self.assertRaises(subprocess.CalledProcessError,
self._run, self.mtest_command + ['--setup=valgrind'])
with open(os.path.join(self.logdir, 'testlog-valgrind.txt')) as f:
@@ -613,6 +615,14 @@ class AllPlatformTests(BasePlatformTests):
self.assertFalse('Memcheck' in basic_log)
self.assertTrue('TEST_ENV is set' in vg_log)
self.assertTrue('Memcheck' in vg_log)
+ # Run buggy test with setup without env that will pass
+ self._run(self.mtest_command + ['--setup=wrapper'])
+ # Setup with no properties works
+ self._run(self.mtest_command + ['--setup=empty'])
+ # Setup with only env works
+ self._run(self.mtest_command + ['--setup=onlyenv'])
+ # Setup with only a timeout works
+ self._run(self.mtest_command + ['--setup=timeout'])
def assertFailedTestCount(self, failure_count, command):
try:
diff --git a/test cases/unit/2 testsetups/buggy.c b/test cases/unit/2 testsetups/buggy.c
index 5d20a24..d238830 100644
--- a/test cases/unit/2 testsetups/buggy.c
+++ b/test cases/unit/2 testsetups/buggy.c
@@ -5,10 +5,10 @@
int main(int argc, char **argv) {
char *ten = malloc(10);
- do_nasty(ten);
- free(ten);
if(getenv("TEST_ENV")) {
+ do_nasty(ten);
printf("TEST_ENV is set.\n");
}
+ free(ten);
return 0;
}
diff --git a/test cases/unit/2 testsetups/meson.build b/test cases/unit/2 testsetups/meson.build
index a65548e..488cf21 100644
--- a/test cases/unit/2 testsetups/meson.build
+++ b/test cases/unit/2 testsetups/meson.build
@@ -14,3 +14,7 @@ add_test_setup('valgrind',
buggy = executable('buggy', 'buggy.c', 'impl.c')
test('Test buggy', buggy)
+add_test_setup('empty')
+add_test_setup('onlyenv', env : env)
+add_test_setup('wrapper', exe_wrapper : [vg, '--error-exitcode=1'])
+add_test_setup('timeout', timeout_multiplier : 20)