]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-34195: Fix case-sensitive comparison in test_nt_helpers (GH-8448)
authorTim Golden <mail@timgolden.me.uk>
Wed, 25 Jul 2018 13:36:54 +0000 (14:36 +0100)
committerGitHub <noreply@github.com>
Wed, 25 Jul 2018 13:36:54 +0000 (14:36 +0100)
* Fix case-sensitive comparison

test_nt_helpers assumed that two versions of a Windows path could be compared case-sensitively. This is not the case, and the difference can be triggered (apparently) by running the test on a path somewhere below a Junction.

Lib/test/test_ntpath.py

index 2d48be84424226022154272d2a0c94559abf52c2..1e85ad5a75a77a6166b4a784e465f4ca0f04a8f8 100644 (file)
@@ -422,16 +422,22 @@ class TestNtpath(unittest.TestCase):
             self.assertTrue(ntpath.ismount(b"\\\\localhost\\c$"))
             self.assertTrue(ntpath.ismount(b"\\\\localhost\\c$\\"))
 
+    def assertEqualCI(self, s1, s2):
+        """Assert that two strings are equal ignoring case differences."""
+        self.assertEqual(s1.lower(), s2.lower())
+
     @unittest.skipUnless(nt, "OS helpers require 'nt' module")
     def test_nt_helpers(self):
         # Trivial validation that the helpers do not break, and support both
         # unicode and bytes (UTF-8) paths
 
-        drive, path = ntpath.splitdrive(sys.executable)
-        drive = drive.rstrip(ntpath.sep) + ntpath.sep
-        self.assertEqual(drive, nt._getvolumepathname(sys.executable))
-        self.assertEqual(drive.encode(),
-                         nt._getvolumepathname(sys.executable.encode()))
+        executable = nt._getfinalpathname(sys.executable)
+
+        for path in executable, os.fsencode(executable):
+            volume_path = nt._getvolumepathname(path)
+            path_drive = ntpath.splitdrive(path)[0]
+            volume_path_drive = ntpath.splitdrive(volume_path)[0]
+            self.assertEqualCI(path_drive, volume_path_drive)
 
         cap, free = nt._getdiskusage(sys.exec_prefix)
         self.assertGreater(cap, 0)