[Python-checkins] bpo-38087: Fix case sensitivity in test_pathlib and test_ntpath (GH-15850)
Steve Dower
webhook-mailer at python.org
Tue Sep 10 10:17:46 EDT 2019
https://github.com/python/cpython/commit/0d7e6a6d2d9e564d670efb6e3705598846de188d
commit: 0d7e6a6d2d9e564d670efb6e3705598846de188d
branch: 3.7
author: Steve Dower <steve.dower at python.org>
committer: GitHub <noreply at github.com>
date: 2019-09-10T15:17:42+01:00
summary:
bpo-38087: Fix case sensitivity in test_pathlib and test_ntpath (GH-15850)
files:
A Misc/NEWS.d/next/Windows/2019-09-10-14-21-40.bpo-38087.--eIib.rst
M Lib/test/test_ntpath.py
M Lib/test/test_pathlib.py
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
index 52ddc18c7e46..89b0d5303db5 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -14,10 +14,19 @@
# but for those that require it we import here.
nt = None
+
+def _norm(path):
+ if isinstance(path, (bytes, str, os.PathLike)):
+ return ntpath.normcase(os.fsdecode(path))
+ elif hasattr(path, "__iter__"):
+ return tuple(ntpath.normcase(os.fsdecode(p)) for p in path)
+ return path
+
+
def tester(fn, wantResult):
fn = fn.replace("\\", "\\\\")
gotResult = eval(fn)
- if wantResult != gotResult:
+ if wantResult != gotResult and _norm(wantResult) != _norm(gotResult):
raise TestFailed("%s should return: %s but returned: %s" \
%(str(fn), str(wantResult), str(gotResult)))
@@ -33,16 +42,22 @@ def tester(fn, wantResult):
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
gotResult = eval(fn)
- if isinstance(wantResult, str):
- wantResult = os.fsencode(wantResult)
- elif isinstance(wantResult, tuple):
- wantResult = tuple(os.fsencode(r) for r in wantResult)
- if wantResult != gotResult:
+ if _norm(wantResult) != _norm(gotResult):
raise TestFailed("%s should return: %s but returned: %s" \
%(str(fn), str(wantResult), repr(gotResult)))
-class TestNtpath(unittest.TestCase):
+class NtpathTestCase(unittest.TestCase):
+ def assertPathEqual(self, path1, path2):
+ if path1 == path2 or _norm(path1) == _norm(path2):
+ return
+ self.assertEqual(path1, path2)
+
+ def assertPathIn(self, path, pathset):
+ self.assertIn(_norm(path), _norm(pathset))
+
+
+class TestNtpath(NtpathTestCase):
def test_splitext(self):
tester('ntpath.splitext("foo.ext")', ('foo', '.ext'))
tester('ntpath.splitext("/foo/foo.ext")', ('/foo/foo', '.ext'))
@@ -459,7 +474,7 @@ class NtCommonTest(test_genericpath.CommonTest, unittest.TestCase):
attributes = ['relpath']
-class PathLikeTests(unittest.TestCase):
+class PathLikeTests(NtpathTestCase):
path = ntpath
@@ -470,67 +485,67 @@ def setUp(self):
with open(self.file_name, 'xb', 0) as file:
file.write(b"test_ntpath.PathLikeTests")
- def assertPathEqual(self, func):
- self.assertEqual(func(self.file_path), func(self.file_name))
+ def _check_function(self, func):
+ self.assertPathEqual(func(self.file_path), func(self.file_name))
def test_path_normcase(self):
- self.assertPathEqual(self.path.normcase)
+ self._check_function(self.path.normcase)
def test_path_isabs(self):
- self.assertPathEqual(self.path.isabs)
+ self._check_function(self.path.isabs)
def test_path_join(self):
self.assertEqual(self.path.join('a', FakePath('b'), 'c'),
self.path.join('a', 'b', 'c'))
def test_path_split(self):
- self.assertPathEqual(self.path.split)
+ self._check_function(self.path.split)
def test_path_splitext(self):
- self.assertPathEqual(self.path.splitext)
+ self._check_function(self.path.splitext)
def test_path_splitdrive(self):
- self.assertPathEqual(self.path.splitdrive)
+ self._check_function(self.path.splitdrive)
def test_path_basename(self):
- self.assertPathEqual(self.path.basename)
+ self._check_function(self.path.basename)
def test_path_dirname(self):
- self.assertPathEqual(self.path.dirname)
+ self._check_function(self.path.dirname)
def test_path_islink(self):
- self.assertPathEqual(self.path.islink)
+ self._check_function(self.path.islink)
def test_path_lexists(self):
- self.assertPathEqual(self.path.lexists)
+ self._check_function(self.path.lexists)
def test_path_ismount(self):
- self.assertPathEqual(self.path.ismount)
+ self._check_function(self.path.ismount)
def test_path_expanduser(self):
- self.assertPathEqual(self.path.expanduser)
+ self._check_function(self.path.expanduser)
def test_path_expandvars(self):
- self.assertPathEqual(self.path.expandvars)
+ self._check_function(self.path.expandvars)
def test_path_normpath(self):
- self.assertPathEqual(self.path.normpath)
+ self._check_function(self.path.normpath)
def test_path_abspath(self):
- self.assertPathEqual(self.path.abspath)
+ self._check_function(self.path.abspath)
def test_path_realpath(self):
- self.assertPathEqual(self.path.realpath)
+ self._check_function(self.path.realpath)
def test_path_relpath(self):
- self.assertPathEqual(self.path.relpath)
+ self._check_function(self.path.relpath)
def test_path_commonpath(self):
common_path = self.path.commonpath([self.file_path, self.file_name])
- self.assertEqual(common_path, self.file_name)
+ self.assertPathEqual(common_path, self.file_name)
def test_path_isdir(self):
- self.assertPathEqual(self.path.isdir)
+ self._check_function(self.path.isdir)
if __name__ == "__main__":
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index f7ed1d1e48fb..9c82c6451479 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -1271,10 +1271,13 @@ def assertFileNotFound(self, func, *args, **kwargs):
func(*args, **kwargs)
self.assertEqual(cm.exception.errno, errno.ENOENT)
+ def assertEqualNormCase(self, path_a, path_b):
+ self.assertEqual(os.path.normcase(path_a), os.path.normcase(path_b))
+
def _test_cwd(self, p):
q = self.cls(os.getcwd())
self.assertEqual(p, q)
- self.assertEqual(str(p), str(q))
+ self.assertEqualNormCase(str(p), str(q))
self.assertIs(type(p), type(q))
self.assertTrue(p.is_absolute())
@@ -1285,7 +1288,7 @@ def test_cwd(self):
def _test_home(self, p):
q = self.cls(os.path.expanduser('~'))
self.assertEqual(p, q)
- self.assertEqual(str(p), str(q))
+ self.assertEqualNormCase(str(p), str(q))
self.assertIs(type(p), type(q))
self.assertTrue(p.is_absolute())
@@ -1491,15 +1494,15 @@ def test_resolve_common(self):
p.resolve(strict=True)
self.assertEqual(cm.exception.errno, errno.ENOENT)
# Non-strict
- self.assertEqual(str(p.resolve(strict=False)),
- os.path.join(BASE, 'foo'))
+ self.assertEqualNormCase(str(p.resolve(strict=False)),
+ os.path.join(BASE, 'foo'))
p = P(BASE, 'foo', 'in', 'spam')
- self.assertEqual(str(p.resolve(strict=False)),
- os.path.join(BASE, 'foo', 'in', 'spam'))
+ self.assertEqualNormCase(str(p.resolve(strict=False)),
+ os.path.join(BASE, 'foo', 'in', 'spam'))
p = P(BASE, '..', 'foo', 'in', 'spam')
- self.assertEqual(str(p.resolve(strict=False)),
- os.path.abspath(os.path.join('foo', 'in', 'spam')))
- # These are all relative symlinks
+ self.assertEqualNormCase(str(p.resolve(strict=False)),
+ os.path.abspath(os.path.join('foo', 'in', 'spam')))
+ # These are all relative symlinks.
p = P(BASE, 'dirB', 'fileB')
self._check_resolve_relative(p, p)
p = P(BASE, 'linkA')
@@ -1996,16 +1999,16 @@ def _check_complex_symlinks(self, link0_target):
# Resolve absolute paths
p = (P / 'link0').resolve()
self.assertEqual(p, P)
- self.assertEqual(str(p), BASE)
+ self.assertEqualNormCase(str(p), BASE)
p = (P / 'link1').resolve()
self.assertEqual(p, P)
- self.assertEqual(str(p), BASE)
+ self.assertEqualNormCase(str(p), BASE)
p = (P / 'link2').resolve()
self.assertEqual(p, P)
- self.assertEqual(str(p), BASE)
+ self.assertEqualNormCase(str(p), BASE)
p = (P / 'link3').resolve()
self.assertEqual(p, P)
- self.assertEqual(str(p), BASE)
+ self.assertEqualNormCase(str(p), BASE)
# Resolve relative paths
old_path = os.getcwd()
@@ -2013,16 +2016,16 @@ def _check_complex_symlinks(self, link0_target):
try:
p = self.cls('link0').resolve()
self.assertEqual(p, P)
- self.assertEqual(str(p), BASE)
+ self.assertEqualNormCase(str(p), BASE)
p = self.cls('link1').resolve()
self.assertEqual(p, P)
- self.assertEqual(str(p), BASE)
+ self.assertEqualNormCase(str(p), BASE)
p = self.cls('link2').resolve()
self.assertEqual(p, P)
- self.assertEqual(str(p), BASE)
+ self.assertEqualNormCase(str(p), BASE)
p = self.cls('link3').resolve()
self.assertEqual(p, P)
- self.assertEqual(str(p), BASE)
+ self.assertEqualNormCase(str(p), BASE)
finally:
os.chdir(old_path)
diff --git a/Misc/NEWS.d/next/Windows/2019-09-10-14-21-40.bpo-38087.--eIib.rst b/Misc/NEWS.d/next/Windows/2019-09-10-14-21-40.bpo-38087.--eIib.rst
new file mode 100644
index 000000000000..ca625cc775a2
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2019-09-10-14-21-40.bpo-38087.--eIib.rst
@@ -0,0 +1 @@
+Fix case sensitivity in test_pathlib and test_ntpath.
More information about the Python-checkins
mailing list