diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-02-12 17:27:55 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-02-12 17:27:55 (GMT) |
commit | 8ebe5324a072b871646ce67bb44d675acdff05fb (patch) | |
tree | 7bc02bd83e4b10c1a680b703d05d19b9cbb5b3a1 /Lib/test/test_builtin.py | |
parent | f86b43382311370d099b1ba9995093a2e0252605 (diff) | |
download | cpython-8ebe5324a072b871646ce67bb44d675acdff05fb.zip cpython-8ebe5324a072b871646ce67bb44d675acdff05fb.tar.gz cpython-8ebe5324a072b871646ce67bb44d675acdff05fb.tar.bz2 |
Issue #20599: Force ASCII encoding for stdout in test_cleanup() of test_builtin
On Windows, the codec of sys.stdout is implemented in Python. At exit, the
codec may be unloaded before the destructor tries to write something to
sys.stdout.
Diffstat (limited to 'Lib/test/test_builtin.py')
-rw-r--r-- | Lib/test/test_builtin.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 8a307b9..5c14de3 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -1604,10 +1604,10 @@ class ShutdownTest(unittest.TestCase): class C: def __del__(self): - print("before", flush=True) + print("before") # Check that builtins still exist len(()) - print("after", flush=True) + print("after") c = C() # Make this module survive until builtins and sys are cleaned @@ -1617,7 +1617,15 @@ class ShutdownTest(unittest.TestCase): # through a GC phase. here = sys.modules[__name__] """ - rc, out, err = assert_python_ok("-c", code) + # Issue #20599: Force ASCII encoding to get a codec implemented in C, + # otherwise the codec may be unloaded before C.__del__() is called, and + # so print("before") fails because the codec cannot be used to encode + # "before" to sys.stdout.encoding. For example, on Windows, + # sys.stdout.encoding is the OEM code page and these code pages are + # implemented in Python + rc, out, err = assert_python_ok("-c", code, + PYTHONIOENCODING="ascii", + __cleanenv=True) self.assertEqual(["before", "after"], out.decode().splitlines()) |