diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2012-11-06 22:33:46 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2012-11-06 22:33:46 (GMT) |
commit | 8f049e5b5b360900a5f4d429040c8bfdc89d2fc6 (patch) | |
tree | 12d445a7d856bf9c745cb9f7a4e5c337d71dc067 | |
parent | 8b219b2936d767bf6c6c17618db3a7b22fc2e865 (diff) | |
download | cpython-8f049e5b5b360900a5f4d429040c8bfdc89d2fc6.zip cpython-8f049e5b5b360900a5f4d429040c8bfdc89d2fc6.tar.gz cpython-8f049e5b5b360900a5f4d429040c8bfdc89d2fc6.tar.bz2 |
Issue #16414: Fix support.TESTFN_UNDECODABLE and test_genericpath.test_nonascii_abspath()
* support.TESTFN_UNDECODABLE was decodable if the filesystem encoding was
cp932
* test_genericpath.test_nonascii_abspath() didn't work on Windows if the
path was not decodable (ex: with cp932)
-rw-r--r-- | Lib/test/support.py | 6 | ||||
-rw-r--r-- | Lib/test/test_genericpath.py | 27 |
2 files changed, 24 insertions, 9 deletions
diff --git a/Lib/test/support.py b/Lib/test/support.py index 4e946ab..801ecf2 100644 --- a/Lib/test/support.py +++ b/Lib/test/support.py @@ -677,7 +677,11 @@ elif sys.platform != 'darwin': # decoded from the filesystem encoding (in strict mode). It can be None if we # cannot generate such filename. TESTFN_UNDECODABLE = None -for name in (b'abc\xff', b'\xe7w\xf0'): +# b'\xff' is not decodable by os.fsdecode() with code page 932. Windows +# accepts it to create a file or a directory, or don't accept to enter to +# such directory (when the bytes name is used). So test b'\xe7' first: it is +# not decodable from cp932. +for name in (b'\xe7w\xf0', b'abc\xff'): try: os.fsdecode(name) except UnicodeDecodeError: diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py index b1ee110..9d1d2bc 100644 --- a/Lib/test/test_genericpath.py +++ b/Lib/test/test_genericpath.py @@ -308,17 +308,28 @@ class CommonTest(GenericTest): for path in ('', 'fuu', 'f\xf9\xf9', '/fuu', 'U:\\'): self.assertIsInstance(abspath(path), str) - @unittest.skipIf(sys.platform == 'darwin', - "Mac OS X denies the creation of a directory with an invalid utf8 name") def test_nonascii_abspath(self): - if support.TESTFN_UNDECODABLE: - name = support.TESTFN_UNDECODABLE - elif support.TESTFN_NONASCII: - name = support.TESTFN_NONASCII + # Test non-ASCII in the path + if sys.platform in ('win32', 'darwin'): + if support.TESTFN_NONASCII: + name = support.TESTFN_NONASCII + else: + # Mac OS X denies the creation of a directory with an invalid + # UTF-8 name. Windows allows to create a directory with an + # arbitrary bytes name, but fails to enter this directory + # (when the bytes name is used). + self.skipTest("need support.TESTFN_NONASCII") else: - name = b'a\xffb\xe7w\xf0' + if support.TESTFN_UNDECODABLE: + name = support.TESTFN_UNDECODABLE + elif support.TESTFN_NONASCII: + name = support.TESTFN_NONASCII + else: + # On UNIX, the surrogateescape error handler is used to + # decode paths, so any byte is allowed, it does not depend + # on the locale + name = b'a\xffb\xe7w\xf0' - # Test non-ASCII, non-UTF8 bytes in the path. with warnings.catch_warnings(): warnings.simplefilter("ignore", DeprecationWarning) with support.temp_cwd(name): |