Exit non-zero when listing includes import failures.
[third_party/subunit] / python / subunit / tests / test_run.py
1 #
2 #  subunit: extensions to python unittest to get test results from subprocesses.
3 #  Copyright (C) 2011  Robert Collins <robertc@robertcollins.net>
4 #
5 #  Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
6 #  license at the users choice. A copy of both licenses are available in the
7 #  project source as Apache-2.0 and BSD. You may not use this file except in
8 #  compliance with one of these two licences.
9 #  
10 #  Unless required by applicable law or agreed to in writing, software
11 #  distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT
12 #  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
13 #  license you chose for the specific language governing permissions and
14 #  limitations under that license.
15 #
16
17 from testtools.compat import BytesIO
18 import unittest
19
20 from testtools import PlaceHolder, TestCase
21 from testtools.testresult.doubles import StreamResult
22
23 import subunit
24 from subunit import run
25 from subunit.run import SubunitTestRunner
26
27
28 class TestSubunitTestRunner(TestCase):
29
30     def test_includes_timing_output(self):
31         io = BytesIO()
32         runner = SubunitTestRunner(stream=io)
33         test = PlaceHolder('name')
34         runner.run(test)
35         io.seek(0)
36         eventstream = StreamResult()
37         subunit.ByteStreamToStreamResult(io).run(eventstream)
38         timestamps = [event[-1] for event in eventstream._events
39             if event is not None]
40         self.assertNotEqual([], timestamps)
41
42     def test_enumerates_tests_before_run(self):
43         io = BytesIO()
44         runner = SubunitTestRunner(stream=io)
45         test1 = PlaceHolder('name1')
46         test2 = PlaceHolder('name2')
47         case = unittest.TestSuite([test1, test2])
48         runner.run(case)
49         io.seek(0)
50         eventstream = StreamResult()
51         subunit.ByteStreamToStreamResult(io).run(eventstream)
52         self.assertEqual([
53             ('status', 'name1', 'exists'),
54             ('status', 'name2', 'exists'),
55             ], [event[:3] for event in eventstream._events[:2]])
56
57     def test_list_errors_if_errors_from_list_test(self):
58         io = BytesIO()
59         runner = SubunitTestRunner(stream=io)
60         def list_test(test):
61             return [], ['failed import']
62         self.patch(run, 'list_test', list_test)
63         exc = self.assertRaises(SystemExit, runner.list, None)
64         self.assertEqual((2,), exc.args)