diff options
| author | Robert Collins <robertc@robertcollins.net> | 2009-08-30 17:44:43 +1000 |
|---|---|---|
| committer | Robert Collins <robertc@robertcollins.net> | 2009-08-30 17:44:43 +1000 |
| commit | 6d4b439267d1449356537128abffa0d5a228402f (patch) | |
| tree | 4ae361a8746ef3ff180b7f1a7668e306537a5b2a /python/subunit | |
| parent | dc341ccc88b79abd13a0b033c8012dd25329c9ac (diff) | |
| parent | b89035620e0466c76da5c3f4f499beb66df4a889 (diff) | |
| download | subunit-git-6d4b439267d1449356537128abffa0d5a228402f.tar.gz | |
Merge Martin's regex filter patch.
Diffstat (limited to 'python/subunit')
| -rw-r--r-- | python/subunit/__init__.py | 19 | ||||
| -rw-r--r-- | python/subunit/tests/test_subunit_filter.py | 17 |
2 files changed, 30 insertions, 6 deletions
diff --git a/python/subunit/__init__.py b/python/subunit/__init__.py index 27d9e53..5407f2a 100644 --- a/python/subunit/__init__.py +++ b/python/subunit/__init__.py @@ -818,16 +818,22 @@ class TestResultFilter(unittest.TestResult): the other instance must be interrogated. :ivar result: The result that tests are passed to after filtering. + :ivar filter_predicate: The callback run to decide whether to pass + a result. """ def __init__(self, result, filter_error=False, filter_failure=False, - filter_success=True, filter_skip=False): + filter_success=True, filter_skip=False, + filter_predicate=None): """Create a FilterResult object filtering to result. :param filter_error: Filter out errors. :param filter_failure: Filter out failures. :param filter_success: Filter out successful tests. :param filter_skip: Filter out skipped tests. + :param filter_predicate: A callable taking (test, err) and + returning True if the result should be passed through. + err is None for success. """ unittest.TestResult.__init__(self) self.result = result @@ -835,21 +841,24 @@ class TestResultFilter(unittest.TestResult): self._filter_failure = filter_failure self._filter_success = filter_success self._filter_skip = filter_skip + if filter_predicate is None: + filter_predicate = lambda test, err: True + self.filter_predicate = filter_predicate def addError(self, test, err): - if not self._filter_error: + if not self._filter_error and self.filter_predicate(test, err): self.result.startTest(test) self.result.addError(test, err) self.result.stopTest(test) def addFailure(self, test, err): - if not self._filter_failure: + if not self._filter_failure and self.filter_predicate(test, err): self.result.startTest(test) self.result.addFailure(test, err) self.result.stopTest(test) def addSkip(self, test, reason): - if not self._filter_skip: + if not self._filter_skip and self.filter_predicate(test, reason): self.result.startTest(test) # This is duplicated, it would be nice to have on a 'calls # TestResults' mixin perhaps. @@ -861,7 +870,7 @@ class TestResultFilter(unittest.TestResult): self.result.stopTest(test) def addSuccess(self, test): - if not self._filter_success: + if not self._filter_success and self.filter_predicate(test, None): self.result.startTest(test) self.result.addSuccess(test) self.result.stopTest(test) diff --git a/python/subunit/tests/test_subunit_filter.py b/python/subunit/tests/test_subunit_filter.py index 1341d12..e7196ff 100644 --- a/python/subunit/tests/test_subunit_filter.py +++ b/python/subunit/tests/test_subunit_filter.py @@ -91,6 +91,19 @@ class TestTestResultFilter(unittest.TestCase): self.filtered_result.failures]) self.assertEqual(5, self.filtered_result.testsRun) + def test_filter_predicate(self): + """You can filter by predicate callbacks""" + self.filtered_result = unittest.TestResult() + filter_cb = lambda test, err: str(err).find('error details') != -1 + self.filter = subunit.TestResultFilter(self.filtered_result, + filter_predicate=filter_cb, + filter_success=False) + self.run_tests() + self.assertEqual(1, + self.filtered_result.testsRun) + # I'd like to test filtering the xfail but it's blocked by + # https://bugs.edge.launchpad.net/subunit/+bug/409193 -- mbp 20090805 + def run_tests(self): self.setUpTestStream() self.test = subunit.ProtocolTestCase(self.input_stream) @@ -109,7 +122,9 @@ test failed tags: local failure failed test error -error error +error error [ +error details +] test skipped skip skipped test todo |
