From: Brett Cannon Date: Fri, 22 Nov 2013 21:14:10 +0000 (-0500) Subject: Issue #19718: Add a case-insensitive FS check to test.support to use X-Git-Tag: v3.4.0b1~103 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe77f4ebb554bf40b5c1810aeddc2c240aaef431;p=python 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. --- diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index b6a430e491..87c039aa02 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -76,7 +76,7 @@ __all__ = [ "captured_stdin", "captured_stderr", # filesystem "TESTFN", "SAVEDCWD", "unlink", "rmtree", "temp_cwd", "findfile", - "create_empty_file", "can_symlink", + "create_empty_file", "can_symlink", "fs_is_case_insensitive", # unittest "is_resource_enabled", "requires", "requires_freebsd_version", "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) +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: """Try to prevent a crash report from popping up. diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index e23e5a7de0..751764fbbe 100755 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1623,12 +1623,16 @@ class PosixPathTest(_BasePathTest, unittest.TestCase): def test_glob(self): P = self.cls 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): P = self.cls 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