Content-Length: 5889 | pFad | http://github.com/python/cpython/pull/136487.patch

thub.com From 854c0f01b04f3867fd400836c2a0ed8a62f963bb Mon Sep 17 00:00:00 2001 From: Takuya Ueshin Date: Wed, 9 Jul 2025 14:31:39 -0700 Subject: [PATCH 1/3] Fix unittest to return exit code 5 when setUpClass raises an exception. --- Lib/test/test_unittest/test_program.py | 20 ++++++++++++++++++++ Lib/test/test_unittest/test_setups.py | 19 +++++++++++++++++++ Lib/unittest/main.py | 8 ++++---- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_unittest/test_program.py b/Lib/test/test_unittest/test_program.py index 6092ed292d8f60..6d1cc7e0008505 100644 --- a/Lib/test/test_unittest/test_program.py +++ b/Lib/test/test_unittest/test_program.py @@ -75,6 +75,14 @@ def testUnexpectedSuccess(self): class Empty(unittest.TestCase): pass + class SetUpClassFailure(unittest.TestCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + raise Exception + def testPass(self): + pass + class TestLoader(unittest.TestLoader): """Test loader that returns a suite containing the supplied testcase.""" @@ -191,6 +199,18 @@ def test_ExitEmptySuite(self): out = stream.getvalue() self.assertIn('\nNO TESTS RAN\n', out) + def test_ExitSetUpClassFailureSuite(self): + stream = BufferedWriter() + with self.assertRaises(SystemExit) as cm: + unittest.main( + argv=["setup_class_failure"], + testRunner=unittest.TextTestRunner(stream=stream), + testLoader=self.TestLoader(self.SetUpClassFailure)) + self.assertEqual(cm.exception.code, 1) + out = stream.getvalue() + self.assertIn('\nERROR: setUpClass (test.test_unittest.test_program.' + 'Test_TestProgram.SetUpClassFailure)\n', out) + class InitialisableProgram(unittest.TestProgram): exit = False diff --git a/Lib/test/test_unittest/test_setups.py b/Lib/test/test_unittest/test_setups.py index 2df703ed9348a9..e59435897172b6 100644 --- a/Lib/test/test_unittest/test_setups.py +++ b/Lib/test/test_unittest/test_setups.py @@ -47,6 +47,25 @@ def test_two(self): self.assertEqual(result.testsRun, 2) self.assertEqual(len(result.errors), 0) + def test_setup_class_raising_error(self): + class Test(unittest.TestCase): + setUpCalled = 0 + @classmethod + def setUpClass(cls): + Test.setUpCalled += 1 + unittest.TestCase.setUpClass() + raise Exception("error") + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test) + + self.assertEqual(Test.setUpCalled, 1) + self.assertEqual(result.testsRun, 0) + self.assertEqual(len(result.errors), 1) + def test_teardown_class(self): class Test(unittest.TestCase): tearDownCalled = 0 diff --git a/Lib/unittest/main.py b/Lib/unittest/main.py index 6fd949581f3146..be99d93c78cca6 100644 --- a/Lib/unittest/main.py +++ b/Lib/unittest/main.py @@ -269,12 +269,12 @@ def runTests(self): testRunner = self.testRunner self.result = testRunner.run(self.test) if self.exit: - if self.result.testsRun == 0 and len(self.result.skipped) == 0: + if not self.result.wasSuccessful(): + sys.exit(1) + elif self.result.testsRun == 0 and len(self.result.skipped) == 0: sys.exit(_NO_TESTS_EXITCODE) - elif self.result.wasSuccessful(): - sys.exit(0) else: - sys.exit(1) + sys.exit(0) main = TestProgram From 950f7a0537d0b99d6ff658b5e6eb139e96b3f381 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 21:45:52 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst diff --git a/Misc/NEWS.d/next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst b/Misc/NEWS.d/next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst new file mode 100644 index 00000000000000..84542652128804 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2025-07-09-21-45-51.gh-issue-136442.jlbklP.rst @@ -0,0 +1 @@ +unittest runner: Don't exit 5 if setUpClass raises an exception From 7fb4075fac7a1a0890ca5c29f7b8d78ba80ae259 Mon Sep 17 00:00:00 2001 From: Takuya Ueshin Date: Wed, 9 Jul 2025 19:32:51 -0700 Subject: [PATCH 3/3] Fix. --- Lib/test/test_unittest/test_setups.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_unittest/test_setups.py b/Lib/test/test_unittest/test_setups.py index e59435897172b6..bb3b67e5b62acc 100644 --- a/Lib/test/test_unittest/test_setups.py +++ b/Lib/test/test_unittest/test_setups.py @@ -54,7 +54,7 @@ class Test(unittest.TestCase): def setUpClass(cls): Test.setUpCalled += 1 unittest.TestCase.setUpClass() - raise Exception("error") + raise Exception def test_one(self): pass def test_two(self): @@ -65,6 +65,7 @@ def test_two(self): self.assertEqual(Test.setUpCalled, 1) self.assertEqual(result.testsRun, 0) self.assertEqual(len(result.errors), 1) + self.assertEqual(len(result.skipped), 0) def test_teardown_class(self): class Test(unittest.TestCase):








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/python/cpython/pull/136487.patch

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy