diff options
| author | Jonathan Lange <jml@canonical.com> | 2011-02-11 17:43:01 +0000 |
|---|---|---|
| committer | Jonathan Lange <jml@canonical.com> | 2011-02-11 17:43:01 +0000 |
| commit | dd089db28901fa5c05dc5ead9a6db1ca9ef5e80b (patch) | |
| tree | 437bba23f020242b00acbf7b2dbb9ab9b0ca4892 /python | |
| parent | 6d6297fef98e8e86cdea243922cc2e79d5c4641f (diff) | |
| download | subunit-git-dd089db28901fa5c05dc5ead9a6db1ca9ef5e80b.tar.gz | |
Fix the immediate bug.
Diffstat (limited to 'python')
| -rw-r--r-- | python/subunit/test_results.py | 35 | ||||
| -rw-r--r-- | python/subunit/tests/test_subunit_filter.py | 18 |
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(): |
