diff options
| author | Jonathan Lange <jml@canonical.com> | 2012-02-01 19:20:05 +0000 |
|---|---|---|
| committer | Jonathan Lange <jml@canonical.com> | 2012-02-01 19:20:05 +0000 |
| commit | 73758e32e11f41e2d715d7f34db224827aa23e41 (patch) | |
| tree | 140e33a85f207c44fcf32a237d19a6c38a578d8c /python | |
| parent | c4924ff01abc2805a137c27de7ea18747abdcd04 (diff) | |
| download | subunit-git-73758e32e11f41e2d715d7f34db224827aa23e41.tar.gz | |
Swathe of tests.
Diffstat (limited to 'python')
| -rw-r--r-- | python/subunit/test_results.py | 7 | ||||
| -rw-r--r-- | python/subunit/tests/test_test_results.py | 226 |
2 files changed, 229 insertions, 4 deletions
diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py index a4ff372..c8b0bfe 100644 --- a/python/subunit/test_results.py +++ b/python/subunit/test_results.py @@ -503,8 +503,6 @@ class TestIdPrintingResult(testtools.TestResult): class TestByTestResult(testtools.TestResult): """Call something every time a test completes.""" - # XXX: No tests. Naughty, naughty. - # XXX: Arguably belongs in testtools. def __init__(self, on_test): @@ -521,10 +519,11 @@ class TestByTestResult(testtools.TestResult): def startTest(self, test): super(TestByTestResult, self).startTest(test) - self._current_test = test + self._start_time = self._now() + # There's no supported (i.e. tested) behaviour that relies on these + # being set, but it makes me more comfortable all the same. -- jml self._status = None self._details = None - self._start_time = self._now() self._stop_time = None def stopTest(self, test): diff --git a/python/subunit/tests/test_test_results.py b/python/subunit/tests/test_test_results.py index 94d2274..7d1a869 100644 --- a/python/subunit/tests/test_test_results.py +++ b/python/subunit/tests/test_test_results.py @@ -15,15 +15,22 @@ # import datetime +import sys import unittest from testtools import TestCase +from testtools.content import ( + text_content, + TracebackContent, + ) from testtools.testresult.doubles import ExtendedTestResult import subunit import subunit.iso8601 as iso8601 import subunit.test_results +import testtools + class LoggingDecorator(subunit.test_results.HookedTestResultDecorator): @@ -294,6 +301,225 @@ class TestTimeCollapsingDecorator(TestCase): ('stopTest', foo)], result._events) +class TestByTestResultTests(testtools.TestCase): + + def setUp(self): + super(TestByTestResultTests, self).setUp() + self.log = [] + self.result = subunit.test_results.TestByTestResult(self.on_test) + self.result._now = iter(range(5)).next + + def on_test(self, **kwargs): + self.log.append(kwargs) + + def test_no_tests_nothing_reported(self): + self.result.startTestRun() + self.result.stopTestRun() + self.assertEqual([], self.log) + + def test_add_success(self): + self.result.startTest(self) + self.result.addSuccess(self) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'success', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': None}], + self.log) + + def test_add_success_details(self): + self.result.startTest(self) + details = {'foo': 'bar'} + self.result.addSuccess(self, details=details) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'success', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': details}], + self.log) + + def test_tags(self): + if not getattr(self.result, 'tags', None): + self.skipTest("No tags in testtools") + self.result.tags(['foo']) + self.result.startTest(self) + details = {'foo': 'bar'} + self.result.addSuccess(self, details=details) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'success', + 'start_time': 0, + 'stop_time': 1, + 'tags': set('foo'), + 'details': details}], + self.log) + + def test_add_error(self): + self.result.startTest(self) + try: + 1/0 + except ZeroDivisionError: + error = sys.exc_info() + self.result.addError(self, error) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'error', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': {'traceback': TracebackContent(error, self)}}], + self.log) + + def test_add_error_details(self): + self.result.startTest(self) + details = {"foo": text_content("bar")} + self.result.addError(self, details=details) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'error', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': details}], + self.log) + + def test_add_failure(self): + self.result.startTest(self) + try: + self.fail("intentional failure") + except self.failureException: + failure = sys.exc_info() + self.result.addFailure(self, failure) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'failure', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': {'traceback': TracebackContent(failure, self)}}], + self.log) + + def test_add_failure_details(self): + self.result.startTest(self) + details = {"foo": text_content("bar")} + self.result.addFailure(self, details=details) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'failure', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': details}], + self.log) + + def test_add_xfail(self): + self.result.startTest(self) + try: + 1/0 + except ZeroDivisionError: + error = sys.exc_info() + self.result.addExpectedFailure(self, error) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'xfail', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': {'traceback': TracebackContent(error, self)}}], + self.log) + + def test_add_xfail_details(self): + self.result.startTest(self) + details = {"foo": text_content("bar")} + self.result.addExpectedFailure(self, details=details) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'xfail', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': details}], + self.log) + + def test_add_unexpected_success(self): + self.result.startTest(self) + details = {'foo': 'bar'} + self.result.addUnexpectedSuccess(self, details=details) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'success', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': details}], + self.log) + + def test_add_skip_reason(self): + self.result.startTest(self) + reason = self.getUniqueString() + self.result.addSkip(self, reason) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'skip', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': {'reason': text_content(reason)}}], + self.log) + + def test_add_skip_details(self): + self.result.startTest(self) + details = {'foo': 'bar'} + self.result.addSkip(self, details=details) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'skip', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': details}], + self.log) + + def test_twice(self): + self.result.startTest(self) + self.result.addSuccess(self, details={'foo': 'bar'}) + self.result.stopTest(self) + self.result.startTest(self) + self.result.addSuccess(self) + self.result.stopTest(self) + self.assertEqual( + [{'test': self, + 'status': 'success', + 'start_time': 0, + 'stop_time': 1, + 'tags': None, + 'details': {'foo': 'bar'}}, + {'test': self, + 'status': 'success', + 'start_time': 2, + 'stop_time': 3, + 'tags': None, + 'details': None}, + ], + self.log) + + def test_suite(): loader = subunit.tests.TestUtil.TestLoader() result = loader.loadTestsFromName(__name__) |
