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.
This commit is contained in:
Victor Stinner 2014-02-12 18:27:55 +01:00
parent f86b433823
commit 8ebe5324a0

View File

@ -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())