mirror of
https://github.com/python/cpython.git
synced 2025-08-09 11:29:45 +00:00
[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:
parent
84ef145d85
commit
551aa6ab94
5 changed files with 18 additions and 12 deletions
|
@ -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
|
||||||
|
|
|
@ -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, [])
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix exit code for ``unittest`` if all tests are skipped.
|
||||||
|
Patch by Egor Eliseev.
|
Loading…
Add table
Add a link
Reference in a new issue