42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
import sys
|
|
from contextlib import contextmanager
|
|
from unittest.case import _ShouldStop, SkipTest
|
|
|
|
|
|
class _Outcome(object):
|
|
def __init__(self, result=None):
|
|
self.expecting_failure = False
|
|
self.result = result
|
|
self.result_supports_subtests = hasattr(result, "addSubTest")
|
|
self.success = True
|
|
self.skipped = []
|
|
self.expectedFailure = None
|
|
self.errors = []
|
|
|
|
@contextmanager
|
|
def testPartExecutor(self, test_case, isTest=False):
|
|
old_success = self.success
|
|
self.success = True
|
|
try:
|
|
yield
|
|
except KeyboardInterrupt:
|
|
raise
|
|
except SkipTest as e:
|
|
self.success = False
|
|
self.skipped.append((test_case, str(e)))
|
|
except _ShouldStop:
|
|
pass
|
|
except Exception:
|
|
exc_info = sys.exc_info()
|
|
if self.expecting_failure:
|
|
self.expectedFailure = exc_info
|
|
else:
|
|
self.success = False
|
|
self.errors.append((test_case, exc_info))
|
|
exc_info = None
|
|
else:
|
|
if self.result_supports_subtests and self.success:
|
|
self.errors.append((test_case, None))
|
|
finally:
|
|
self.success = self.success and old_success
|