Address github comments
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 784d68f..39f492d 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -323,19 +323,26 @@
if cpu_cost == 'capacity':
cpu_cost = multiprocessing.cpu_count()
if os.path.isfile(binary):
- test_prefix = None
- if 'gtest' in target and target['gtest']:
- test_prefix = 'gtest'
- elif 'benchmark' in target and target['benchmark']:
- test_prefix = 'benchmark'
+ list_test_command = None
+ filter_test_command = None
- if test_prefix:
+ # these are the flag defined by gtest and benchmark framework to list
+ # and filter test runs. We use them to split each individual test
+ # into its own JobSpec, and thus into its own process.
+ if 'gtest' in target and target['gtest']:
+ list_test_command = '--gtest_list_tests'
+ filter_test_command = '--gtest_filter=%s'
+ elif 'benchmark' in target and target['benchmark']:
+ list_test_command = '--benchmark_list_tests'
+ filter_test_command = '--benchmark_filter=%s'
+
+ if list_test_command:
# here we parse the output of --gtest_list_tests (or
# --benchmark_list_tests)to build up a complete list of
# the tests contained in a binary for each test, we then
# add a job to run, filtering for just that test.
with open(os.devnull, 'w') as fnull:
- tests = subprocess.check_output([binary, '--%s_list_tests' % test_prefix],
+ tests = subprocess.check_output([binary, list_test_command],
stderr=fnull)
base = None
for line in tests.split('\n'):
@@ -348,7 +355,7 @@
assert base is not None
assert line[1] == ' '
test = base + line.strip()
- cmdline = [binary, '--%s_filter=%s' % (test_prefix, test)] + target['args']
+ cmdline = [binary, filter_test_command % test] + target['args']
out.append(self.config.job_spec(cmdline,
shortname='%s %s' % (' '.join(cmdline), shortname_ext),
cpu_cost=cpu_cost,