summaryrefslogtreecommitdiff
path: root/python/subunit/test_results.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/subunit/test_results.py')
-rw-r--r--python/subunit/test_results.py39
1 files changed, 24 insertions, 15 deletions
diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py
index b5ac0f1..4a55cf8 100644
--- a/python/subunit/test_results.py
+++ b/python/subunit/test_results.py
@@ -210,16 +210,28 @@ class TagCollapsingDecorator(HookedTestResultDecorator):
def __init__(self, result):
super(TagCollapsingDecorator, self).__init__(result)
- # The (new, gone) tags for the current test.
+ self._clear_tags()
+
+ def _clear_tags(self):
+ self._global_tags = set(), set()
self._current_test_tags = None
+ def _get_current_tags(self):
+ if self._current_test_tags:
+ return self._current_test_tags
+ return self._global_tags
+
+ def startTestRun(self):
+ super(TagCollapsingDecorator, self).startTestRun()
+ self._clear_tags()
+
def startTest(self, test):
"""Start a test.
Not directly passed to the client, but used for handling of tags
correctly.
"""
- self.decorated.startTest(test)
+ super(TagCollapsingDecorator, self).startTest(test)
self._current_test_tags = set(), set()
def stopTest(self, test):
@@ -227,11 +239,11 @@ class TagCollapsingDecorator(HookedTestResultDecorator):
self._current_test_tags = None
def _before_event(self):
- if not self._current_test_tags:
- return
- if self._current_test_tags[0] or self._current_test_tags[1]:
- self.decorated.tags(*self._current_test_tags)
- self._current_test_tags = set(), set()
+ new_tags, gone_tags = self._get_current_tags()
+ if new_tags or gone_tags:
+ self.decorated.tags(new_tags, gone_tags)
+ if self._current_test_tags:
+ self._current_test_tags = set(), set()
def tags(self, new_tags, gone_tags):
"""Handle tag instructions.
@@ -242,14 +254,11 @@ class TagCollapsingDecorator(HookedTestResultDecorator):
:param new_tags: Tags to add,
:param gone_tags: Tags to remove.
"""
- if self._current_test_tags is not None:
- # gather the tags until the test stops.
- self._current_test_tags[0].update(new_tags)
- self._current_test_tags[0].difference_update(gone_tags)
- self._current_test_tags[1].update(gone_tags)
- self._current_test_tags[1].difference_update(new_tags)
- else:
- return self.decorated.tags(new_tags, gone_tags)
+ current_new_tags, current_gone_tags = self._get_current_tags()
+ current_new_tags.update(new_tags)
+ current_new_tags.difference_update(gone_tags)
+ current_gone_tags.update(gone_tags)
+ current_gone_tags.difference_update(new_tags)
class TimeCollapsingDecorator(HookedTestResultDecorator):