Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 43 additions & 28 deletions Lib/test/test_ntpath.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)))

Expand All @@ -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'))
Expand Down Expand Up @@ -459,7 +474,7 @@ class NtCommonTest(test_genericpath.CommonTest, unittest.TestCase):
attributes = ['relpath']


class PathLikeTests(unittest.TestCase):
class PathLikeTests(NtpathTestCase):

path = ntpath

Expand All @@ -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__":
Expand Down
37 changes: 20 additions & 17 deletions Lib/test/test_pathlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -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())

Expand All @@ -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())

Expand Down Expand Up @@ -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')
Expand Down Expand Up @@ -1996,33 +1999,33 @@ 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()
os.chdir(BASE)
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)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix case sensitivity in test_pathlib and test_ntpath.