aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2017-11-29 14:58:08 -0800
committerJussi Pakkanen <jpakkane@gmail.com>2017-11-30 22:19:54 +0200
commitd573a29bdaf64026e00b5c169f58c54d004e5244 (patch)
tree530c3d3883ae8b02767f6c0bfe609db9f3549f8d
parentcabbb30ab457e30084c8e125fe394c1801048b67 (diff)
downloadmeson-d573a29bdaf64026e00b5c169f58c54d004e5244.zip
meson-d573a29bdaf64026e00b5c169f58c54d004e5244.tar.gz
meson-d573a29bdaf64026e00b5c169f58c54d004e5244.tar.bz2
mtest: Chdir into the build directory before running tests with -C
When `ninja -C builddir/ test` is run, ninja will change into the build dir before starting, but `meson test -C builddir/` does not. This is important because meson does not use (for good reasons) absolute paths, which means if a test case needs to be passed as an argument a file name that is part of the build process, it will be relative builddir. Without changing into the builddir the path will not exist (or worse, point at the wrong thing), and test will not behave as intended. To fix this mtest will change directory before starting tests, and will change back after all tests have been finished. Fixes #2710
-rw-r--r--mesonbuild/mtest.py54
1 files changed, 30 insertions, 24 deletions
diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py
index 30322aa..b39f5af 100644
--- a/mesonbuild/mtest.py
+++ b/mesonbuild/mtest.py
@@ -482,35 +482,41 @@ TIMEOUT: %4d
numlen = len('%d' % len(tests))
self.open_log_files()
wrap = self.get_wrapper()
+ startdir = os.getcwd()
+ if self.options.wd:
+ os.chdir(self.options.wd)
- for _ in range(self.options.repeat):
- for i, test in enumerate(tests):
- visible_name = self.get_pretty_suite(test)
-
- if self.options.gdb:
- test.timeout = None
-
- if not test.is_parallel or self.options.gdb:
- self.drain_futures(futures)
- futures = []
- res = self.run_single_test(wrap, test)
- self.print_stats(numlen, tests, visible_name, res, i)
- else:
- if not executor:
- executor = conc.ThreadPoolExecutor(max_workers=self.options.num_processes)
- f = executor.submit(self.run_single_test, wrap, test)
- futures.append((f, numlen, tests, visible_name, i))
+ try:
+ for _ in range(self.options.repeat):
+ for i, test in enumerate(tests):
+ visible_name = self.get_pretty_suite(test)
+
+ if self.options.gdb:
+ test.timeout = None
+
+ if not test.is_parallel or self.options.gdb:
+ self.drain_futures(futures)
+ futures = []
+ res = self.run_single_test(wrap, test)
+ self.print_stats(numlen, tests, visible_name, res, i)
+ else:
+ if not executor:
+ executor = conc.ThreadPoolExecutor(max_workers=self.options.num_processes)
+ f = executor.submit(self.run_single_test, wrap, test)
+ futures.append((f, numlen, tests, visible_name, i))
+ if self.options.repeat > 1 and self.fail_count:
+ break
if self.options.repeat > 1 and self.fail_count:
break
- if self.options.repeat > 1 and self.fail_count:
- break
- self.drain_futures(futures)
- self.print_summary()
- self.print_collected_logs()
+ self.drain_futures(futures)
+ self.print_summary()
+ self.print_collected_logs()
- if self.logfilename:
- print('Full log written to %s' % self.logfilename)
+ if self.logfilename:
+ print('Full log written to %s' % self.logfilename)
+ finally:
+ os.chdir(startdir)
def drain_futures(self, futures):
for i in futures: