(self)
| 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) |
nothing calls this directly
no test coverage detected