summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@jelmer.uk>2018-03-24 12:28:59 +0000
committerJelmer Vernooij <jelmer@jelmer.uk>2018-03-24 14:22:02 +0000
commitbb00b29f4778650bc484912f6198f19832b1b1ac (patch)
tree9ce9503d65ca863d9dd4dcd91d1ab72beb9fda9e /python
parent9a80eb9adba9d5e43776658801e2fe1ccdb04f5c (diff)
downloadsubunit-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.py17
-rw-r--r--python/subunit/tests/test_subunit_filter.py16
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