class GoogleTest(TestFormat):
def __init__(self, test_sub_dirs, test_suffix, run_under = []):
+ self.seen_executables = set()
self.test_sub_dirs = str(test_sub_dirs).split(';')
# On Windows, assume tests will also end in '.exe'.
suffixes=self.test_suffixes):
# Discover the tests in this executable.
execpath = os.path.join(source_path, subdir, fn)
+ if execpath in self.seen_executables:
+ litConfig.warning(
+ "Skip adding %r since it has been added to the test pool" % execpath)
+ continue
+ else:
+ self.seen_executables.add(execpath)
num_tests = self.get_num_tests(execpath, litConfig,
localConfig)
if num_tests is not None:
--- /dev/null
+#!/usr/bin/env python
+
+import os
+import sys
+
+if len(sys.argv) == 3 and sys.argv[1] == "--gtest_list_tests":
+ if sys.argv[2] != '--gtest_filter=-*DISABLED_*':
+ raise ValueError("unexpected argument: %s" % (sys.argv[2]))
+ print("""\
+FirstTest.
+ subTestA""")
+ sys.exit(0)
+elif len(sys.argv) != 1:
+ # sharding and json output are specified using environment variables
+ raise ValueError("unexpected argument: %r" % (' '.join(sys.argv[1:])))
+
+for e in ['GTEST_TOTAL_SHARDS', 'GTEST_SHARD_INDEX', 'GTEST_OUTPUT']:
+ if e not in os.environ:
+ raise ValueError("missing environment variables: " + e)
+
+if not os.environ['GTEST_OUTPUT'].startswith('json:'):
+ raise ValueError("must emit json output: " + os.environ['GTEST_OUTPUT'])
+
+output = """\
+{
+"random_seed": 123,
+"testsuites": [
+ {
+ "name": "FirstTest",
+ "testsuite": [
+ {
+ "name": "subTestA",
+ "result": "COMPLETED",
+ "time": "0.001s"
+ }
+ ]
+ }
+]
+}"""
+
+dummy_output = """\
+{
+"testsuites": [
+]
+}"""
+
+json_filename = os.environ['GTEST_OUTPUT'].split(':', 1)[1]
+with open(json_filename, 'w', encoding='utf-8') as f:
+ if os.environ['GTEST_SHARD_INDEX'] == '0':
+ f.write(output)
+ else:
+ f.write(dummy_output)
+ exit_code = 0
+
+sys.exit(exit_code)
--- /dev/null
+import lit.formats
+config.name = 'googletest-detect-duplicate'
+config.test_format = lit.formats.GoogleTest('DummySubDir', 'Test')
--- /dev/null
+# Check we don't add a GoogleTest binary more than once and issue a warning
+# when it happens.
+
+# RUN: %{lit} -v --order=random %{inputs}/googletest-detect-duplicate \
+# RUN: %{inputs}/googletest-detect-duplicate 2>&1 | FileCheck %s
+
+# CHECK: warning: Skip adding
+# CHECK: -- Testing:
+# CHECK: PASS: googletest-detect-duplicate :: [[PATH:[Dd]ummy[Ss]ub[Dd]ir/]][[FILE:OneTest\.py]]/0
+# CHECK: Passed{{ *}}: 1