summaryrefslogtreecommitdiff
path: root/python/subunit
diff options
context:
space:
mode:
authorJonathan Lange <jml@canonical.com>2011-02-13 14:39:43 +0000
committerJonathan Lange <jml@canonical.com>2011-02-13 14:39:43 +0000
commit7fd32930b2d9bff0c4f8f823a313c03beedce451 (patch)
tree518aabc9da51cd52364e27d69c9e62a8013ebff5 /python/subunit
parentcd10a295cc588e4ca93e741b094b6c2997153f37 (diff)
downloadsubunit-git-7fd32930b2d9bff0c4f8f823a313c03beedce451.tar.gz
Add a time collapsing decorator.
Diffstat (limited to 'python/subunit')
-rw-r--r--python/subunit/test_results.py19
-rw-r--r--python/subunit/tests/test_test_results.py25
2 files changed, 44 insertions, 0 deletions
diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py
index 12849f5..b3228c6 100644
--- a/python/subunit/test_results.py
+++ b/python/subunit/test_results.py
@@ -247,6 +247,25 @@ class TagCollapsingDecorator(TestResultDecorator):
return self.decorated.tags(new_tags, gone_tags)
+class TimeCollapsingDecorator(HookedTestResultDecorator):
+ """Only pass on the first and last of a consecutive sequence of times."""
+
+ def __init__(self, decorated):
+ HookedTestResultDecorator.__init__(self, decorated)
+ self._last_time = None
+
+ def _before_event(self):
+ self.decorated.time(self._last_time)
+ self._last_time = None
+
+ def time(self, a_time):
+ # Don't upcall, because we don't want to call _before_event, it's only
+ # for non-time events.
+ if self._last_time is None:
+ self.decorated.time(a_time)
+ self._last_time = a_time
+
+
def all_true(bools):
"""Return True if all of 'bools' are True. False otherwise."""
for b in bools:
diff --git a/python/subunit/tests/test_test_results.py b/python/subunit/tests/test_test_results.py
index 7aed8a4..8535d56 100644
--- a/python/subunit/tests/test_test_results.py
+++ b/python/subunit/tests/test_test_results.py
@@ -215,6 +215,31 @@ class TestTagCollapsingDecorator(TestCase):
result._events)
+class TestTimeCollapsingDecorator(TestCase):
+
+ def make_time(self):
+ # Heh heh.
+ return datetime.datetime(
+ 2000, 1, self.getUniqueInteger(), tzinfo=iso8601.UTC)
+
+ def test_initial_time_forwarded(self):
+ result = ExtendedTestResult()
+ tag_collapser = subunit.test_results.TimeCollapsingDecorator(result)
+ a_time = self.make_time()
+ tag_collapser.time(a_time)
+ self.assertEquals([('time', a_time)], result._events)
+
+ def test_time_collapsed(self):
+ result = ExtendedTestResult()
+ tag_collapser = subunit.test_results.TimeCollapsingDecorator(result)
+ times = [self.make_time() for i in range(5)]
+ for a_time in times:
+ tag_collapser.time(a_time)
+ tag_collapser.startTest(subunit.RemotedTestCase('foo'))
+ self.assertEquals(
+ [('time', times[0]), ('time', times[-1])], result._events[:-1])
+
+
def test_suite():
loader = subunit.tests.TestUtil.TestLoader()
result = loader.loadTestsFromName(__name__)