diff options
Diffstat (limited to 'python/subunit')
| -rw-r--r-- | python/subunit/test_results.py | 14 | ||||
| -rw-r--r-- | python/subunit/tests/test_test_results.py | 26 |
2 files changed, 34 insertions, 6 deletions
diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py index b3228c6..cf051ba 100644 --- a/python/subunit/test_results.py +++ b/python/subunit/test_results.py @@ -252,18 +252,22 @@ class TimeCollapsingDecorator(HookedTestResultDecorator): def __init__(self, decorated): HookedTestResultDecorator.__init__(self, decorated) - self._last_time = None + self._last_received_time = None + self._last_sent_time = None def _before_event(self): - self.decorated.time(self._last_time) - self._last_time = None + if self._last_received_time != self._last_sent_time: + self.decorated.time(self._last_received_time) + self._last_sent_time = self._last_received_time + self._last_received_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: + if self._last_received_time is None: self.decorated.time(a_time) - self._last_time = a_time + self._last_sent_time = a_time + self._last_received_time = a_time def all_true(bools): diff --git a/python/subunit/tests/test_test_results.py b/python/subunit/tests/test_test_results.py index 8535d56..8633b44 100644 --- a/python/subunit/tests/test_test_results.py +++ b/python/subunit/tests/test_test_results.py @@ -223,13 +223,16 @@ class TestTimeCollapsingDecorator(TestCase): 2000, 1, self.getUniqueInteger(), tzinfo=iso8601.UTC) def test_initial_time_forwarded(self): + # We always forward the first time event we see. 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): + def test_time_collapsed_to_first_and_last(self): + # If there are many consecutive time events, only the first and last + # are sent through. result = ExtendedTestResult() tag_collapser = subunit.test_results.TimeCollapsingDecorator(result) times = [self.make_time() for i in range(5)] @@ -239,6 +242,27 @@ class TestTimeCollapsingDecorator(TestCase): self.assertEquals( [('time', times[0]), ('time', times[-1])], result._events[:-1]) + def test_only_one_time_sent(self): + # If we receive a single time event followed by a non-time event, we + # send exactly one time event. + result = ExtendedTestResult() + tag_collapser = subunit.test_results.TimeCollapsingDecorator(result) + a_time = self.make_time() + tag_collapser.time(a_time) + tag_collapser.startTest(subunit.RemotedTestCase('foo')) + self.assertEquals([('time', a_time)], result._events[:-1]) + + def test_duplicate_times_not_sent(self): + # Many time events with the exact same time are collapsed into one + # time event. + result = ExtendedTestResult() + tag_collapser = subunit.test_results.TimeCollapsingDecorator(result) + a_time = self.make_time() + for i in range(5): + tag_collapser.time(a_time) + tag_collapser.startTest(subunit.RemotedTestCase('foo')) + self.assertEquals([('time', a_time)], result._events[:-1]) + def test_suite(): loader = subunit.tests.TestUtil.TestLoader() |
