From: Ethan Furman Date: Sat, 4 Jun 2016 20:47:39 +0000 (-0700) Subject: issue27186: fix fsencode/fsdecode and update tests; patch by Jelle Zijlstra X-Git-Tag: v3.6.0a2~133 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=228c636908bda8a6b20b0f6930655fbaedc4ebad;p=thirdparty%2FPython%2Fcpython.git issue27186: fix fsencode/fsdecode and update tests; patch by Jelle Zijlstra --- diff --git a/Lib/os.py b/Lib/os.py index e7d089ed35b3..56a2f7187b55 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -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 e740edf644e7..6853ebbd7fff 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():