diff options
Diffstat (limited to 'python/subunit/tests/test_run.py')
| -rw-r--r-- | python/subunit/tests/test_run.py | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/python/subunit/tests/test_run.py b/python/subunit/tests/test_run.py index 6ac84e1..d92ed04 100644 --- a/python/subunit/tests/test_run.py +++ b/python/subunit/tests/test_run.py @@ -14,10 +14,12 @@ # limitations under that license. # -from testtools.compat import BytesIO +import io import unittest from testtools import PlaceHolder, TestCase +from testtools.compat import _b +from testtools.matchers import StartsWith from testtools.testresult.doubles import StreamResult import subunit @@ -28,37 +30,59 @@ from subunit.run import SubunitTestRunner class TestSubunitTestRunner(TestCase): def test_includes_timing_output(self): - io = BytesIO() - runner = SubunitTestRunner(stream=io) + bytestream = io.BytesIO() + runner = SubunitTestRunner(stream=bytestream) test = PlaceHolder('name') runner.run(test) - io.seek(0) + bytestream.seek(0) eventstream = StreamResult() - subunit.ByteStreamToStreamResult(io).run(eventstream) + subunit.ByteStreamToStreamResult(bytestream).run(eventstream) timestamps = [event[-1] for event in eventstream._events if event is not None] self.assertNotEqual([], timestamps) def test_enumerates_tests_before_run(self): - io = BytesIO() - runner = SubunitTestRunner(stream=io) + bytestream = io.BytesIO() + runner = SubunitTestRunner(stream=bytestream) test1 = PlaceHolder('name1') test2 = PlaceHolder('name2') case = unittest.TestSuite([test1, test2]) runner.run(case) - io.seek(0) + bytestream.seek(0) eventstream = StreamResult() - subunit.ByteStreamToStreamResult(io).run(eventstream) + subunit.ByteStreamToStreamResult(bytestream).run(eventstream) self.assertEqual([ ('status', 'name1', 'exists'), ('status', 'name2', 'exists'), ], [event[:3] for event in eventstream._events[:2]]) def test_list_errors_if_errors_from_list_test(self): - io = BytesIO() - runner = SubunitTestRunner(stream=io) + bytestream = io.BytesIO() + runner = SubunitTestRunner(stream=bytestream) def list_test(test): return [], ['failed import'] self.patch(run, 'list_test', list_test) exc = self.assertRaises(SystemExit, runner.list, None) self.assertEqual((2,), exc.args) + + class FailingTest(TestCase): + def test_fail(self): + 1/0 + + def test_exits_zero_when_tests_fail(self): + bytestream = io.BytesIO() + stream = io.TextIOWrapper(bytestream, encoding="utf8") + try: + self.assertEqual(None, run.main( + argv=["progName", "subunit.tests.test_run.TestSubunitTestRunner.FailingTest"], + stdout=stream)) + except SystemExit: + self.fail("SystemExit raised") + self.assertThat(bytestream.getvalue(), StartsWith(_b('\xb3'))) + + def test_exits_nonzero_when_execution_errors(self): + bytestream = io.BytesIO() + stream = io.TextIOWrapper(bytestream, encoding="utf8") + exc = self.assertRaises(Exception, run.main, + argv=["progName", "subunit.tests.test_run.TestSubunitTestRunner.MissingTest"], + stdout=stream) |
