Skip to content

Commit 3882317

Browse files
EliseevEgorsunmy2019sobolevn
authored andcommitted
gh-106584: Fix exit code for unittest in Python 3.12 (#106588)
Co-authored-by: sunmy2019 <59365878+sunmy2019@users.noreply.github.com> Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
1 parent 1f67eed commit 3882317

File tree

5 files changed

+18
-12
lines changed

5 files changed

+18
-12
lines changed

Lib/test/test_unittest/test_discovery.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ def _get_module_from_name(name):
571571
result = unittest.TestResult()
572572
suite.run(result)
573573
self.assertEqual(len(result.skipped), 1)
574-
self.assertEqual(result.testsRun, 1)
574+
self.assertEqual(result.testsRun, 0)
575575
self.assertEqual(import_calls, ['my_package'])
576576

577577
# Check picklability

Lib/test/test_unittest/test_skipping.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,16 @@ def test_dont_skip(self): pass
103103
result = LoggingResult(events)
104104
self.assertIs(suite.run(result), result)
105105
self.assertEqual(len(result.skipped), 1)
106-
expected = ['startTest', 'addSkip', 'stopTest',
107-
'startTest', 'addSuccess', 'stopTest']
106+
expected = ['addSkip', 'stopTest', 'startTest',
107+
'addSuccess', 'stopTest']
108108
self.assertEqual(events, expected)
109-
self.assertEqual(result.testsRun, 2)
109+
self.assertEqual(result.testsRun, 1)
110110
self.assertEqual(result.skipped, [(test_do_skip, "testing")])
111111
self.assertTrue(result.wasSuccessful())
112112

113113
events = []
114114
result = test_do_skip.run()
115-
self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
115+
self.assertEqual(events, ['startTestRun', 'addSkip',
116116
'stopTest', 'stopTestRun'])
117117
self.assertEqual(result.skipped, [(test_do_skip, "testing")])
118118

@@ -135,13 +135,13 @@ def test_1(self):
135135
test = Foo("test_1")
136136
suite = unittest.TestSuite([test])
137137
self.assertIs(suite.run(result), result)
138-
self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
138+
self.assertEqual(events, ['addSkip', 'stopTest'])
139139
self.assertEqual(result.skipped, [(test, "testing")])
140140
self.assertEqual(record, [])
141141

142142
events = []
143143
result = test.run()
144-
self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
144+
self.assertEqual(events, ['startTestRun', 'addSkip',
145145
'stopTest', 'stopTestRun'])
146146
self.assertEqual(result.skipped, [(test, "testing")])
147147
self.assertEqual(record, [])

Lib/unittest/case.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,6 @@ def run(self, result=None):
606606
else:
607607
stopTestRun = None
608608

609-
result.startTest(self)
610609
try:
611610
testMethod = getattr(self, self._testMethodName)
612611
if (getattr(self.__class__, "__unittest_skip__", False) or
@@ -617,6 +616,9 @@ def run(self, result=None):
617616
_addSkip(result, self, skip_why)
618617
return result
619618

619+
# Increase the number of tests only if it hasn't been skipped
620+
result.startTest(self)
621+
620622
expecting_failure = (
621623
getattr(self, "__unittest_expecting_failure__", False) or
622624
getattr(testMethod, "__unittest_expecting_failure__", False)

Lib/unittest/result.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,12 @@ def _restoreStdout(self):
9797

9898
sys.stdout = self._original_stdout
9999
sys.stderr = self._original_stderr
100-
self._stdout_buffer.seek(0)
101-
self._stdout_buffer.truncate()
102-
self._stderr_buffer.seek(0)
103-
self._stderr_buffer.truncate()
100+
if self._stdout_buffer is not None:
101+
self._stdout_buffer.seek(0)
102+
self._stdout_buffer.truncate()
103+
if self._stderr_buffer is not None:
104+
self._stderr_buffer.seek(0)
105+
self._stderr_buffer.truncate()
104106

105107
def stopTestRun(self):
106108
"""Called once after all tests are executed.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix exit code for ``unittest`` if all tests are skipped.
2+
Patch by Egor Eliseev.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy