diff options
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_sys.py | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index ecbc9db..2dd2746 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -86,6 +86,8 @@ class SysModuleTest(unittest.TestCase): # Python/pythonrun.c::PyErr_PrintEx() is tricky. def test_exit(self): + import subprocess + self.assertRaises(TypeError, sys.exit, 42, 42) # call without argument @@ -140,20 +142,28 @@ class SysModuleTest(unittest.TestCase): self.fail("no exception") # test that the exit machinery handles SystemExits properly - import subprocess rc = subprocess.call([sys.executable, "-c", "raise SystemExit(47)"]) self.assertEqual(rc, 47) + def check_exit_message(code, expected): + process = subprocess.Popen([sys.executable, "-c", code], + stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + self.assertEqual(process.returncode, 1) + self.assertTrue(stderr.startswith(expected), stderr) + + # test that stderr buffer if flushed before the exit message is written + # into stderr + check_exit_message( + r'import sys; sys.stderr.write("unflushed,"); sys.exit("message")', + b"unflushed,message") + # test that the exit message is written with backslashreplace error # handler to stderr - import subprocess - code = r'import sys; sys.exit("surrogates:\uDCFF")' - process = subprocess.Popen([sys.executable, "-c", code], - stderr=subprocess.PIPE) - stdout, stderr = process.communicate() - self.assertEqual(process.returncode, 1) - self.assertTrue(stderr.startswith(b"surrogates:\\udcff"), stderr) + check_exit_message( + r'import sys; sys.exit("surrogates:\uDCFF")', + b"surrogates:\\udcff") def test_getdefaultencoding(self): self.assertRaises(TypeError, sys.getdefaultencoding, 42) |