testtools-dev team mailing list archive
-
testtools-dev team
-
Mailing list archive
-
Message #00996
[Merge] lp:~jml/testtools/tagger into lp:testtools
Jonathan Lange has proposed merging lp:~jml/testtools/tagger into lp:testtools.
Requested reviews:
testtools committers (testtools-committers)
For more details, see:
https://code.launchpad.net/~jml/testtools/tagger/+merge/101904
When we get tests from multiple sources and want to assemble them into one test result, we want to have some way of identifying which source an individual test came from. Since we can't rely on ordering, a natural way of doing this is to tag each test with some sort of label that identifies its source.
This branch adds a TestResultDecorator that individually tags each test sent through it with a specific set of tags.
--
https://code.launchpad.net/~jml/testtools/tagger/+merge/101904
Your team testtools developers is subscribed to branch lp:testtools.
=== modified file 'testtools/__init__.py'
--- testtools/__init__.py 2012-04-13 09:42:40 +0000
+++ testtools/__init__.py 2012-04-13 12:37:22 +0000
@@ -14,6 +14,7 @@
'MultiTestResult',
'PlaceHolder',
'run_test_with',
+ 'Tagger',
'TestCase',
'TestCommand',
'TestByTestResult',
@@ -57,6 +58,7 @@
from testtools.testresult import (
ExtendedToOriginalDecorator,
MultiTestResult,
+ Tagger,
TestByTestResult,
TestResult,
TestResultDecorator,
=== modified file 'testtools/testresult/__init__.py'
--- testtools/testresult/__init__.py 2012-04-13 09:42:40 +0000
+++ testtools/testresult/__init__.py 2012-04-13 12:37:22 +0000
@@ -5,6 +5,7 @@
__all__ = [
'ExtendedToOriginalDecorator',
'MultiTestResult',
+ 'Tagger',
'TestByTestResult',
'TestResult',
'TestResultDecorator',
@@ -15,6 +16,7 @@
from testtools.testresult.real import (
ExtendedToOriginalDecorator,
MultiTestResult,
+ Tagger,
TestByTestResult,
TestResult,
TestResultDecorator,
=== modified file 'testtools/testresult/real.py'
--- testtools/testresult/real.py 2012-04-13 09:42:40 +0000
+++ testtools/testresult/real.py 2012-04-13 12:37:22 +0000
@@ -6,6 +6,7 @@
__all__ = [
'ExtendedToOriginalDecorator',
'MultiTestResult',
+ 'Tagger',
'TestResult',
'TestResultDecorator',
'ThreadsafeForwardingResult',
@@ -726,6 +727,24 @@
return self.decorated.time(a_datetime)
+class Tagger(TestResultDecorator):
+ """Tag each test individually."""
+
+ def __init__(self, decorated, new_tags, gone_tags):
+ """Wrap 'decorated' such that each test is tagged.
+
+ :param new_tags: Tags to be added for each test.
+ :param gone_tags: Tags to be removed for each test.
+ """
+ super(Tagger, self).__init__(decorated)
+ self._new_tags = set(new_tags)
+ self._gone_tags = set(gone_tags)
+
+ def startTest(self, test):
+ super(Tagger, self).startTest(test)
+ self.tags(self._new_tags, self._gone_tags)
+
+
class TestByTestResult(TestResult):
"""Call something every time a test completes."""
=== modified file 'testtools/tests/test_testresult.py'
--- testtools/tests/test_testresult.py 2012-04-13 09:42:40 +0000
+++ testtools/tests/test_testresult.py 2012-04-13 12:37:22 +0000
@@ -17,6 +17,7 @@
from testtools import (
ExtendedToOriginalDecorator,
MultiTestResult,
+ Tagger,
TestCase,
TestResult,
TestResultDecorator,
@@ -1815,6 +1816,30 @@
self.log)
+class TestTagger(TestCase):
+
+ def test_tags_tests(self):
+ result = ExtendedTestResult()
+ tagger = Tagger(result, set(['foo']), set(['bar']))
+ test1, test2 = self, make_test()
+ tagger.startTest(test1)
+ tagger.addSuccess(test1)
+ tagger.stopTest(test1)
+ tagger.startTest(test2)
+ tagger.addSuccess(test2)
+ tagger.stopTest(test2)
+ self.assertEqual(
+ [('startTest', test1),
+ ('tags', set(['foo']), set(['bar'])),
+ ('addSuccess', test1),
+ ('stopTest', test1),
+ ('startTest', test2),
+ ('tags', set(['foo']), set(['bar'])),
+ ('addSuccess', test2),
+ ('stopTest', test2),
+ ], result._events)
+
+
def test_suite():
from unittest import TestLoader
return TestLoader().loadTestsFromName(__name__)
Follow ups