summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZachary Ware <zachary.ware@gmail.com>2014-02-18 14:41:21 (GMT)
committerZachary Ware <zachary.ware@gmail.com>2014-02-18 14:41:21 (GMT)
commitc36e504c53bb20ee6880b78d77aa1378519c3743 (patch)
treec035131f7e47fb4dc0f68a42b339be42577a0b8c
parent8b21d91e35fae15ad120a952e84c1a38959b54e5 (diff)
parentcefe6b34dee64de176e7c871df6576634ecdc0a9 (diff)
downloadcpython-c36e504c53bb20ee6880b78d77aa1378519c3743.zip
cpython-c36e504c53bb20ee6880b78d77aa1378519c3743.tar.gz
cpython-c36e504c53bb20ee6880b78d77aa1378519c3743.tar.bz2
Issue #20510: Merge with 3.3.
-rw-r--r--Lib/test/test_sys.py81
-rw-r--r--Misc/NEWS4
2 files changed, 32 insertions, 53 deletions
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index e25f296..3bc1243 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -1,4 +1,5 @@
import unittest, test.support
+from test.script_helper import assert_python_ok, assert_python_failure
import sys, io, os
import struct
import subprocess
@@ -89,74 +90,50 @@ class SysModuleTest(unittest.TestCase):
# Python/pythonrun.c::PyErr_PrintEx() is tricky.
def test_exit(self):
-
+ # call with two arguments
self.assertRaises(TypeError, sys.exit, 42, 42)
# call without argument
- try:
- sys.exit(0)
- except SystemExit as exc:
- self.assertEqual(exc.code, 0)
- except:
- self.fail("wrong exception")
- else:
- self.fail("no exception")
+ rc, out, err = assert_python_ok('-c', 'import sys; sys.exit()')
+ self.assertEqual(rc, 0)
+ self.assertEqual(out, b'')
+ self.assertEqual(err, b'')
- # call with tuple argument with one entry
- # entry will be unpacked
- try:
+ # call with integer argument
+ with self.assertRaises(SystemExit) as cm:
sys.exit(42)
- except SystemExit as exc:
- self.assertEqual(exc.code, 42)
- except:
- self.fail("wrong exception")
- else:
- self.fail("no exception")
+ self.assertEqual(cm.exception.code, 42)
- # call with integer argument
- try:
+ # call with tuple argument with one entry
+ # entry will be unpacked
+ with self.assertRaises(SystemExit) as cm:
sys.exit((42,))
- except SystemExit as exc:
- self.assertEqual(exc.code, 42)
- except:
- self.fail("wrong exception")
- else:
- self.fail("no exception")
+ self.assertEqual(cm.exception.code, 42)
# call with string argument
- try:
+ with self.assertRaises(SystemExit) as cm:
sys.exit("exit")
- except SystemExit as exc:
- self.assertEqual(exc.code, "exit")
- except:
- self.fail("wrong exception")
- else:
- self.fail("no exception")
+ self.assertEqual(cm.exception.code, "exit")
# call with tuple argument with two entries
- try:
+ with self.assertRaises(SystemExit) as cm:
sys.exit((17, 23))
- except SystemExit as exc:
- self.assertEqual(exc.code, (17, 23))
- except:
- self.fail("wrong exception")
- else:
- self.fail("no exception")
+ self.assertEqual(cm.exception.code, (17, 23))
# test that the exit machinery handles SystemExits properly
- rc = subprocess.call([sys.executable, "-c",
- "raise SystemExit(47)"])
+ rc, out, err = assert_python_failure('-c', 'raise SystemExit(47)')
self.assertEqual(rc, 47)
+ self.assertEqual(out, b'')
+ self.assertEqual(err, b'')
- def check_exit_message(code, expected, env=None):
- process = subprocess.Popen([sys.executable, "-c", code],
- stderr=subprocess.PIPE, env=env)
- stdout, stderr = process.communicate()
- self.assertEqual(process.returncode, 1)
- self.assertTrue(stderr.startswith(expected),
- "%s doesn't start with %s" % (ascii(stderr), ascii(expected)))
+ def check_exit_message(code, expected, **env_vars):
+ rc, out, err = assert_python_failure('-c', code, **env_vars)
+ self.assertEqual(rc, 1)
+ self.assertEqual(out, b'')
+ self.assertTrue(err.startswith(expected),
+ "%s doesn't start with %s" % (ascii(err), ascii(expected)))
- # test that stderr buffer if flushed before the exit message is written
+ # test that stderr buffer is flushed before the exit message is written
# into stderr
check_exit_message(
r'import sys; sys.stderr.write("unflushed,"); sys.exit("message")',
@@ -170,11 +147,9 @@ class SysModuleTest(unittest.TestCase):
# test that the unicode message is encoded to the stderr encoding
# instead of the default encoding (utf8)
- env = os.environ.copy()
- env['PYTHONIOENCODING'] = 'latin-1'
check_exit_message(
r'import sys; sys.exit("h\xe9")',
- b"h\xe9", env=env)
+ b"h\xe9", PYTHONIOENCODING='latin-1')
def test_getdefaultencoding(self):
self.assertRaises(TypeError, sys.getdefaultencoding, 42)
diff --git a/Misc/NEWS b/Misc/NEWS
index 4d23af8..7dbbd84 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -51,6 +51,10 @@ Library
Tests
-----
+- Issue #20510: Rewrote test_exit in test_sys to match existing comments,
+ use modern unittest features, and use helpers from test.script_helper
+ instead of using subprocess directly. Patch by Gareth Rees.
+
- Issue #20605: Make test_socket getaddrinfo OS X segfault test more robust.