summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_regrtest.py
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2023-04-07 10:43:41 (GMT)
committerGitHub <noreply@github.com>2023-04-07 10:43:41 (GMT)
commit995386071f96e4cfebfa027a71ca9134e4651d2a (patch)
treedf495e63b93750c61251fa28cd71e6d1546ffb8c /Lib/test/test_regrtest.py
parent059bb04245a8b3490f93dfd72522a431a113eef1 (diff)
downloadcpython-995386071f96e4cfebfa027a71ca9134e4651d2a.zip
cpython-995386071f96e4cfebfa027a71ca9134e4651d2a.tar.gz
cpython-995386071f96e4cfebfa027a71ca9134e4651d2a.tar.bz2
bpo-46523: fix tests rerun when `setUp[Class|Module]` fails (#30895)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com> Co-authored-by: Ɓukasz Langa <lukasz@langa.pl>
Diffstat (limited to 'Lib/test/test_regrtest.py')
-rw-r--r--Lib/test/test_regrtest.py154
1 files changed, 154 insertions, 0 deletions
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
index baae4ef..ac49fba 100644
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -1120,6 +1120,160 @@ class ArgsTestCase(BaseTestCase):
self.check_executed_tests(output, [testname],
rerun={testname: "test_fail_once"})
+ def test_rerun_setup_class_hook_failure(self):
+ # FAILURE then FAILURE
+ code = textwrap.dedent("""
+ import unittest
+
+ class ExampleTests(unittest.TestCase):
+ @classmethod
+ def setUpClass(self):
+ raise RuntimeError('Fail')
+
+ def test_success(self):
+ return
+ """)
+ testname = self.create_test(code=code)
+
+ output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST)
+ self.check_executed_tests(output, testname,
+ failed=[testname],
+ rerun={testname: "ExampleTests"})
+
+ def test_rerun_teardown_class_hook_failure(self):
+ # FAILURE then FAILURE
+ code = textwrap.dedent("""
+ import unittest
+
+ class ExampleTests(unittest.TestCase):
+ @classmethod
+ def tearDownClass(self):
+ raise RuntimeError('Fail')
+
+ def test_success(self):
+ return
+ """)
+ testname = self.create_test(code=code)
+
+ output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST)
+ self.check_executed_tests(output, testname,
+ failed=[testname],
+ rerun={testname: "ExampleTests"})
+
+ def test_rerun_setup_module_hook_failure(self):
+ # FAILURE then FAILURE
+ code = textwrap.dedent("""
+ import unittest
+
+ def setUpModule():
+ raise RuntimeError('Fail')
+
+ class ExampleTests(unittest.TestCase):
+ def test_success(self):
+ return
+ """)
+ testname = self.create_test(code=code)
+
+ output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST)
+ self.check_executed_tests(output, testname,
+ failed=[testname],
+ rerun={testname: testname})
+
+ def test_rerun_teardown_module_hook_failure(self):
+ # FAILURE then FAILURE
+ code = textwrap.dedent("""
+ import unittest
+
+ def tearDownModule():
+ raise RuntimeError('Fail')
+
+ class ExampleTests(unittest.TestCase):
+ def test_success(self):
+ return
+ """)
+ testname = self.create_test(code=code)
+
+ output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST)
+ self.check_executed_tests(output, testname,
+ failed=[testname],
+ rerun={testname: testname})
+
+ def test_rerun_setup_hook_failure(self):
+ # FAILURE then FAILURE
+ code = textwrap.dedent("""
+ import unittest
+
+ class ExampleTests(unittest.TestCase):
+ def setUp(self):
+ raise RuntimeError('Fail')
+
+ def test_success(self):
+ return
+ """)
+ testname = self.create_test(code=code)
+
+ output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST)
+ self.check_executed_tests(output, testname,
+ failed=[testname],
+ rerun={testname: "test_success"})
+
+ def test_rerun_teardown_hook_failure(self):
+ # FAILURE then FAILURE
+ code = textwrap.dedent("""
+ import unittest
+
+ class ExampleTests(unittest.TestCase):
+ def tearDown(self):
+ raise RuntimeError('Fail')
+
+ def test_success(self):
+ return
+ """)
+ testname = self.create_test(code=code)
+
+ output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST)
+ self.check_executed_tests(output, testname,
+ failed=[testname],
+ rerun={testname: "test_success"})
+
+ def test_rerun_async_setup_hook_failure(self):
+ # FAILURE then FAILURE
+ code = textwrap.dedent("""
+ import unittest
+
+ class ExampleTests(unittest.IsolatedAsyncioTestCase):
+ async def asyncSetUp(self):
+ raise RuntimeError('Fail')
+
+ async def test_success(self):
+ return
+ """)
+ testname = self.create_test(code=code)
+
+ output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST)
+ self.check_executed_tests(output, testname,
+ failed=[testname],
+ rerun={testname: "test_success"})
+
+ def test_rerun_async_teardown_hook_failure(self):
+ # FAILURE then FAILURE
+ code = textwrap.dedent("""
+ import unittest
+
+ class ExampleTests(unittest.IsolatedAsyncioTestCase):
+ async def asyncTearDown(self):
+ raise RuntimeError('Fail')
+
+ async def test_success(self):
+ return
+ """)
+ testname = self.create_test(code=code)
+
+ output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST)
+ self.check_executed_tests(output, testname,
+ failed=[testname],
+ rerun={testname: "test_success"})
+
def test_no_tests_ran(self):
code = textwrap.dedent("""
import unittest