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