diff options
author | Jelmer Vernooij <jelmer@jelmer.uk> | 2018-03-24 12:28:59 +0000 |
---|---|---|
committer | Jelmer Vernooij <jelmer@jelmer.uk> | 2018-03-24 14:22:02 +0000 |
commit | bb00b29f4778650bc484912f6198f19832b1b1ac (patch) | |
tree | 9ce9503d65ca863d9dd4dcd91d1ab72beb9fda9e /python | |
parent | 9a80eb9adba9d5e43776658801e2fe1ccdb04f5c (diff) | |
download | subunit-git-bb00b29f4778650bc484912f6198f19832b1b1ac.tar.gz |
Add support for parsing in a regex to apply to test ids.
Bug: pad.lv/1758522
Diffstat (limited to 'python')
-rw-r--r-- | python/subunit/test_results.py | 17 | ||||
-rw-r--r-- | python/subunit/tests/test_subunit_filter.py | 16 |
2 files changed, 32 insertions, 1 deletions
diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py index b3ca968..53c3dad 100644 --- a/python/subunit/test_results.py +++ b/python/subunit/test_results.py @@ -25,6 +25,7 @@ from testtools.content import ( TracebackContent, ) from testtools import StreamResult +from testtools.testcase import PlaceHolder from subunit import iso8601 import subunit @@ -450,7 +451,8 @@ class TestResultFilter(TestResultDecorator): def __init__(self, result, filter_error=False, filter_failure=False, filter_success=True, filter_skip=False, filter_xfail=False, - filter_predicate=None, fixup_expected_failures=None): + filter_predicate=None, fixup_expected_failures=None, + rename=None): """Create a FilterResult object filtering to result. :param filter_error: Filter out errors. @@ -467,6 +469,7 @@ class TestResultFilter(TestResultDecorator): parameter for efficiency. :param fixup_expected_failures: Set of test ids to consider known failing. + :param rename: Optional function to rename test ids """ predicates = [] if filter_error: @@ -500,8 +503,10 @@ class TestResultFilter(TestResultDecorator): self._fixup_expected_failures = frozenset() else: self._fixup_expected_failures = fixup_expected_failures + self._rename_fn = rename def addError(self, test, err=None, details=None): + test = self._apply_renames(test) if self._failure_expected(test): self.addExpectedFailure(test, err=err, details=details) else: @@ -509,6 +514,7 @@ class TestResultFilter(TestResultDecorator): test, err=err, details=details) def addFailure(self, test, err=None, details=None): + test = self._apply_renames(test) if self._failure_expected(test): self.addExpectedFailure(test, err=err, details=details) else: @@ -516,6 +522,7 @@ class TestResultFilter(TestResultDecorator): test, err=err, details=details) def addSuccess(self, test, details=None): + test = self._apply_renames(test) if self._failure_expected(test): self.addUnexpectedSuccess(test, details=details) else: @@ -524,6 +531,14 @@ class TestResultFilter(TestResultDecorator): def _failure_expected(self, test): return (test.id() in self._fixup_expected_failures) + def _apply_renames(self, test): + if self._rename_fn is None: + return test + new_id = self._rename_fn(test.id()) + # TODO(jelmer): Isn't there a cleaner way of doing this? + setattr(test, "id", lambda: new_id) + return test + class TestIdPrintingResult(testtools.TestResult): """Print test ids to a stream. diff --git a/python/subunit/tests/test_subunit_filter.py b/python/subunit/tests/test_subunit_filter.py index 5f34b3b..95aea36 100644 --- a/python/subunit/tests/test_subunit_filter.py +++ b/python/subunit/tests/test_subunit_filter.py @@ -280,6 +280,22 @@ xfail todo ('addSkip', foo, {}), ('stopTest', foo), ], result._events) + def test_renames(self): + def rename(name): + return name + " - renamed" + result = ExtendedTestResult() + result_filter = TestResultFilter( + result, filter_success=False, rename=rename) + input_stream = _b( + "test: foo\n" + "successful: foo\n") + self.run_tests(result_filter, input_stream) + self.assertEquals( + [('startTest', 'foo - renamed'), + ('addSuccess', 'foo - renamed'), + ('stopTest', 'foo - renamed')], + [(ev[0], ev[1].id()) for ev in result._events]) + if sys.version_info < (2, 7): # These tests require Python >=2.7. del test_fixup_expected_failures, test_fixup_expected_errors, test_fixup_unexpected_success |