summaryrefslogtreecommitdiffstats
path: root/utils/lit/TestFormats.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/lit/TestFormats.py')
-rw-r--r--utils/lit/TestFormats.py67
1 files changed, 51 insertions, 16 deletions
diff --git a/utils/lit/TestFormats.py b/utils/lit/TestFormats.py
index 7e638b4..f067bae 100644
--- a/utils/lit/TestFormats.py
+++ b/utils/lit/TestFormats.py
@@ -53,8 +53,9 @@ class GoogleTest(object):
def execute(self, test, litConfig):
testPath,testName = os.path.split(test.getSourcePath())
- if not os.path.exists(testPath):
- # Handle GTest typed tests, whose name includes a '/'.
+ while not os.path.exists(testPath):
+ # Handle GTest parametrized and typed tests, whose name includes
+ # some '/'s.
testPath, namePrefix = os.path.split(testPath)
testName = os.path.join(namePrefix, testName)
@@ -81,14 +82,12 @@ class FileBasedTest(object):
localConfig)
class ShTest(FileBasedTest):
- def __init__(self, execute_external = False, require_and_and = False):
+ def __init__(self, execute_external = 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)
+ self.execute_external)
class TclTest(FileBasedTest):
def execute(self, test, litConfig):
@@ -99,16 +98,20 @@ class TclTest(FileBasedTest):
import re
import tempfile
-class SyntaxCheckTest:
+class OneCommandPerFileTest:
# FIXME: Refactor into generic test for running some command on a directory
# of inputs.
- def __init__(self, compiler, dir, recursive, pattern, extra_cxx_args=[]):
- self.compiler = str(compiler)
+ def __init__(self, command, dir, recursive=False,
+ pattern=".*", useTempInput=False):
+ if isinstance(command, str):
+ self.command = [command]
+ else:
+ self.command = list(command)
self.dir = str(dir)
self.recursive = bool(recursive)
self.pattern = re.compile(pattern)
- self.extra_cxx_args = list(extra_cxx_args)
+ self.useTempInput = useTempInput
def getTestsInDirectory(self, testSuite, path_in_suite,
litConfig, localConfig):
@@ -116,6 +119,9 @@ class SyntaxCheckTest:
if not self.recursive:
subdirs[:] = []
+ if dirname == '.svn' or dirname in localConfig.excludes:
+ continue
+
for filename in filenames:
if (not self.pattern.match(filename) or
filename in localConfig.excludes):
@@ -132,17 +138,46 @@ class SyntaxCheckTest:
test.source_path = path
yield test
+ def createTempInput(self, tmp, test):
+ abstract
+
def execute(self, test, litConfig):
- tmp = tempfile.NamedTemporaryFile(suffix='.cpp')
- print >>tmp, '#include "%s"' % test.source_path
- tmp.flush()
+ if test.config.unsupported:
+ return (Test.UNSUPPORTED, 'Test is unsupported')
+
+ cmd = list(self.command)
+
+ # If using temp input, create a temporary file and hand it to the
+ # subclass.
+ if self.useTempInput:
+ tmp = tempfile.NamedTemporaryFile(suffix='.cpp')
+ self.createTempInput(tmp, test)
+ tmp.flush()
+ cmd.append(tmp.name)
+ else:
+ cmd.append(test.source_path)
- cmd = [self.compiler, '-x', 'c++', '-fsyntax-only', tmp.name]
- cmd.extend(self.extra_cxx_args)
out, err, exitCode = TestRunner.executeCommand(cmd)
diags = out + err
if not exitCode and not diags.strip():
return Test.PASS,''
- return Test.FAIL, diags
+ # Try to include some useful information.
+ report = """Command: %s\n""" % ' '.join(["'%s'" % a
+ for a in cmd])
+ if self.useTempInput:
+ report += """Temporary File: %s\n""" % tmp.name
+ report += "--\n%s--\n""" % open(tmp.name).read()
+ report += """Output:\n--\n%s--""" % diags
+
+ return Test.FAIL, report
+
+class SyntaxCheckTest(OneCommandPerFileTest):
+ def __init__(self, compiler, dir, extra_cxx_args=[], *args, **kwargs):
+ cmd = [compiler, '-x', 'c++', '-fsyntax-only'] + extra_cxx_args
+ OneCommandPerFileTest.__init__(self, cmd, dir,
+ useTempInput=1, *args, **kwargs)
+
+ def createTempInput(self, tmp, test):
+ print >>tmp, '#include "%s"' % test.source_path
OpenPOWER on IntegriCloud