summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJonathan Lange <jml@canonical.com>2011-02-11 17:43:01 +0000
committerJonathan Lange <jml@canonical.com>2011-02-11 17:43:01 +0000
commitdd089db28901fa5c05dc5ead9a6db1ca9ef5e80b (patch)
tree437bba23f020242b00acbf7b2dbb9ab9b0ca4892 /python
parent6d6297fef98e8e86cdea243922cc2e79d5c4641f (diff)
downloadsubunit-git-dd089db28901fa5c05dc5ead9a6db1ca9ef5e80b.tar.gz
Fix the immediate bug.
Diffstat (limited to 'python')
-rw-r--r--python/subunit/test_results.py35
-rw-r--r--python/subunit/tests/test_subunit_filter.py18
2 files changed, 31 insertions, 22 deletions
diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py
index 1c91daa..4079cea 100644
--- a/python/subunit/test_results.py
+++ b/python/subunit/test_results.py
@@ -237,49 +237,51 @@ class TestResultFilter(TestResultDecorator):
# The (new, gone) tags for the current test.
self._current_test_tags = None
+ # Calls to this result that we don't know whether to forward on yet.
+ self._buffered_calls = []
+
def addError(self, test, err=None, details=None):
if (not self._filter_error and
self.filter_predicate(test, 'error', err, details)):
- self.decorated.startTest(test)
- self.decorated.addError(test, err, details=details)
+ self._buffered_calls.append(
+ ('addError', [test, err], {'details': details}))
else:
self._filtered()
def addFailure(self, test, err=None, details=None):
if (not self._filter_failure and
self.filter_predicate(test, 'failure', err, details)):
- self.decorated.startTest(test)
- self.decorated.addFailure(test, err, details=details)
+ self._buffered_calls.append(
+ ('addFailure', [test, err], {'details': details}))
else:
self._filtered()
def addSkip(self, test, reason=None, details=None):
if (not self._filter_skip and
self.filter_predicate(test, 'skip', reason, details)):
- self.decorated.startTest(test)
- self.decorated.addSkip(test, reason, details=details)
+ self._buffered_calls.append(
+ ('addSkip', [reason], {'details': details}))
else:
self._filtered()
def addSuccess(self, test, details=None):
if (not self._filter_success and
self.filter_predicate(test, 'success', None, details)):
- self.decorated.startTest(test)
- self.decorated.addSuccess(test, details=details)
+ self._buffered_calls.append(
+ ('addSuccess', [test], {'details': details}))
else:
self._filtered()
def addExpectedFailure(self, test, err=None, details=None):
if self.filter_predicate(test, 'expectedfailure', err, details):
- self.decorated.startTest(test)
- return self.decorated.addExpectedFailure(test, err,
- details=details)
+ self._buffered_calls.append(
+ ('addExpectedFailure', [test, err], {'details': details}))
else:
self._filtered()
def addUnexpectedSuccess(self, test, details=None):
- self.decorated.startTest(test)
- return self.decorated.addUnexpectedSuccess(test, details=details)
+ self._buffered_calls.append(
+ ('addUnexpectedSuccess', [test], {'details': details}))
def _filtered(self):
self._current_test_filtered = True
@@ -293,6 +295,7 @@ class TestResultFilter(TestResultDecorator):
self._current_test = test
self._current_test_filtered = False
self._current_test_tags = set(), set()
+ self._buffered_calls.append(('startTest', [test], {}))
def stopTest(self, test):
"""Stop a test.
@@ -302,12 +305,15 @@ class TestResultFilter(TestResultDecorator):
"""
if not self._current_test_filtered:
# Tags to output for this test.
+ for method, args, kwargs in self._buffered_calls:
+ getattr(self.decorated, method)(*args, **kwargs)
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 = None
self._current_test_filtered = None
self._current_test_tags = None
+ self._buffered_calls = []
def tags(self, new_tags, gone_tags):
"""Handle tag instructions.
@@ -326,6 +332,9 @@ class TestResultFilter(TestResultDecorator):
self._current_test_tags[1].difference_update(new_tags)
return self.decorated.tags(new_tags, gone_tags)
+ def time(self, a_time):
+ self._buffered_calls.append(('time', [a_time], {}))
+
def id_to_orig_id(self, id):
if id.startswith("subunit.RemotedTestCase."):
return id[len("subunit.RemotedTestCase."):]
diff --git a/python/subunit/tests/test_subunit_filter.py b/python/subunit/tests/test_subunit_filter.py
index 786ef46..0548966 100644
--- a/python/subunit/tests/test_subunit_filter.py
+++ b/python/subunit/tests/test_subunit_filter.py
@@ -144,24 +144,24 @@ xfail todo
# Passing a subunit stream through TestResultFilter preserves the
# relative ordering of 'time' directives and any other subunit
# directives that are still included.
- dates = [
- datetime(year=2000, month=1, day=i, tzinfo=iso8601.Utc())
- for i in range(1, 4)]
+ date_a = datetime(year=2000, month=1, day=1, tzinfo=iso8601.UTC)
+ date_b = datetime(year=2000, month=1, day=2, tzinfo=iso8601.UTC)
subunit_stream = '\n'.join([
"time: %s",
"test: foo",
"time: %s",
"error: foo",
- "time: %s"]) % tuple(dates)
+ ""]) % (date_a, date_b)
result = ExtendedTestResult()
result_filter = TestResultFilter(result)
self.run_tests(result_filter, subunit_stream)
+ foo = subunit.RemotedTestCase('foo')
self.assertEquals(
- [('time', dates[0]),
- ('startTest', 'foo'),
- ('time', dates[1]),
- ('addError', 'foo'),
- ('time', dates[2])], result._events)
+ [('time', date_a),
+ ('startTest', foo),
+ ('time', date_b),
+ ('addError', foo, {}),
+ ('stopTest', foo)], result._events)
def test_suite():