From 931ee641258b77bd440d76a0d5c1f3305010f7c4 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 28 Mar 2011 15:02:55 +0200 Subject: Add test for TagCollapsingDecorator.testsRun. --- python/subunit/tests/test_test_results.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'python') diff --git a/python/subunit/tests/test_test_results.py b/python/subunit/tests/test_test_results.py index 94d2274..23b8b5e 100644 --- a/python/subunit/tests/test_test_results.py +++ b/python/subunit/tests/test_test_results.py @@ -229,6 +229,11 @@ class TestTagCollapsingDecorator(TestCase): ('stopTest', test)], result._events) + def test_tags_collapsed_tests_run(self): + result = ExtendedTestResult() + tag_collapser = subunit.test_results.TagCollapsingDecorator(result) + tag_collapser.testsRun += 1 + class TestTimeCollapsingDecorator(TestCase): -- cgit v1.2.1 From 67a43dcef5f1511398ef32052d1220a0ef35ffcf Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 11 Apr 2011 15:32:47 +0200 Subject: Support --fixup-expected-failures argument to subunit-filter. --- python/subunit/test_results.py | 16 +++++++++++++--- python/subunit/tests/test_subunit_filter.py | 12 ++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) (limited to 'python') diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py index e7f9171..b3308ea 100644 --- a/python/subunit/test_results.py +++ b/python/subunit/test_results.py @@ -294,7 +294,7 @@ class TestResultFilter(TestResultDecorator): def __init__(self, result, filter_error=False, filter_failure=False, filter_success=True, filter_skip=False, - filter_predicate=None): + filter_predicate=None, fixup_expected_failures=None): """Create a FilterResult object filtering to result. :param filter_error: Filter out errors. @@ -306,6 +306,8 @@ class TestResultFilter(TestResultDecorator): through. err and details may be none if no error or extra metadata is available. outcome is the name of the outcome such as 'success' or 'failure'. + :param fixup_expected_failures: Set of test ids to consider known + failing. """ super(TestResultFilter, self).__init__(result) self.decorated = TimeCollapsingDecorator( @@ -330,6 +332,10 @@ class TestResultFilter(TestResultDecorator): self._current_test_filtered = None # Calls to this result that we don't know whether to forward on yet. self._buffered_calls = [] + if fixup_expected_failures is None: + self._fixup_expected_failures = frozenset() + else: + self._fixup_expected_failures = fixup_expected_failures def addError(self, test, err=None, details=None): if (self.filter_predicate(test, 'error', err, details)): @@ -340,8 +346,12 @@ class TestResultFilter(TestResultDecorator): def addFailure(self, test, err=None, details=None): if (self.filter_predicate(test, 'failure', err, details)): - self._buffered_calls.append( - ('addFailure', [test, err], {'details': details})) + if test.id() in self._fixup_expected_failures: + self._buffered_calls.append( + ('addExpectedFailure', [test, err], {'details': details})) + else: + self._buffered_calls.append( + ('addFailure', [test, err], {'details': details})) else: self._filtered() diff --git a/python/subunit/tests/test_subunit_filter.py b/python/subunit/tests/test_subunit_filter.py index cf6c2b6..855aa1e 100644 --- a/python/subunit/tests/test_subunit_filter.py +++ b/python/subunit/tests/test_subunit_filter.py @@ -88,6 +88,18 @@ xfail todo filtered_result.failures]) self.assertEqual(3, filtered_result.testsRun) + def test_fixup_expected_failures(self): + filtered_result = unittest.TestResult() + result_filter = TestResultFilter(filtered_result, + fixup_expected_failures=set(["failed"])) + self.run_tests(result_filter) + self.assertEqual(['failed', 'todo'], + [error[0].id() for error in filtered_result.expectedFailures]) + self.assertEqual([], + [failure[0].id() for failure in + filtered_result.failures]) + self.assertEqual(4, filtered_result.testsRun) + def test_exclude_failure(self): filtered_result = unittest.TestResult() result_filter = TestResultFilter(filtered_result, filter_failure=True) -- cgit v1.2.1 From 990cf93fb02250ccbd42153fc1f6b87b867d977e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 11 Apr 2011 15:56:05 +0200 Subject: Filter errors as well. --- python/subunit/test_results.py | 8 ++++++-- python/subunit/tests/test_subunit_filter.py | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) (limited to 'python') diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py index b3308ea..4e642ea 100644 --- a/python/subunit/test_results.py +++ b/python/subunit/test_results.py @@ -339,8 +339,12 @@ class TestResultFilter(TestResultDecorator): def addError(self, test, err=None, details=None): if (self.filter_predicate(test, 'error', err, details)): - self._buffered_calls.append( - ('addError', [test, err], {'details': details})) + if test.id() in self._fixup_expected_failures: + self._buffered_calls.append( + ('addExpectedFailure', [test, err], {'details': details})) + else: + self._buffered_calls.append( + ('addError', [test, err], {'details': details})) else: self._filtered() diff --git a/python/subunit/tests/test_subunit_filter.py b/python/subunit/tests/test_subunit_filter.py index 855aa1e..386c5a2 100644 --- a/python/subunit/tests/test_subunit_filter.py +++ b/python/subunit/tests/test_subunit_filter.py @@ -94,10 +94,18 @@ xfail todo fixup_expected_failures=set(["failed"])) self.run_tests(result_filter) self.assertEqual(['failed', 'todo'], - [error[0].id() for error in filtered_result.expectedFailures]) - self.assertEqual([], - [failure[0].id() for failure in - filtered_result.failures]) + [failure[0].id() for failure in filtered_result.expectedFailures]) + self.assertEqual([], filtered_result.failures) + self.assertEqual(4, filtered_result.testsRun) + + def test_fixup_expected_errors(self): + filtered_result = unittest.TestResult() + result_filter = TestResultFilter(filtered_result, + fixup_expected_failures=set(["error"])) + self.run_tests(result_filter) + self.assertEqual(['error', 'todo'], + [failure[0].id() for failure in filtered_result.expectedFailures]) + self.assertEqual([], filtered_result.errors) self.assertEqual(4, filtered_result.testsRun) def test_exclude_failure(self): -- cgit v1.2.1 From d3a4695b7a8678304001e6cf8dc68b64d2a7cde7 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 11 Apr 2011 16:38:56 +0200 Subject: Mark unexpected successes, too. --- python/subunit/test_results.py | 8 ++++++-- python/subunit/tests/test_subunit_filter.py | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'python') diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py index 4e642ea..a3ad928 100644 --- a/python/subunit/test_results.py +++ b/python/subunit/test_results.py @@ -368,8 +368,12 @@ class TestResultFilter(TestResultDecorator): def addSuccess(self, test, details=None): if (self.filter_predicate(test, 'success', None, details)): - self._buffered_calls.append( - ('addSuccess', [test], {'details': details})) + if test.id() in self._fixup_expected_failures: + self._buffered_calls.append( + ('addUnexpectedSuccess', [test], {'details': details})) + else: + self._buffered_calls.append( + ('addSuccess', [test], {'details': details})) else: self._filtered() diff --git a/python/subunit/tests/test_subunit_filter.py b/python/subunit/tests/test_subunit_filter.py index 386c5a2..f8db05b 100644 --- a/python/subunit/tests/test_subunit_filter.py +++ b/python/subunit/tests/test_subunit_filter.py @@ -108,6 +108,15 @@ xfail todo self.assertEqual([], filtered_result.errors) self.assertEqual(4, filtered_result.testsRun) + def test_fixup_unexpected_success(self): + filtered_result = unittest.TestResult() + result_filter = TestResultFilter(filtered_result, filter_success=False, + fixup_expected_failures=set(["passed"])) + self.run_tests(result_filter) + self.assertEqual(['passed'], + [passed.id() for passed in filtered_result.unexpectedSuccesses]) + self.assertEqual(5, filtered_result.testsRun) + def test_exclude_failure(self): filtered_result = unittest.TestResult() result_filter = TestResultFilter(filtered_result, filter_failure=True) -- cgit v1.2.1 From 2950580814e220313b862e13ea40f3ac8163601c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 25 Apr 2011 22:32:49 +0200 Subject: Remove TagCollapsingDecator test. --- python/subunit/tests/test_test_results.py | 5 ----- 1 file changed, 5 deletions(-) (limited to 'python') diff --git a/python/subunit/tests/test_test_results.py b/python/subunit/tests/test_test_results.py index 23b8b5e..94d2274 100644 --- a/python/subunit/tests/test_test_results.py +++ b/python/subunit/tests/test_test_results.py @@ -229,11 +229,6 @@ class TestTagCollapsingDecorator(TestCase): ('stopTest', test)], result._events) - def test_tags_collapsed_tests_run(self): - result = ExtendedTestResult() - tag_collapser = subunit.test_results.TagCollapsingDecorator(result) - tag_collapser.testsRun += 1 - class TestTimeCollapsingDecorator(TestCase): -- cgit v1.2.1 From 137f492db934863d0352e46aa00486b8f8d7c806 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 25 Apr 2011 22:44:33 +0200 Subject: Move read_test_filter to python/subunit. --- python/subunit/__init__.py | 13 +++++++++++++ python/subunit/tests/test_details.py | 1 - 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'python') diff --git a/python/subunit/__init__.py b/python/subunit/__init__.py index 9dc849a..368d3b2 100644 --- a/python/subunit/__init__.py +++ b/python/subunit/__init__.py @@ -1132,6 +1132,19 @@ def get_default_formatter(): return sys.stdout +def read_test_list(path): + """Read a list of test ids from a file on disk. + + :param path: Path to the file + :return: Sequence of test ids + """ + f = open(path, 'rb') + try: + return [l.rstrip("\n") for l in f.readlines()] + finally: + f.close() + + def _make_stream_binary(stream): """Ensure that a stream will be binary safe. See _make_binary_on_windows.""" if getattr(stream, 'fileno', None) is not None: diff --git a/python/subunit/tests/test_details.py b/python/subunit/tests/test_details.py index 41c3212..2fd1a66 100644 --- a/python/subunit/tests/test_details.py +++ b/python/subunit/tests/test_details.py @@ -14,7 +14,6 @@ # limitations under that license. # -from cStringIO import StringIO import unittest import subunit.tests -- cgit v1.2.1 From 7ce9deb0fe988b194c577b778b722f079a272d74 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 25 Apr 2011 23:08:53 +0200 Subject: Split out method that checks for expected failures into a separate method. --- python/subunit/test_results.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'python') diff --git a/python/subunit/test_results.py b/python/subunit/test_results.py index a3ad928..fe5b8d1 100644 --- a/python/subunit/test_results.py +++ b/python/subunit/test_results.py @@ -339,7 +339,7 @@ class TestResultFilter(TestResultDecorator): def addError(self, test, err=None, details=None): if (self.filter_predicate(test, 'error', err, details)): - if test.id() in self._fixup_expected_failures: + if self._failure_expected(test): self._buffered_calls.append( ('addExpectedFailure', [test, err], {'details': details})) else: @@ -350,7 +350,7 @@ class TestResultFilter(TestResultDecorator): def addFailure(self, test, err=None, details=None): if (self.filter_predicate(test, 'failure', err, details)): - if test.id() in self._fixup_expected_failures: + if self._failure_expected(test): self._buffered_calls.append( ('addExpectedFailure', [test, err], {'details': details})) else: @@ -368,7 +368,7 @@ class TestResultFilter(TestResultDecorator): def addSuccess(self, test, details=None): if (self.filter_predicate(test, 'success', None, details)): - if test.id() in self._fixup_expected_failures: + if self._failure_expected(test): self._buffered_calls.append( ('addUnexpectedSuccess', [test], {'details': details})) else: @@ -391,6 +391,9 @@ class TestResultFilter(TestResultDecorator): def _filtered(self): self._current_test_filtered = True + def _failure_expected(self, test): + return (test.id() in self._fixup_expected_failures) + def startTest(self, test): """Start a test. -- cgit v1.2.1