1 # Copyright (c) 2009-2010 testtools developers. See LICENSE for details.
3 """Doubles of test result objects, useful for testing unittest code."""
12 from testtools
.tags
import TagContext
15 class LoggingBase(object):
16 """Basic support for logging of results."""
20 self
.shouldStop
= False
21 self
._was
_successful
= True
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
))
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."""
57 super(Python27TestResult
, self
).__init
__()
60 def addError(self
, test
, err
):
61 super(Python27TestResult
, self
).addError(test
, err
)
65 def addFailure(self
, test
, err
):
66 super(Python27TestResult
, self
).addFailure(test
, err
)
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
))
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."""
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):
111 self
._events
.append(('addSuccess', test
, details
))
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
))
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
)
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