[3.12] gh-106584: Fix exit code for unittest in Python 3.12 (GH-106588) (#109725)

gh-106584: Fix exit code for unittest in Python 3.12 (GH-106588)
(cherry picked from commit 8fc071345b)

Co-authored-by: EliseevEgor <egor.eliseev@jetbrains.com>
Co-authored-by: sunmy2019 <59365878+sunmy2019@users.noreply.github.com>
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
Miss Islington (bot) 2023-10-02 08:18:41 -07:00 committed by GitHub
parent 84ef145d85
commit 551aa6ab94
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 18 additions and 12 deletions

View file

@ -571,7 +571,7 @@ class TestDiscovery(unittest.TestCase):
result = unittest.TestResult() result = unittest.TestResult()
suite.run(result) suite.run(result)
self.assertEqual(len(result.skipped), 1) self.assertEqual(len(result.skipped), 1)
self.assertEqual(result.testsRun, 1) self.assertEqual(result.testsRun, 0)
self.assertEqual(import_calls, ['my_package']) self.assertEqual(import_calls, ['my_package'])
# Check picklability # Check picklability

View file

@ -103,16 +103,16 @@ class Test_TestSkipping(unittest.TestCase):
result = LoggingResult(events) result = LoggingResult(events)
self.assertIs(suite.run(result), result) self.assertIs(suite.run(result), result)
self.assertEqual(len(result.skipped), 1) self.assertEqual(len(result.skipped), 1)
expected = ['startTest', 'addSkip', 'stopTest', expected = ['addSkip', 'stopTest', 'startTest',
'startTest', 'addSuccess', 'stopTest'] 'addSuccess', 'stopTest']
self.assertEqual(events, expected) self.assertEqual(events, expected)
self.assertEqual(result.testsRun, 2) self.assertEqual(result.testsRun, 1)
self.assertEqual(result.skipped, [(test_do_skip, "testing")]) self.assertEqual(result.skipped, [(test_do_skip, "testing")])
self.assertTrue(result.wasSuccessful()) self.assertTrue(result.wasSuccessful())
events = [] events = []
result = test_do_skip.run() result = test_do_skip.run()
self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip', self.assertEqual(events, ['startTestRun', 'addSkip',
'stopTest', 'stopTestRun']) 'stopTest', 'stopTestRun'])
self.assertEqual(result.skipped, [(test_do_skip, "testing")]) self.assertEqual(result.skipped, [(test_do_skip, "testing")])
@ -135,13 +135,13 @@ class Test_TestSkipping(unittest.TestCase):
test = Foo("test_1") test = Foo("test_1")
suite = unittest.TestSuite([test]) suite = unittest.TestSuite([test])
self.assertIs(suite.run(result), result) self.assertIs(suite.run(result), result)
self.assertEqual(events, ['startTest', 'addSkip', 'stopTest']) self.assertEqual(events, ['addSkip', 'stopTest'])
self.assertEqual(result.skipped, [(test, "testing")]) self.assertEqual(result.skipped, [(test, "testing")])
self.assertEqual(record, []) self.assertEqual(record, [])
events = [] events = []
result = test.run() result = test.run()
self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip', self.assertEqual(events, ['startTestRun', 'addSkip',
'stopTest', 'stopTestRun']) 'stopTest', 'stopTestRun'])
self.assertEqual(result.skipped, [(test, "testing")]) self.assertEqual(result.skipped, [(test, "testing")])
self.assertEqual(record, []) self.assertEqual(record, [])

View file

@ -606,7 +606,6 @@ class TestCase(object):
else: else:
stopTestRun = None stopTestRun = None
result.startTest(self)
try: try:
testMethod = getattr(self, self._testMethodName) testMethod = getattr(self, self._testMethodName)
if (getattr(self.__class__, "__unittest_skip__", False) or if (getattr(self.__class__, "__unittest_skip__", False) or
@ -617,6 +616,9 @@ class TestCase(object):
_addSkip(result, self, skip_why) _addSkip(result, self, skip_why)
return result return result
# Increase the number of tests only if it hasn't been skipped
result.startTest(self)
expecting_failure = ( expecting_failure = (
getattr(self, "__unittest_expecting_failure__", False) or getattr(self, "__unittest_expecting_failure__", False) or
getattr(testMethod, "__unittest_expecting_failure__", False) getattr(testMethod, "__unittest_expecting_failure__", False)

View file

@ -97,10 +97,12 @@ class TestResult(object):
sys.stdout = self._original_stdout sys.stdout = self._original_stdout
sys.stderr = self._original_stderr sys.stderr = self._original_stderr
self._stdout_buffer.seek(0) if self._stdout_buffer is not None:
self._stdout_buffer.truncate() self._stdout_buffer.seek(0)
self._stderr_buffer.seek(0) self._stdout_buffer.truncate()
self._stderr_buffer.truncate() if self._stderr_buffer is not None:
self._stderr_buffer.seek(0)
self._stderr_buffer.truncate()
def stopTestRun(self): def stopTestRun(self):
"""Called once after all tests are executed. """Called once after all tests are executed.

View file

@ -0,0 +1,2 @@
Fix exit code for ``unittest`` if all tests are skipped.
Patch by Egor Eliseev.