From dcc8fc9e985f16a6df878ec0ff7212e0a2da0c8f Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Thu, 20 Dec 2018 20:44:23 +0000 Subject: [PATCH] [dotest] Consider unexpected passes as failures. Unexpected successes should be considered failures because they can hide regressions when not addressed. When a test is fixed and not re-enabled, it can easily regress without us noticing. I couldn't find a good way to make this change other than changing it in the unittest2 framework. I know this is less than optimal but since we have the dependency checked in and the change is pretty fundamental to the framework I think it's not unreasonable. Differential revision: https://reviews.llvm.org/D55835 llvm-svn: 349818 --- lldb/lit/Suite/lldbtest.py | 9 ++++----- .../Python/module/unittest2/unittest2/result.py | 4 +++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lldb/lit/Suite/lldbtest.py b/lldb/lit/Suite/lldbtest.py index 16b0b2ed7e15..12591f3ba505 100644 --- a/lldb/lit/Suite/lldbtest.py +++ b/lldb/lit/Suite/lldbtest.py @@ -94,11 +94,10 @@ class LLDBTest(TestFormat): litConfig.maxIndividualTestTime)) if exitCode: - return lit.Test.FAIL, out + err - - unexpected_test_line = 'XPASS' - if unexpected_test_line in out or unexpected_test_line in err: - return lit.Test.XPASS, '' + if 'FAIL:' in out or 'FAIL:' in err: + return lit.Test.FAIL, out + err + if 'XPASS:' in out or 'XPASS:' in err: + return lit.Test.XPASS, out + err passing_test_line = 'RESULT: PASSED' if passing_test_line not in out and passing_test_line not in err: diff --git a/lldb/third_party/Python/module/unittest2/unittest2/result.py b/lldb/third_party/Python/module/unittest2/unittest2/result.py index 9d76429fb4ad..8f89816b772f 100644 --- a/lldb/third_party/Python/module/unittest2/unittest2/result.py +++ b/lldb/third_party/Python/module/unittest2/unittest2/result.py @@ -148,7 +148,9 @@ class TestResult(unittest.TestResult): def wasSuccessful(self): "Tells whether or not this result was a success" - return (len(self.failures) + len(self.errors) == 0) + return (len(self.failures) + + len(self.errors) + + len(self.unexpectedSuccesses) == 0) def stop(self): "Indicates that the tests should be aborted"