mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 04:39:44 +00:00
lit: Give test formats control over test discovery.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81751 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
af7263d51e
commit
00a42449ec
@ -1,2 +1,2 @@
|
||||
from ShTest import ShTest
|
||||
from TclTest import TclTest
|
||||
from TestFormats import GoogleTest, ShTest, TclTest
|
||||
|
||||
|
@ -1,12 +0,0 @@
|
||||
import TestRunner
|
||||
|
||||
class ShTest:
|
||||
def __init__(self, execute_external = False, require_and_and = False):
|
||||
self.execute_external = execute_external
|
||||
self.require_and_and = require_and_and
|
||||
|
||||
def execute(self, test, litConfig):
|
||||
return TestRunner.executeShTest(test, litConfig,
|
||||
self.execute_external,
|
||||
self.require_and_and)
|
||||
|
@ -1,7 +0,0 @@
|
||||
import TestRunner
|
||||
|
||||
class TclTest:
|
||||
def execute(self, test, litConfig):
|
||||
return TestRunner.executeTclTest(test, litConfig)
|
||||
|
||||
|
91
utils/lit/TestFormats.py
Normal file
91
utils/lit/TestFormats.py
Normal file
@ -0,0 +1,91 @@
|
||||
import os
|
||||
|
||||
import Test
|
||||
import TestRunner
|
||||
import Util
|
||||
|
||||
class GoogleTest(object):
|
||||
def __init__(self, test_sub_dir, test_suffix):
|
||||
self.test_sub_dir = str(test_sub_dir)
|
||||
self.test_suffix = str(test_suffix)
|
||||
|
||||
def getGTestTests(self, path):
|
||||
"""getGTestTests(path) - [name]
|
||||
|
||||
Return the tests available in gtest executable."""
|
||||
|
||||
lines = Util.capture([path, '--gtest_list_tests']).split('\n')
|
||||
nested_tests = []
|
||||
for ln in lines:
|
||||
if not ln.strip():
|
||||
continue
|
||||
|
||||
prefix = ''
|
||||
index = 0
|
||||
while ln[index*2:index*2+2] == ' ':
|
||||
index += 1
|
||||
while len(nested_tests) > index:
|
||||
nested_tests.pop()
|
||||
|
||||
ln = ln[index*2:]
|
||||
if ln.endswith('.'):
|
||||
nested_tests.append(ln)
|
||||
else:
|
||||
yield ''.join(nested_tests) + ln
|
||||
|
||||
def getTestsInDirectory(self, testSuite, path_in_suite,
|
||||
litConfig, localConfig):
|
||||
source_path = testSuite.getSourcePath(path_in_suite)
|
||||
for filename in os.listdir(source_path):
|
||||
# Check for the one subdirectory (build directory) tests will be in.
|
||||
if filename != self.test_sub_dir:
|
||||
continue
|
||||
|
||||
filepath = os.path.join(source_path, filename)
|
||||
for subfilename in os.listdir(filepath):
|
||||
if subfilename.endswith(self.test_suffix):
|
||||
execpath = os.path.join(filepath, subfilename)
|
||||
|
||||
# Discover the tests in this executable.
|
||||
for name in self.getGTestTests(execpath):
|
||||
testPath = path_in_suite + (filename, subfilename, name)
|
||||
yield Test.Test(testSuite, testPath, localConfig)
|
||||
|
||||
def execute(self, test, litConfig):
|
||||
testPath,testName = os.path.split(test.getSourcePath())
|
||||
|
||||
cmd = [testPath, '--gtest_filter=' + testName]
|
||||
out, err, exitCode = TestRunner.executeCommand(cmd)
|
||||
|
||||
if not exitCode:
|
||||
return Test.PASS,''
|
||||
|
||||
return Test.FAIL, out + err
|
||||
|
||||
###
|
||||
|
||||
class FileBasedTest(object):
|
||||
def getTestsInDirectory(self, testSuite, path_in_suite,
|
||||
litConfig, localConfig):
|
||||
source_path = testSuite.getSourcePath(path_in_suite)
|
||||
for filename in os.listdir(source_path):
|
||||
filepath = os.path.join(source_path, filename)
|
||||
if not os.path.isdir(filepath):
|
||||
base,ext = os.path.splitext(filename)
|
||||
if ext in localConfig.suffixes:
|
||||
yield Test.Test(testSuite, path_in_suite + (filename,),
|
||||
localConfig)
|
||||
|
||||
class ShTest(FileBasedTest):
|
||||
def __init__(self, execute_external = False, require_and_and = False):
|
||||
self.execute_external = execute_external
|
||||
self.require_and_and = require_and_and
|
||||
|
||||
def execute(self, test, litConfig):
|
||||
return TestRunner.executeShTest(test, litConfig,
|
||||
self.execute_external,
|
||||
self.require_and_and)
|
||||
|
||||
class TclTest(FileBasedTest):
|
||||
def execute(self, test, litConfig):
|
||||
return TestRunner.executeTclTest(test, litConfig)
|
@ -252,6 +252,13 @@ def getTestsInSuite(ts, path_in_suite, litConfig,
|
||||
# Otherwise we have a directory to search for tests, start by getting the
|
||||
# local configuration.
|
||||
lc = getLocalConfig(ts, path_in_suite, litConfig, localConfigCache)
|
||||
|
||||
# Search for tests.
|
||||
for res in lc.test_format.getTestsInDirectory(ts, path_in_suite,
|
||||
litConfig, lc):
|
||||
yield res
|
||||
|
||||
# Search subdirectories.
|
||||
for filename in os.listdir(source_path):
|
||||
# FIXME: This doesn't belong here?
|
||||
if filename == 'Output' or filename in lc.excludes:
|
||||
@ -270,11 +277,6 @@ def getTestsInSuite(ts, path_in_suite, litConfig,
|
||||
litConfig, testSuiteCache,
|
||||
localConfigCache):
|
||||
yield res
|
||||
else:
|
||||
# Otherwise add tests for matching suffixes.
|
||||
base,ext = os.path.splitext(filename)
|
||||
if ext in lc.suffixes:
|
||||
yield Test.Test(ts, path_in_suite + (filename,), lc)
|
||||
|
||||
def runTests(numThreads, litConfig, provider, display):
|
||||
# If only using one testing thread, don't use threads at all; this lets us
|
||||
|
Loading…
Reference in New Issue
Block a user