diff options
author | Ethan Furman <ethan@stoneleaf.us> | 2016-06-04 20:47:39 (GMT) |
---|---|---|
committer | Ethan Furman <ethan@stoneleaf.us> | 2016-06-04 20:47:39 (GMT) |
commit | 228c636908bda8a6b20b0f6930655fbaedc4ebad (patch) | |
tree | f91930ec2dfe5fdb8525ec90a3f2226d218ca686 | |
parent | db780cffc887fbf4c4fb9452fc6dc7a3c722e290 (diff) | |
download | cpython-228c636908bda8a6b20b0f6930655fbaedc4ebad.zip cpython-228c636908bda8a6b20b0f6930655fbaedc4ebad.tar.gz cpython-228c636908bda8a6b20b0f6930655fbaedc4ebad.tar.bz2 |
issue27186: fix fsencode/fsdecode and update tests; patch by Jelle Zijlstra
-rw-r--r-- | Lib/os.py | 4 | ||||
-rw-r--r-- | Lib/test/test_os.py | 19 |
2 files changed, 15 insertions, 8 deletions
@@ -889,7 +889,7 @@ def _fscodec(): return filename.encode(encoding, errors) else: raise TypeError("expected str, bytes or os.PathLike object, not " - + path_type.__name__) + + type(filename).__name__) def fsdecode(filename): """ @@ -905,7 +905,7 @@ def _fscodec(): return filename.decode(encoding, errors) else: raise TypeError("expected str, bytes or os.PathLike object, not " - + path_type.__name__) + + type(filename).__name__) return fsencode, fsdecode diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index e740edf..6853ebb 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -3107,29 +3107,36 @@ class TestPEP519(unittest.TestCase): self.assertEqual(s, os.fspath(s)) def test_fsencode_fsdecode_return_pathlike(self): - class Pathlike: + class PathLike: def __init__(self, path): self.path = path - def __fspath__(self): return self.path for p in "path/like/object", b"path/like/object": - pathlike = Pathlike(p) + pathlike = PathLike(p) self.assertEqual(p, os.fspath(pathlike)) self.assertEqual(b"path/like/object", os.fsencode(pathlike)) self.assertEqual("path/like/object", os.fsdecode(pathlike)) def test_fspathlike(self): - class PathLike(object): + class PathLike: + def __init__(self, path=''): + self.path = path def __fspath__(self): - return '#feelthegil' + return self.path - self.assertEqual('#feelthegil', os.fspath(PathLike())) + self.assertEqual('#feelthegil', os.fspath(PathLike('#feelthegil'))) self.assertTrue(issubclass(PathLike, os.PathLike)) self.assertTrue(isinstance(PathLike(), os.PathLike)) + message = 'expected str, bytes or os.PathLike object, not' + for fn in (os.fsencode, os.fsdecode): + for obj in PathLike(None), None: + with self.assertRaisesRegex(TypeError, message): + fn(obj) + def test_garbage_in_exception_out(self): vapor = type('blah', (), {}) for o in int, type, os, vapor(): |