s4:dsdb/drepl: update the source_dsa_obj/invocation_id in repsFrom
[Samba/gebeck_regimport.git] / lib / testtools / testtools / testresult / doubles.py
blob1865e931eec3712e1dfe81ed4ba9aa5288ecfa9d
1 # Copyright (c) 2009-2010 testtools developers. See LICENSE for details.
3 """Doubles of test result objects, useful for testing unittest code."""
5 __all__ = [
6 'Python26TestResult',
7 'Python27TestResult',
8 'ExtendedTestResult',
12 from testtools.tags import TagContext
15 class LoggingBase(object):
16 """Basic support for logging of results."""
18 def __init__(self):
19 self._events = []
20 self.shouldStop = False
21 self._was_successful = True
22 self.testsRun = 0
25 class Python26TestResult(LoggingBase):
26 """A precisely python 2.6 like test result, that logs."""
28 def addError(self, test, err):
29 self._was_successful = False
30 self._events.append(('addError', test, err))
32 def addFailure(self, test, err):
33 self._was_successful = False
34 self._events.append(('addFailure', test, err))
36 def addSuccess(self, test):
37 self._events.append(('addSuccess', test))
39 def startTest(self, test):
40 self._events.append(('startTest', test))
41 self.testsRun += 1
43 def stop(self):
44 self.shouldStop = True
46 def stopTest(self, test):
47 self._events.append(('stopTest', test))
49 def wasSuccessful(self):
50 return self._was_successful
53 class Python27TestResult(Python26TestResult):
54 """A precisely python 2.7 like test result, that logs."""
56 def __init__(self):
57 super(Python27TestResult, self).__init__()
58 self.failfast = False
60 def addError(self, test, err):
61 super(Python27TestResult, self).addError(test, err)
62 if self.failfast:
63 self.stop()
65 def addFailure(self, test, err):
66 super(Python27TestResult, self).addFailure(test, err)
67 if self.failfast:
68 self.stop()
70 def addExpectedFailure(self, test, err):
71 self._events.append(('addExpectedFailure', test, err))
73 def addSkip(self, test, reason):
74 self._events.append(('addSkip', test, reason))
76 def addUnexpectedSuccess(self, test):
77 self._events.append(('addUnexpectedSuccess', test))
78 if self.failfast:
79 self.stop()
81 def startTestRun(self):
82 self._events.append(('startTestRun',))
84 def stopTestRun(self):
85 self._events.append(('stopTestRun',))
88 class ExtendedTestResult(Python27TestResult):
89 """A test result like the proposed extended unittest result API."""
91 def __init__(self):
92 super(ExtendedTestResult, self).__init__()
93 self._tags = TagContext()
95 def addError(self, test, err=None, details=None):
96 self._was_successful = False
97 self._events.append(('addError', test, err or details))
99 def addFailure(self, test, err=None, details=None):
100 self._was_successful = False
101 self._events.append(('addFailure', test, err or details))
103 def addExpectedFailure(self, test, err=None, details=None):
104 self._events.append(('addExpectedFailure', test, err or details))
106 def addSkip(self, test, reason=None, details=None):
107 self._events.append(('addSkip', test, reason or details))
109 def addSuccess(self, test, details=None):
110 if details:
111 self._events.append(('addSuccess', test, details))
112 else:
113 self._events.append(('addSuccess', test))
115 def addUnexpectedSuccess(self, test, details=None):
116 self._was_successful = False
117 if details is not None:
118 self._events.append(('addUnexpectedSuccess', test, details))
119 else:
120 self._events.append(('addUnexpectedSuccess', test))
122 def progress(self, offset, whence):
123 self._events.append(('progress', offset, whence))
125 def startTestRun(self):
126 super(ExtendedTestResult, self).startTestRun()
127 self._was_successful = True
128 self._tags = TagContext()
130 def startTest(self, test):
131 super(ExtendedTestResult, self).startTest(test)
132 self._tags = TagContext(self._tags)
134 def stopTest(self, test):
135 self._tags = self._tags.parent
136 super(ExtendedTestResult, self).stopTest(test)
138 @property
139 def current_tags(self):
140 return self._tags.get_current_tags()
142 def tags(self, new_tags, gone_tags):
143 self._tags.change_tags(new_tags, gone_tags)
144 self._events.append(('tags', new_tags, gone_tags))
146 def time(self, time):
147 self._events.append(('time', time))
149 def wasSuccessful(self):
150 return self._was_successful