return None
+class ImmediateFail(Exception):
+ """Raised to abort immediately."""
+
+ def __init__(self):
+ super(ImmediateFail, self).__init__("test failed and fail_immediately set")
+
+
class FilterOps(testtools.testresult.TestResult):
def control_msg(self, msg):
self.total_error+=1
self._ops.addError(test, details)
self.output = None
+ if self.fail_immediately:
+ raise ImmediateFail()
def addSkip(self, test, details=None):
test = self._add_prefix(test)
self.xfail_added+=1
self.total_xfail+=1
if details is not None:
- details = subunit.RemoteError(details[1].message + xfail_reason.decode("utf-8"))
+ details = subunit.RemoteError(unicode(details[1]) + xfail_reason.decode("utf-8"))
else:
details = subunit.RemoteError(xfail_reason.decode("utf-8"))
self._ops.addExpectedFailure(test, details)
self._ops.addFailure(test, details)
if self.output:
self._ops.output_msg(self.output)
+ if self.fail_immediately:
+ raise ImmediateFail()
self.output = None
def addSuccess(self, test, details=None):
self._ops.end_testsuite(name, result, reason)
- def __init__(self, out, prefix, expected_failures, strip_ok_output):
+ def __init__(self, out, prefix, expected_failures, strip_ok_output, fail_immediately=False):
self._ops = out
self.output = None
self.prefix = prefix
self.total_error = 0
self.total_fail = 0
self.error_added = 0
+ self.fail_immediately = fail_immediately
+