summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJonathan Lange <jml@mumak.net>2012-04-20 10:54:17 +0100
committerJonathan Lange <jml@mumak.net>2012-04-20 10:54:17 +0100
commita34add828e0891ea2309141e1358bdbf3ba3fbf4 (patch)
treea3d8465c70d8d86fcae7f5c21eed084773f7f02b /python
parent87338c132fb605881db065c20b9aa2f293946e8e (diff)
downloadsubunit-git-a34add828e0891ea2309141e1358bdbf3ba3fbf4.tar.gz
Make sure tags are sent before result.
Diffstat (limited to 'python')
-rw-r--r--python/subunit/test_results.py15
-rw-r--r--python/subunit/tests/test_subunit_filter.py1
-rw-r--r--python/subunit/tests/test_test_results.py19
3 files changed, 26 insertions, 9 deletions
diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py
index b6e9be8..dec168d 100644
--- a/python/subunit/test_results.py
+++ b/python/subunit/test_results.py
@@ -209,7 +209,7 @@ class AutoTimingTestResultDecorator(HookedTestResultDecorator):
return self.decorated.time(a_datetime)
-class TagCollapsingDecorator(TestResultDecorator):
+class TagCollapsingDecorator(HookedTestResultDecorator):
"""Collapses many 'tags' calls into one where possible."""
def __init__(self, result):
@@ -227,16 +227,15 @@ class TagCollapsingDecorator(TestResultDecorator):
self._current_test_tags = set(), set()
def stopTest(self, test):
- """Stop a test.
+ super(TagCollapsingDecorator, self).stopTest(test)
+ self._current_test_tags = set(), set()
- Not directly passed to the client, but used for handling of tags
- correctly.
- """
- # Tags to output for this test.
+ 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.decorated.stopTest(test)
- self._current_test_tags = None
+ self._current_test_tags = set(), set()
def tags(self, new_tags, gone_tags):
"""Handle tag instructions.
diff --git a/python/subunit/tests/test_subunit_filter.py b/python/subunit/tests/test_subunit_filter.py
index 35d4603..e04090d 100644
--- a/python/subunit/tests/test_subunit_filter.py
+++ b/python/subunit/tests/test_subunit_filter.py
@@ -301,7 +301,6 @@ xfail todo
('startTest', foo),
('addSuccess', foo),
('stopTest', foo),
- ('tags', set(), set(['a'])),
],
events)
diff --git a/python/subunit/tests/test_test_results.py b/python/subunit/tests/test_test_results.py
index 6beb57a..d11f482 100644
--- a/python/subunit/tests/test_test_results.py
+++ b/python/subunit/tests/test_test_results.py
@@ -238,6 +238,25 @@ class TestTagCollapsingDecorator(TestCase):
('stopTest', test)],
result._events)
+ def test_tags_sent_before_result(self):
+ # Because addSuccess and friends tend to send subunit output
+ # immediately, and because 'tags:' before a result line means
+ # something different to 'tags:' after a result line, we need to be
+ # sure that tags are emitted before 'addSuccess' (or whatever).
+ result = ExtendedTestResult()
+ tag_collapser = subunit.test_results.TagCollapsingDecorator(result)
+ test = subunit.RemotedTestCase('foo')
+ tag_collapser.startTest(test)
+ tag_collapser.tags(set(['a']), set())
+ tag_collapser.addSuccess(test)
+ tag_collapser.stopTest(test)
+ self.assertEquals(
+ [('startTest', test),
+ ('tags', set(['a']), set()),
+ ('addSuccess', test),
+ ('stopTest', test)],
+ result._events)
+
class TestTimeCollapsingDecorator(TestCase):