diff options
| -rw-r--r-- | llvm/utils/lit/lit/formats/__init__.py | 4 | ||||
| -rw-r--r-- | llvm/utils/lit/lit/formats/base.py | 114 | ||||
| -rw-r--r-- | llvm/utils/lit/lit/formats/googletest.py (renamed from llvm/utils/lit/lit/formats.py) | 117 | ||||
| -rw-r--r-- | llvm/utils/lit/lit/formats/shtest.py | 12 | 
4 files changed, 130 insertions, 117 deletions
diff --git a/llvm/utils/lit/lit/formats/__init__.py b/llvm/utils/lit/lit/formats/__init__.py new file mode 100644 index 00000000000..f4a303c4c5d --- /dev/null +++ b/llvm/utils/lit/lit/formats/__init__.py @@ -0,0 +1,4 @@ +from __future__ import absolute_import +from lit.formats.base import FileBasedTest, OneCommandPerFileTest +from lit.formats.googletest import GoogleTest +from lit.formats.shtest import ShTest diff --git a/llvm/utils/lit/lit/formats/base.py b/llvm/utils/lit/lit/formats/base.py new file mode 100644 index 00000000000..3c38041b111 --- /dev/null +++ b/llvm/utils/lit/lit/formats/base.py @@ -0,0 +1,114 @@ +from __future__ import absolute_import +import os +import sys + +import lit.Test +import lit.TestRunner +import lit.util + +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): +            # Ignore dot files and excluded tests. +            if (filename.startswith('.') or +                filename in localConfig.excludes): +                continue + +            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 lit.Test.Test(testSuite, path_in_suite + (filename,), +                                        localConfig) + +### + +import re +import tempfile + +class OneCommandPerFileTest: +    # FIXME: Refactor into generic test for running some command on a directory +    # of inputs. + +    def __init__(self, command, dir, recursive=False, +                 pattern=".*", useTempInput=False): +        if isinstance(command, str): +            self.command = [command] +        else: +            self.command = list(command) +        if dir is not None: +            dir = str(dir) +        self.dir = dir +        self.recursive = bool(recursive) +        self.pattern = re.compile(pattern) +        self.useTempInput = useTempInput + +    def getTestsInDirectory(self, testSuite, path_in_suite, +                            litConfig, localConfig): +        dir = self.dir +        if dir is None: +            dir = testSuite.getSourcePath(path_in_suite) + +        for dirname,subdirs,filenames in os.walk(dir): +            if not self.recursive: +                subdirs[:] = [] + +            subdirs[:] = [d for d in subdirs +                          if (d != '.svn' and +                              d not in localConfig.excludes)] + +            for filename in filenames: +                if (filename.startswith('.') or +                    not self.pattern.match(filename) or +                    filename in localConfig.excludes): +                    continue + +                path = os.path.join(dirname,filename) +                suffix = path[len(dir):] +                if suffix.startswith(os.sep): +                    suffix = suffix[1:] +                test = lit.Test.Test( +                    testSuite, path_in_suite + tuple(suffix.split(os.sep)), +                    localConfig) +                # FIXME: Hack? +                test.source_path = path +                yield test + +    def createTempInput(self, tmp, test): +        abstract + +    def execute(self, test, litConfig): +        if test.config.unsupported: +            return (lit.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) +        elif hasattr(test, 'source_path'): +            cmd.append(test.source_path) +        else: +            cmd.append(test.getSourcePath()) + +        out, err, exitCode = lit.TestRunner.executeCommand(cmd) + +        diags = out + err +        if not exitCode and not diags.strip(): +            return lit.Test.PASS,'' + +        # 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 lit.Test.FAIL, report diff --git a/llvm/utils/lit/lit/formats.py b/llvm/utils/lit/lit/formats/googletest.py index 7a93adf7c18..06b6a298638 100644 --- a/llvm/utils/lit/lit/formats.py +++ b/llvm/utils/lit/lit/formats/googletest.py @@ -111,120 +111,3 @@ class GoogleTest(object):              return lit.Test.PASS,''          return lit.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): -            # Ignore dot files and excluded tests. -            if (filename.startswith('.') or -                filename in localConfig.excludes): -                continue - -            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 lit.Test.Test(testSuite, path_in_suite + (filename,), -                                        localConfig) - -class ShTest(FileBasedTest): -    def __init__(self, execute_external = False): -        self.execute_external = execute_external - -    def execute(self, test, litConfig): -        return lit.TestRunner.executeShTest(test, litConfig, -                                            self.execute_external) - -### - -import re -import tempfile - -class OneCommandPerFileTest: -    # FIXME: Refactor into generic test for running some command on a directory -    # of inputs. - -    def __init__(self, command, dir, recursive=False, -                 pattern=".*", useTempInput=False): -        if isinstance(command, str): -            self.command = [command] -        else: -            self.command = list(command) -        if dir is not None: -            dir = str(dir) -        self.dir = dir -        self.recursive = bool(recursive) -        self.pattern = re.compile(pattern) -        self.useTempInput = useTempInput - -    def getTestsInDirectory(self, testSuite, path_in_suite, -                            litConfig, localConfig): -        dir = self.dir -        if dir is None: -            dir = testSuite.getSourcePath(path_in_suite) - -        for dirname,subdirs,filenames in os.walk(dir): -            if not self.recursive: -                subdirs[:] = [] - -            subdirs[:] = [d for d in subdirs -                          if (d != '.svn' and -                              d not in localConfig.excludes)] - -            for filename in filenames: -                if (filename.startswith('.') or -                    not self.pattern.match(filename) or -                    filename in localConfig.excludes): -                    continue - -                path = os.path.join(dirname,filename) -                suffix = path[len(dir):] -                if suffix.startswith(os.sep): -                    suffix = suffix[1:] -                test = lit.Test.Test( -                    testSuite, path_in_suite + tuple(suffix.split(os.sep)), -                    localConfig) -                # FIXME: Hack? -                test.source_path = path -                yield test - -    def createTempInput(self, tmp, test): -        abstract - -    def execute(self, test, litConfig): -        if test.config.unsupported: -            return (lit.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) -        elif hasattr(test, 'source_path'): -            cmd.append(test.source_path) -        else: -            cmd.append(test.getSourcePath()) - -        out, err, exitCode = lit.TestRunner.executeCommand(cmd) - -        diags = out + err -        if not exitCode and not diags.strip(): -            return lit.Test.PASS,'' - -        # 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 lit.Test.FAIL, report diff --git a/llvm/utils/lit/lit/formats/shtest.py b/llvm/utils/lit/lit/formats/shtest.py new file mode 100644 index 00000000000..30a6a3310b0 --- /dev/null +++ b/llvm/utils/lit/lit/formats/shtest.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import + +import lit.TestRunner +from .base import FileBasedTest + +class ShTest(FileBasedTest): +    def __init__(self, execute_external = False): +        self.execute_external = execute_external + +    def execute(self, test, litConfig): +        return lit.TestRunner.executeShTest(test, litConfig, +                                            self.execute_external)  | 

