From eb1f9f664dd96e7fb93a359d1bec99b92fd0ec1f Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Tue, 18 Nov 2014 21:57:57 +1300 Subject: Improve showing of import errors in the Python runner. This depends on testtools 1.4.0 to get the improved behaviour. --- NEWS | 6 ++++++ python/subunit/run.py | 6 +++++- python/subunit/tests/test_run.py | 12 ++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 60028d9..ed281ac 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,12 @@ BUGFIXES * Tests have been fixed with testtools 1.2.0 and above. (Robert Collins) +IMPROVEMENTS +~~~~~~~~~~~~ + +* With testtools 1.4.0 and above import errors are now + shown in detail by ``subunit.run``. (Robert Collins) + 0.0.21 ------ diff --git a/python/subunit/run.py b/python/subunit/run.py index cf9cc01..5bf1db2 100755 --- a/python/subunit/run.py +++ b/python/subunit/run.py @@ -70,9 +70,13 @@ class SubunitTestRunner(object): result.stopTestRun() return result - def list(self, test): + def list(self, test, loader=None): "List the test." result, errors = self._list(test) + if loader is not None: + # We were called with the updated API by testtools.run, so look for + # errors on the loader, not the test list result. + errors = loader.errors if errors: failed_descr = '\n'.join(errors).encode('utf8') result.status(file_name="import errors", runnable=False, diff --git a/python/subunit/tests/test_run.py b/python/subunit/tests/test_run.py index de9b094..3339a82 100644 --- a/python/subunit/tests/test_run.py +++ b/python/subunit/tests/test_run.py @@ -65,6 +65,18 @@ class TestSubunitTestRunner(TestCase): exc = self.assertRaises(SystemExit, runner.list, None) self.assertEqual((2,), exc.args) + def test_list_includes_loader_errors(self): + bytestream = io.BytesIO() + runner = SubunitTestRunner(stream=bytestream) + def list_test(test): + return [], [] + class Loader(object): + errors = ['failed import'] + loader = Loader() + self.patch(run, 'list_test', list_test) + exc = self.assertRaises(SystemExit, runner.list, None, loader=loader) + self.assertEqual((2,), exc.args) + class FailingTest(TestCase): def test_fail(self): 1/0 -- cgit v1.2.1