[lit][unit] avoid adding gtest binary more than once
Due to CMake mis-configurations, some gtest binaries may be added to the test list more than once. This patch makes lit avoid such cases and issues a warning when it happens.
This commit is contained in:
@@ -15,6 +15,7 @@ kIsWindows = sys.platform in ['win32', 'cygwin']
|
||||
|
||||
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'.
|
||||
@@ -54,6 +55,12 @@ class GoogleTest(TestFormat):
|
||||
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:
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
#!/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)
|
||||
@@ -0,0 +1,3 @@
|
||||
import lit.formats
|
||||
config.name = 'googletest-detect-duplicate'
|
||||
config.test_format = lit.formats.GoogleTest('DummySubDir', 'Test')
|
||||
10
llvm/utils/lit/tests/googletest-detect-duplicate.py
Normal file
10
llvm/utils/lit/tests/googletest-detect-duplicate.py
Normal file
@@ -0,0 +1,10 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user