[Python-checkins] cpython (3.3): Issue #19912: Fixed numerous bugs in ntpath.splitunc().

serhiy.storchaka python-checkins at python.org
Mon Dec 16 14:22:52 CET 2013


http://hg.python.org/cpython/rev/129105f8457d
changeset:   87989:129105f8457d
branch:      3.3
parent:      87987:7b0d083082ea
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Mon Dec 16 15:13:28 2013 +0200
summary:
  Issue #19912: Fixed numerous bugs in ntpath.splitunc().

* splitunc() no more return illegal result for paths with redundant slashes.
* splitunc() now correctly processes the 'İ' character
  (U+0130, LATIN CAPITAL LETTER I WITH DOT ABOVE).
* Deprecation warnings now emitted for every use of splitunc().
* Added tests for splitunc().

files:
  Lib/ntpath.py           |  26 ++++++--------------------
  Lib/test/test_ntpath.py |  23 +++++++++++++++++++++++
  Misc/NEWS               |   4 ++++
  3 files changed, 33 insertions(+), 20 deletions(-)


diff --git a/Lib/ntpath.py b/Lib/ntpath.py
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -243,26 +243,12 @@
     """
     import warnings
     warnings.warn("ntpath.splitunc is deprecated, use ntpath.splitdrive instead",
-                  DeprecationWarning)
-    sep = _get_sep(p)
-    if not p[1:2]:
-        return p[:0], p # Drive letter present
-    firstTwo = p[0:2]
-    if normcase(firstTwo) == sep + sep:
-        # is a UNC path:
-        # vvvvvvvvvvvvvvvvvvvv equivalent to drive letter
-        # \\machine\mountpoint\directories...
-        #           directory ^^^^^^^^^^^^^^^
-        normp = normcase(p)
-        index = normp.find(sep, 2)
-        if index == -1:
-            ##raise RuntimeError, 'illegal UNC path: "' + p + '"'
-            return (p[:0], p)
-        index = normp.find(sep, index + 1)
-        if index == -1:
-            index = len(p)
-        return p[:index], p[index:]
-    return p[:0], p
+                  DeprecationWarning, 2)
+    drive, path = splitdrive(p)
+    if len(drive) == 2:
+         # Drive letter present
+        return p[:0], p
+    return drive, path
 
 
 # Split a path in head (everything up to the last '/') and tail (the
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -70,6 +70,29 @@
         self.assertEqual(ntpath.splitdrive('//conky/MOUNTPOİNT/foo/bar'),
                          ('//conky/MOUNTPOİNT', '/foo/bar'))
 
+    def test_splitunc(self):
+        with self.assertWarns(DeprecationWarning):
+            ntpath.splitunc('')
+        with support.check_warnings(('', DeprecationWarning)):
+            tester('ntpath.splitunc("c:\\foo\\bar")',
+                   ('', 'c:\\foo\\bar'))
+            tester('ntpath.splitunc("c:/foo/bar")',
+                   ('', 'c:/foo/bar'))
+            tester('ntpath.splitunc("\\\\conky\\mountpoint\\foo\\bar")',
+                   ('\\\\conky\\mountpoint', '\\foo\\bar'))
+            tester('ntpath.splitunc("//conky/mountpoint/foo/bar")',
+                   ('//conky/mountpoint', '/foo/bar'))
+            tester('ntpath.splitunc("\\\\\\conky\\mountpoint\\foo\\bar")',
+                   ('', '\\\\\\conky\\mountpoint\\foo\\bar'))
+            tester('ntpath.splitunc("///conky/mountpoint/foo/bar")',
+                   ('', '///conky/mountpoint/foo/bar'))
+            tester('ntpath.splitunc("\\\\conky\\\\mountpoint\\foo\\bar")',
+                   ('', '\\\\conky\\\\mountpoint\\foo\\bar'))
+            tester('ntpath.splitunc("//conky//mountpoint/foo/bar")',
+                   ('', '//conky//mountpoint/foo/bar'))
+            self.assertEqual(ntpath.splitunc('//conky/MOUNTPOİNT/foo/bar'),
+                             ('//conky/MOUNTPOİNT', '/foo/bar'))
+
     def test_split(self):
         tester('ntpath.split("c:\\foo\\bar")', ('c:\\foo', 'bar'))
         tester('ntpath.split("\\\\conky\\mountpoint\\foo\\bar")',
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -29,6 +29,8 @@
 Library
 -------
 
+- Issue #19912: Fixed numerous bugs in ntpath.splitunc().
+
 - Issue #19911: ntpath.splitdrive() now correctly processes the 'İ' character
   (U+0130, LATIN CAPITAL LETTER I WITH DOT ABOVE).
 
@@ -147,6 +149,8 @@
 Tests
 -----
 
+- Issue #19912: Added tests for ntpath.splitunc().
+
 - Issue #19828: Fixed test_site when the whole suite is run with -S.
 
 - Issue #19928: Implemented a test for repr() of cell objects.

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list