22
25
from testtools.content import Content, ContentType
23
26
from testtools.matchers import DocTestMatches
27
from testtools.utils import _u, _b
24
28
from testtools.tests.helpers import (
26
30
Python26TestResult,
27
31
Python27TestResult,
28
32
ExtendedTestResult,
35
40
def test_addExpectedFailure(self):
36
41
# Calling addExpectedFailure(test, exc_info) completes ok.
37
42
result = self.makeResult()
38
result.addExpectedFailure(self, sys.exc_info())
43
result.addExpectedFailure(self, an_exc_info)
40
45
def test_addExpectedFailure_details(self):
41
46
# Calling addExpectedFailure(test, details=xxx) completes ok.
55
60
def test_addSkipped(self):
56
61
# Calling addSkip(test, reason) completes ok.
57
62
result = self.makeResult()
58
result.addSkip(self, u"Skipped for some reason")
63
result.addSkip(self, _u("Skipped for some reason"))
60
65
def test_addSkipped_details(self):
61
66
# Calling addSkip(test, reason) completes ok.
121
126
# Calling addSkip on a TestResult records the test that was skipped in
122
127
# its skip_reasons dict.
123
128
result = self.makeResult()
124
result.addSkip(self, u"Skipped for some reason")
125
self.assertEqual({u"Skipped for some reason":[self]},
127
result.addSkip(self, u"Skipped for some reason")
128
self.assertEqual({u"Skipped for some reason":[self, self]},
130
result.addSkip(self, u"Skipped for another reason")
131
self.assertEqual({u"Skipped for some reason":[self, self],
132
u"Skipped for another reason":[self]},
129
result.addSkip(self, _u("Skipped for some reason"))
130
self.assertEqual({_u("Skipped for some reason"):[self]},
132
result.addSkip(self, _u("Skipped for some reason"))
133
self.assertEqual({_u("Skipped for some reason"):[self, self]},
135
result.addSkip(self, _u("Skipped for another reason"))
136
self.assertEqual({_u("Skipped for some reason"):[self, self],
137
_u("Skipped for another reason"):[self]},
133
138
result.skip_reasons)
135
140
def test_now_datetime_now(self):
136
141
result = self.makeResult()
137
olddatetime = testresult.datetime
142
olddatetime = testresult.real.datetime
139
testresult.datetime = olddatetime
144
testresult.real.datetime = olddatetime
140
145
self.addCleanup(restore)
143
148
now = datetime.datetime.now()
144
149
stubdatetime = Module()
145
150
stubdatetime.datetime = Module()
146
stubdatetime.datetime.now = lambda:now
147
testresult.datetime = stubdatetime
151
stubdatetime.datetime.now = lambda: now
152
testresult.real.datetime = stubdatetime
148
153
self.assertEqual(now, result._now())
149
154
# Set an explicit datetime, then go back to looking it up.
150
155
result.time(datetime.datetime.now())
202
207
def test_addSkipped(self):
203
208
# Calling `addSkip` on a `MultiTestResult` calls addSkip on its
205
reason = u"Skipped for some reason"
210
reason = _u("Skipped for some reason")
206
211
self.multiResult.addSkip(self, reason)
207
212
self.assertResultLogsEqual([('addSkip', self, reason)])
278
283
self.assertEqual("fp", result.stream)
280
285
def reset_output(self):
281
self.result.stream.reset()
282
self.result.stream.truncate()
286
self.result.stream = StringIO()
284
288
def test_startTestRun(self):
285
289
self.result.startTestRun()
292
296
self.result.stopTest(test)
293
297
self.result.startTest(test)
294
298
self.result.stopTest(test)
295
self.result.stream.reset()
296
self.result.stream.truncate()
299
self.result.stream = StringIO()
297
300
self.result.stopTestRun()
298
301
self.assertThat(self.getvalue(),
299
302
DocTestMatches("Ran 2 tests in ...s\n...", doctest.ELLIPSIS))
364
367
Text attachment: traceback
366
369
Traceback (most recent call last):
367
File "...testtools/testcase.py", line ..., in run
370
File "...testtools/runtest.py", line ..., in _run_user...
372
File "...testtools/testcase.py", line ..., in _run_test_method
369
374
File "...testtools/tests/test_testresult.py", line ..., in error
371
ZeroDivisionError: integer division or modulo by zero
376
ZeroDivisionError: int... division or modulo by zero
373
378
======================================================================
374
379
FAIL: testtools.tests.test_testresult.Test.failed
376
381
Text attachment: traceback
378
383
Traceback (most recent call last):
379
File "...testtools/testcase.py", line ..., in run
384
File "...testtools/runtest.py", line ..., in _run_user...
386
File "...testtools/testcase.py", line ..., in _run_test_method
381
388
File "...testtools/tests/test_testresult.py", line ..., in failed
422
429
self.result1.addError(self, exc_info1)
423
430
exc_info2 = self.makeExceptionInfo(AssertionError, 'failure')
424
431
self.result1.addFailure(self, exc_info2)
425
reason = u"Skipped for some reason"
432
reason = _u("Skipped for some reason")
426
433
self.result1.addSkip(self, reason)
427
434
self.result1.addSuccess(self)
428
435
self.assertEqual([('startTest', self),
468
475
def get_details_and_string(self):
469
476
"""Get a details dict and expected string."""
470
text1 = lambda:["1\n2\n"]
471
text2 = lambda:["3\n4\n"]
472
bin1 = lambda:["5\n"]
477
text1 = lambda: [_b("1\n2\n")]
478
text2 = lambda: [_b("3\n4\n")]
479
bin1 = lambda: [_b("5\n")]
473
480
details = {'text 1': Content(ContentType('text', 'plain'), text1),
474
481
'text 2': Content(ContentType('text', 'strange'), text2),
475
482
'bin 1': Content(ContentType('application', 'binary'), bin1)}
777
784
outcome = 'addUnexpectedSuccess'
787
class TestExtendedToOriginalResultOtherAttributes(
788
TestExtendedToOriginalResultDecoratorBase):
790
def test_other_attribute(self):
791
class OtherExtendedResult:
795
self.result = OtherExtendedResult()
796
self.make_converter()
797
self.assertEqual(1, self.converter.bar)
798
self.assertEqual(2, self.converter.foo())
780
801
def test_suite():
781
802
from unittest import TestLoader
782
803
return TestLoader().loadTestsFromName(__name__)