diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-11-15 08:10:29 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-11-15 08:10:29 +0000 |
commit | 2cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72 (patch) | |
tree | f741157a32e0632034fde4720390531cf5b520d7 /utils | |
parent | feb8018764da86105ab0b607e54401e627c8c82e (diff) | |
download | external_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
Diffstat (limited to 'utils')
-rw-r--r-- | utils/lit/LitFormats.py | 3 | ||||
-rw-r--r-- | utils/lit/TestFormats.py | 51 |
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 |