bpo-46362: Ensure ntpath.abspath() uses the Windows API correctly (GH-30571)

This makes ntpath.abspath()/getpath_abspath() follow normpath(), since some WinAPIs such as PathCchSkipRoot() require backslashed paths.
This commit is contained in:
neonene 2022-01-14 08:35:42 +09:00 committed by GitHub
parent b8ddf7e794
commit d4e64cd4b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 114 additions and 42 deletions

View file

@ -613,6 +613,40 @@ class TestNtpath(NtpathTestCase):
@unittest.skipUnless(nt, "abspath requires 'nt' module")
def test_abspath(self):
tester('ntpath.abspath("C:\\")', "C:\\")
tester('ntpath.abspath("\\\\?\\C:////spam////eggs. . .")', "\\\\?\\C:\\spam\\eggs")
tester('ntpath.abspath("\\\\.\\C:////spam////eggs. . .")', "\\\\.\\C:\\spam\\eggs")
tester('ntpath.abspath("//spam//eggs. . .")', "\\\\spam\\eggs")
tester('ntpath.abspath("\\\\spam\\\\eggs. . .")', "\\\\spam\\eggs")
tester('ntpath.abspath("C:/spam. . .")', "C:\\spam")
tester('ntpath.abspath("C:\\spam. . .")', "C:\\spam")
tester('ntpath.abspath("C:/nul")', "\\\\.\\nul")
tester('ntpath.abspath("C:\\nul")', "\\\\.\\nul")
tester('ntpath.abspath("//..")', "\\\\")
tester('ntpath.abspath("//../")', "\\\\..\\")
tester('ntpath.abspath("//../..")', "\\\\..\\")
tester('ntpath.abspath("//../../")', "\\\\..\\..\\")
tester('ntpath.abspath("//../../../")', "\\\\..\\..\\")
tester('ntpath.abspath("//../../../..")', "\\\\..\\..\\")
tester('ntpath.abspath("//../../../../")', "\\\\..\\..\\")
tester('ntpath.abspath("//server")', "\\\\server")
tester('ntpath.abspath("//server/")', "\\\\server\\")
tester('ntpath.abspath("//server/..")', "\\\\server\\")
tester('ntpath.abspath("//server/../")', "\\\\server\\..\\")
tester('ntpath.abspath("//server/../..")', "\\\\server\\..\\")
tester('ntpath.abspath("//server/../../")', "\\\\server\\..\\")
tester('ntpath.abspath("//server/../../..")', "\\\\server\\..\\")
tester('ntpath.abspath("//server/../../../")', "\\\\server\\..\\")
tester('ntpath.abspath("//server/share")', "\\\\server\\share")
tester('ntpath.abspath("//server/share/")', "\\\\server\\share\\")
tester('ntpath.abspath("//server/share/..")', "\\\\server\\share\\")
tester('ntpath.abspath("//server/share/../")', "\\\\server\\share\\")
tester('ntpath.abspath("//server/share/../..")', "\\\\server\\share\\")
tester('ntpath.abspath("//server/share/../../")', "\\\\server\\share\\")
tester('ntpath.abspath("C:\\nul. . .")', "\\\\.\\nul")
tester('ntpath.abspath("//... . .")', "\\\\")
tester('ntpath.abspath("//.. . . .")', "\\\\")
tester('ntpath.abspath("//../... . .")', "\\\\..\\")
tester('ntpath.abspath("//../.. . . .")', "\\\\..\\")
with os_helper.temp_cwd(os_helper.TESTFN) as cwd_dir: # bpo-31047
tester('ntpath.abspath("")', cwd_dir)
tester('ntpath.abspath(" ")', cwd_dir + "\\ ")