diff options
| author | Robert Collins <robertc@robertcollins.net> | 2012-12-17 20:24:28 +1300 |
|---|---|---|
| committer | Robert Collins <robertc@robertcollins.net> | 2012-12-17 20:24:28 +1300 |
| commit | d6b7ba2312022dadbde9e1b357d0cd64d1a1d67b (patch) | |
| tree | 7fcfe11b099622ccfdacff59a9fd93eebfa25725 /python/subunit | |
| parent | 6bcd5f96767d0e438001c30b441c13e33c062992 (diff) | |
| download | subunit-git-d6b7ba2312022dadbde9e1b357d0cd64d1a1d67b.tar.gz | |
* The ``failfast`` option to ``subunit.run`` will now work. The dependency on
testtools has been raised to 0.9.23 to permit this.
(Robert Collins, #1090582)
Diffstat (limited to 'python/subunit')
| -rw-r--r-- | python/subunit/__init__.py | 6 | ||||
| -rwxr-xr-x | python/subunit/run.py | 15 | ||||
| -rw-r--r-- | python/subunit/test_results.py | 7 | ||||
| -rw-r--r-- | python/subunit/tests/test_test_results.py | 6 |
4 files changed, 31 insertions, 3 deletions
diff --git a/python/subunit/__init__.py b/python/subunit/__init__.py index 6015c0e..ebe6e8c 100644 --- a/python/subunit/__init__.py +++ b/python/subunit/__init__.py @@ -636,6 +636,8 @@ class TestProtocolClient(testresult.TestResult): to subunit.Content objects. """ self._addOutcome("error", test, error=error, details=details) + if self.failfast: + self.stop() def addExpectedFailure(self, test, error=None, details=None): """Report an expected failure in test test. @@ -666,6 +668,8 @@ class TestProtocolClient(testresult.TestResult): to subunit.Content objects. """ self._addOutcome("failure", test, error=error, details=details) + if self.failfast: + self.stop() def _addOutcome(self, outcome, test, error=None, details=None, error_permitted=True): @@ -730,6 +734,8 @@ class TestProtocolClient(testresult.TestResult): """ self._addOutcome("uxsuccess", test, details=details, error_permitted=False) + if self.failfast: + self.stop() def startTest(self, test): """Mark a test as starting its test run.""" diff --git a/python/subunit/run.py b/python/subunit/run.py index ca5fe5c..b5ccea4 100755 --- a/python/subunit/run.py +++ b/python/subunit/run.py @@ -34,13 +34,22 @@ from testtools.run import ( class SubunitTestRunner(object): - def __init__(self, stream=sys.stdout): - self.stream = stream + def __init__(self, verbosity=None, failfast=None, buffer=None, stream=None): + """Create a TestToolsTestRunner. + + :param verbosity: Ignored. + :param failfast: Stop running tests at the first failure. + :param buffer: Ignored. + """ + self.failfast = failfast + self.stream = stream or sys.stdout def run(self, test): "Run the given test case or test suite." result = TestProtocolClient(self.stream) result = AutoTimingTestResultDecorator(result) + if self.failfast is not None: + result.failfast = self.failfast test(result) return result @@ -70,6 +79,6 @@ class SubunitTestProgram(TestProgram): if __name__ == '__main__': stream = get_default_formatter() - runner = SubunitTestRunner(stream) + runner = SubunitTestRunner SubunitTestProgram(module=None, argv=sys.argv, testRunner=runner, stdout=sys.stdout) diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py index c00a2d3..91c9bbd 100644 --- a/python/subunit/test_results.py +++ b/python/subunit/test_results.py @@ -78,6 +78,13 @@ class TestResultDecorator(object): def addUnexpectedSuccess(self, test, details=None): return self.decorated.addUnexpectedSuccess(test, details=details) + def _get_failfast(self): + return getattr(self.decorated, 'failfast', False) + + def _set_failfast(self, value): + self.decorated.failfast = value + failfast = property(_get_failfast, _set_failfast) + def progress(self, offset, whence): return self.decorated.progress(offset, whence) diff --git a/python/subunit/tests/test_test_results.py b/python/subunit/tests/test_test_results.py index 236dfa2..ff74b9a 100644 --- a/python/subunit/tests/test_test_results.py +++ b/python/subunit/tests/test_test_results.py @@ -61,6 +61,7 @@ class TimeCapturingResult(unittest.TestResult): def __init__(self): super(TimeCapturingResult, self).__init__() self._calls = [] + self.failfast = False def time(self, a_datetime): self._calls.append(a_datetime) @@ -198,6 +199,11 @@ class TestAutoTimingTestResultDecorator(unittest.TestCase): self.assertEqual(3, len(self.decorated._calls)) self.assertNotEqual(None, self.decorated._calls[2]) + def test_set_failfast_True(self): + self.assertFalse(self.decorated.failfast) + self.result.failfast = True + self.assertTrue(self.decorated.failfast) + class TestTagCollapsingDecorator(TestCase): |
