summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJonathan Lange <jml@canonical.com>2012-02-01 19:20:05 +0000
committerJonathan Lange <jml@canonical.com>2012-02-01 19:20:05 +0000
commit73758e32e11f41e2d715d7f34db224827aa23e41 (patch)
tree140e33a85f207c44fcf32a237d19a6c38a578d8c /python
parentc4924ff01abc2805a137c27de7ea18747abdcd04 (diff)
downloadsubunit-git-73758e32e11f41e2d715d7f34db224827aa23e41.tar.gz
Swathe of tests.
Diffstat (limited to 'python')
-rw-r--r--python/subunit/test_results.py7
-rw-r--r--python/subunit/tests/test_test_results.py226
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__)