summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2013-12-16 13:14:19 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2013-12-16 13:14:19 (GMT)
commitcc83b0c8f6089d67e998b4322000c1805f4cb06e (patch)
tree681cb34e68fc5ff71d78610771c445b955966e25
parentf5ad91c392199fe8fabeed34d1dce6f8be3a0921 (diff)
parent593568bf47600154b760edf21f22090ff60a2a74 (diff)
downloadcpython-cc83b0c8f6089d67e998b4322000c1805f4cb06e.zip
cpython-cc83b0c8f6089d67e998b4322000c1805f4cb06e.tar.gz
cpython-cc83b0c8f6089d67e998b4322000c1805f4cb06e.tar.bz2
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().
-rw-r--r--Lib/ntpath.py26
-rw-r--r--Lib/test/test_ntpath.py23
-rw-r--r--Misc/NEWS4
3 files changed, 33 insertions, 20 deletions
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 3d9e200..dd64962 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -240,26 +240,12 @@ def splitunc(p):
"""
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
index 767a5b1..2e6ba63 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -70,6 +70,29 @@ class TestNtpath(unittest.TestCase):
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
index 0ccc45c..01fe816 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -44,6 +44,8 @@ Core and Builtins
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).
@@ -183,6 +185,8 @@ IDLE
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.