MCPcopy Index your code
hub / github.com/python/cpython / test_exit

Method test_exit

Lib/test/test_sys.py:212–289  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

210 test.support.reap_children()
211
212 def test_exit(self):
213 # call with two arguments
214 self.assertRaises(TypeError, sys.exit, 42, 42)
215
216 # call without argument
217 with self.assertRaises(SystemExit) as cm:
218 sys.exit()
219 self.assertIsNone(cm.exception.code)
220
221 rc, out, err = assert_python_ok('-c', 'import sys; sys.exit()')
222 self.assertEqual(rc, 0)
223 self.assertEqual(out, b'')
224 self.assertEqual(err, b'')
225
226 # gh-125842: Windows uses 32-bit unsigned integers for exit codes
227 # so a -1 exit code is sometimes interpreted as 0xffff_ffff.
228 rc, out, err = assert_python_failure('-c', 'import sys; sys.exit(0xffff_ffff)')
229 self.assertIn(rc, (-1, 0xff, 0xffff_ffff))
230 self.assertEqual(out, b'')
231 self.assertEqual(err, b'')
232
233 # Overflow results in a -1 exit code, which may be converted to 0xff
234 # or 0xffff_ffff.
235 rc, out, err = assert_python_failure('-c', 'import sys; sys.exit(2**128)')
236 self.assertIn(rc, (-1, 0xff, 0xffff_ffff))
237 self.assertEqual(out, b'')
238 self.assertEqual(err, b'')
239
240 # call with integer argument
241 with self.assertRaises(SystemExit) as cm:
242 sys.exit(42)
243 self.assertEqual(cm.exception.code, 42)
244
245 # call with tuple argument with one entry
246 # entry will be unpacked
247 with self.assertRaises(SystemExit) as cm:
248 sys.exit((42,))
249 self.assertEqual(cm.exception.code, 42)
250
251 # call with string argument
252 with self.assertRaises(SystemExit) as cm:
253 sys.exit("exit")
254 self.assertEqual(cm.exception.code, "exit")
255
256 # call with tuple argument with two entries
257 with self.assertRaises(SystemExit) as cm:
258 sys.exit((17, 23))
259 self.assertEqual(cm.exception.code, (17, 23))
260
261 # test that the exit machinery handles SystemExits properly
262 rc, out, err = assert_python_failure('-c', 'raise SystemExit(47)')
263 self.assertEqual(rc, 47)
264 self.assertEqual(out, b'')
265 self.assertEqual(err, b'')
266
267 def check_exit_message(code, expected, **env_vars):
268 rc, out, err = assert_python_failure('-c', code, **env_vars)
269 self.assertEqual(rc, 1)

Callers

nothing calls this directly

Calls 7

assert_python_okFunction · 0.90
assert_python_failureFunction · 0.90
assertIsNoneMethod · 0.80
assertInMethod · 0.80
assertRaisesMethod · 0.45
exitMethod · 0.45
assertEqualMethod · 0.45

Tested by

no test coverage detected