From 2cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sun, 15 Nov 2009 08:10:29 +0000 Subject: 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 --- utils/lit/LitFormats.py | 3 ++- utils/lit/TestFormats.py | 51 +++++++++++++++++++++++++++++++++++++----------- 2 files changed, 42 insertions(+), 12 deletions(-) (limited to 'utils') diff --git a/utils/lit/LitFormats.py b/utils/lit/LitFormats.py index 9b8250d0aa..270f087070 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 e1e7ab2405..cc40a309dc 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 -- cgit v1.2.3