Issue #19718: Add a case-insensitive FS check to test.support to use
in test_pathlib. Purposefully designed to work from a specified directory in case multiple file systems are used on the system.
This commit is contained in:
parent
aa40775817
commit
fe77f4ebb5
|
@ -76,7 +76,7 @@ __all__ = [
|
||||||
"captured_stdin", "captured_stderr",
|
"captured_stdin", "captured_stderr",
|
||||||
# filesystem
|
# filesystem
|
||||||
"TESTFN", "SAVEDCWD", "unlink", "rmtree", "temp_cwd", "findfile",
|
"TESTFN", "SAVEDCWD", "unlink", "rmtree", "temp_cwd", "findfile",
|
||||||
"create_empty_file", "can_symlink",
|
"create_empty_file", "can_symlink", "fs_is_case_insensitive",
|
||||||
# unittest
|
# unittest
|
||||||
"is_resource_enabled", "requires", "requires_freebsd_version",
|
"is_resource_enabled", "requires", "requires_freebsd_version",
|
||||||
"requires_linux_version", "requires_mac_ver", "check_syntax_error",
|
"requires_linux_version", "requires_mac_ver", "check_syntax_error",
|
||||||
|
@ -2045,6 +2045,20 @@ def skip_unless_xattr(test):
|
||||||
return test if ok else unittest.skip(msg)(test)
|
return test if ok else unittest.skip(msg)(test)
|
||||||
|
|
||||||
|
|
||||||
|
def fs_is_case_insensitive(directory):
|
||||||
|
"""Detects if the file system for the specified directory is case-insensitive."""
|
||||||
|
base_fp, base_path = tempfile.mkstemp(dir=directory)
|
||||||
|
case_path = base_path.upper()
|
||||||
|
if case_path == base_path:
|
||||||
|
case_path = base_path.lower()
|
||||||
|
try:
|
||||||
|
return os.path.samefile(base_path, case_path)
|
||||||
|
except FileNotFoundError:
|
||||||
|
return False
|
||||||
|
finally:
|
||||||
|
os.unlink(base_path)
|
||||||
|
|
||||||
|
|
||||||
class SuppressCrashReport:
|
class SuppressCrashReport:
|
||||||
"""Try to prevent a crash report from popping up.
|
"""Try to prevent a crash report from popping up.
|
||||||
|
|
||||||
|
|
|
@ -1623,12 +1623,16 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
|
||||||
def test_glob(self):
|
def test_glob(self):
|
||||||
P = self.cls
|
P = self.cls
|
||||||
p = P(BASE)
|
p = P(BASE)
|
||||||
self.assertEqual(set(p.glob("FILEa")), set())
|
given = set(p.glob("FILEa"))
|
||||||
|
expect = set() if not support.fs_is_case_insensitive(BASE) else given
|
||||||
|
self.assertEqual(given, expect)
|
||||||
|
|
||||||
def test_rglob(self):
|
def test_rglob(self):
|
||||||
P = self.cls
|
P = self.cls
|
||||||
p = P(BASE, "dirC")
|
p = P(BASE, "dirC")
|
||||||
self.assertEqual(set(p.rglob("FILEd")), set())
|
given = set(p.rglob("FILEd"))
|
||||||
|
expect = set() if not support.fs_is_case_insensitive(BASE) else given
|
||||||
|
self.assertEqual(given, expect)
|
||||||
|
|
||||||
|
|
||||||
@only_nt
|
@only_nt
|
||||||
|
|
Loading…
Reference in New Issue