Lit option for ignoring stderr output.
authorAndrew Trick <atrick@apple.com>
Tue, 30 Aug 2011 17:42:33 +0000 (17:42 +0000)
committerAndrew Trick <atrick@apple.com>
Tue, 30 Aug 2011 17:42:33 +0000 (17:42 +0000)
This is useful for testing a build a temporarily hand instrumented
build.
Patch by arrowdodger!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138804 91177308-0d34-0410-b5e6-96231b3b80d8

test/lit.cfg
utils/lit/lit/LitConfig.py
utils/lit/lit/TestFormats.py
utils/lit/lit/TestRunner.py
utils/lit/lit/main.py

index ef56473af5874ec7bd4ba98c9e6268bd2a8c8b84..af04337232828d02532faaade6590d638e6ff8e3 100644 (file)
@@ -12,6 +12,9 @@ config.name = 'LLVM'
 # testFormat: The test format to use to interpret tests.
 config.test_format = lit.formats.TclTest()
 
+# To ignore test output on stderr so it doesn't trigger failures uncomment this:
+#config.test_format = lit.formats.TclTest(ignoreStdErr=True)
+
 # suffixes: A list of file extensions to treat as test files, this is actually
 # set by on_clone().
 config.suffixes = []
index bda91744cce3c4657bc133d9a7d93c3d2cc3d0d0..2cc278111991edcbf71817072546f222505af395 100644 (file)
@@ -20,7 +20,7 @@ class LitConfig:
     def __init__(self, progname, path, quiet,
                  useValgrind, valgrindLeakCheck, valgrindArgs,
                  useTclAsSh,
-                 noExecute, debug, isWindows,
+                 noExecute, ignoreStdErr, debug, isWindows,
                  params):
         # The name of the test runner.
         self.progname = progname
@@ -32,6 +32,7 @@ class LitConfig:
         self.valgrindUserArgs = list(valgrindArgs)
         self.useTclAsSh = bool(useTclAsSh)
         self.noExecute = noExecute
+        self.ignoreStdErr = ignoreStdErr
         self.debug = debug
         self.isWindows = bool(isWindows)
         self.params = dict(params)
index 6dda2fdb608d428aa0957a0a2cbb995c42633c0b..d1c0558b5f37086f1201371f55ce9b15d9cf6171 100644 (file)
@@ -125,7 +125,11 @@ class ShTest(FileBasedTest):
                                         self.execute_external)
 
 class TclTest(FileBasedTest):
+    def __init__(self, ignoreStdErr=False):
+        self.ignoreStdErr = ignoreStdErr
+        
     def execute(self, test, litConfig):
+        litConfig.ignoreStdErr = self.ignoreStdErr
         return TestRunner.executeTclTest(test, litConfig)
 
 ###
index a40644cd187d5b483d128ec2a9f17ea27c11c049..0cc1f394d47e6a94394c990a12c00aa585887eb7 100644 (file)
@@ -535,13 +535,13 @@ def executeTclTest(test, litConfig):
     # considered to fail if there is any standard error output.
     out,err,exitCode = res
     if isXFail:
-        ok = exitCode != 0 or err
+        ok = exitCode != 0 or err and not litConfig.ignoreStdErr
         if ok:
             status = Test.XFAIL
         else:
             status = Test.XPASS
     else:
-        ok = exitCode == 0 and not err
+        ok = exitCode == 0 and (not err or litConfig.ignoreStdErr)
         if ok:
             status = Test.PASS
         else:
@@ -552,7 +552,7 @@ def executeTclTest(test, litConfig):
 
     # Set a flag for formatTestOutput so it can explain why the test was
     # considered to have failed, despite having an exit code of 0.
-    failDueToStderr = exitCode == 0 and err
+    failDueToStderr = exitCode == 0 and err and not litConfig.ignoreStdErr
 
     return formatTestOutput(status, out, err, exitCode, failDueToStderr, script)
 
index 13d263009dddc58807e4d469fbfac79f231c884a..e1a380c3fcbc3e155fd289190b15e53bb94f63d2 100755 (executable)
@@ -328,6 +328,7 @@ def load_test_suite(inputs):
                                     valgrindArgs = [],
                                     useTclAsSh = False,
                                     noExecute = False,
+                                    ignoreStdErr = False,
                                     debug = False,
                                     isWindows = (platform.system()=='Windows'),
                                     params = {})
@@ -485,6 +486,7 @@ def main(builtinParameters = {}):    # Bump the GIL check interval, its more imp
                                     valgrindArgs = opts.valgrindArgs,
                                     useTclAsSh = opts.useTclAsSh,
                                     noExecute = opts.noExecute,
+                                    ignoreStdErr = False,
                                     debug = opts.debug,
                                     isWindows = (platform.system()=='Windows'),
                                     params = userParams)