aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-11-15 08:10:29 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-11-15 08:10:29 +0000
commit2cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72 (patch)
treef741157a32e0632034fde4720390531cf5b520d7
parentfeb8018764da86105ab0b607e54401e627c8c82e (diff)
downloadexternal_llvm-2cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72.zip
external_llvm-2cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72.tar.gz
external_llvm-2cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72.tar.bz2
lit: Factor a new OneCommandPerFileTest out of SyntaxCheckTest.
- Used for running a single fixed command on a directory of files, with the option of deriving a temporary input file from the test source. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88844 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--utils/lit/LitFormats.py3
-rw-r--r--utils/lit/TestFormats.py51
2 files changed, 42 insertions, 12 deletions
diff --git a/utils/lit/LitFormats.py b/utils/lit/LitFormats.py
index 9b8250d..270f087 100644
--- a/utils/lit/LitFormats.py
+++ b/utils/lit/LitFormats.py
@@ -1,2 +1,3 @@
-from TestFormats import GoogleTest, ShTest, TclTest, SyntaxCheckTest
+from TestFormats import GoogleTest, ShTest, TclTest
+from TestFormats import SyntaxCheckTest, OneCommandPerFileTest
diff --git a/utils/lit/TestFormats.py b/utils/lit/TestFormats.py
index e1e7ab2..cc40a30 100644
--- a/utils/lit/TestFormats.py
+++ b/utils/lit/TestFormats.py
@@ -97,17 +97,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):
@@ -134,20 +137,46 @@ class SyntaxCheckTest:
test.source_path = path
yield test
+ def createTempInput(self, tmp, test):
+ abstract
+
def execute(self, test, litConfig):
if test.config.unsupported:
return (Test.UNSUPPORTED, 'Test is unsupported')
- tmp = tempfile.NamedTemporaryFile(suffix='.cpp')
- print >>tmp, '#include "%s"' % test.source_path
- tmp.flush()
+ 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