diff options
| author | Jonathan Lange <jml@canonical.com> | 2011-02-13 14:39:43 +0000 |
|---|---|---|
| committer | Jonathan Lange <jml@canonical.com> | 2011-02-13 14:39:43 +0000 |
| commit | 7fd32930b2d9bff0c4f8f823a313c03beedce451 (patch) | |
| tree | 518aabc9da51cd52364e27d69c9e62a8013ebff5 /python/subunit | |
| parent | cd10a295cc588e4ca93e741b094b6c2997153f37 (diff) | |
| download | subunit-git-7fd32930b2d9bff0c4f8f823a313c03beedce451.tar.gz | |
Add a time collapsing decorator.
Diffstat (limited to 'python/subunit')
| -rw-r--r-- | python/subunit/test_results.py | 19 | ||||
| -rw-r--r-- | python/subunit/tests/test_test_results.py | 25 |
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__) |
