diff options
Diffstat (limited to 'Lib/test/test_fileio.py')
-rw-r--r-- | Lib/test/test_fileio.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py index 21d231f..930b654 100644 --- a/Lib/test/test_fileio.py +++ b/Lib/test/test_fileio.py @@ -12,6 +12,7 @@ from functools import wraps from test.test_support import TESTFN, check_warnings, run_unittest, make_bad_fd from test.test_support import py3k_bytes as bytes +from test.script_helper import run_python from _io import FileIO as _FileIO @@ -397,6 +398,25 @@ class OtherFileTests(unittest.TestCase): self.assertRaises(ValueError, _FileIO, "/some/invalid/name", "rt") self.assertEqual(w.warnings, []) + def test_surrogates(self): + # Issue #8438: try to open a filename containing surrogates. + # It should either fail because the file doesn't exist or the filename + # can't be represented using the filesystem encoding, but not because + # of a LookupError for the error handler "surrogateescape". + filename = u'\udc80.txt' + try: + with _FileIO(filename): + pass + except (UnicodeEncodeError, IOError): + pass + # Spawn a separate Python process with a different "file system + # default encoding", to exercise this further. + env = dict(os.environ) + env[b'LC_CTYPE'] = b'C' + _, out = run_python('-c', 'import _io; _io.FileIO(%r)' % filename, env=env) + if ('UnicodeEncodeError' not in out and + 'IOError: [Errno 2] No such file or directory' not in out): + self.fail('Bad output: %r' % out) def test_main(): # Historically, these tests have been sloppy about removing TESTFN. |