Patch #536661: Improve performance of splitext. Add test_macpath.
This commit is contained in:
parent
427a290c9a
commit
de3337913f
|
@ -62,20 +62,11 @@ def splitext(p):
|
||||||
pathname component; the root is everything before that.
|
pathname component; the root is everything before that.
|
||||||
It is always true that root + ext == p."""
|
It is always true that root + ext == p."""
|
||||||
|
|
||||||
root, ext = '', ''
|
i = p.rfind('.')
|
||||||
for c in p:
|
if i<=p.rfind(':'):
|
||||||
if c == ':':
|
return p, ''
|
||||||
root, ext = root + ext + c, ''
|
|
||||||
elif c == '.':
|
|
||||||
if ext:
|
|
||||||
root, ext = root + ext, c
|
|
||||||
else:
|
else:
|
||||||
ext = c
|
return p[:i], p[i:]
|
||||||
elif ext:
|
|
||||||
ext = ext + c
|
|
||||||
else:
|
|
||||||
root = root + c
|
|
||||||
return root, ext
|
|
||||||
|
|
||||||
|
|
||||||
def splitdrive(p):
|
def splitdrive(p):
|
||||||
|
|
|
@ -169,20 +169,12 @@ def splitext(p):
|
||||||
|
|
||||||
Extension is everything from the last dot to the end.
|
Extension is everything from the last dot to the end.
|
||||||
Return (root, ext), either part may be empty."""
|
Return (root, ext), either part may be empty."""
|
||||||
root, ext = '', ''
|
|
||||||
for c in p:
|
i = p.rfind('.')
|
||||||
if c in ['/','\\']:
|
if i<=max(p.rfind('/'), p.rfind('\\')):
|
||||||
root, ext = root + ext + c, ''
|
return p, ''
|
||||||
elif c == '.':
|
|
||||||
if ext:
|
|
||||||
root, ext = root + ext, c
|
|
||||||
else:
|
else:
|
||||||
ext = c
|
return p[:i], p[i:]
|
||||||
elif ext:
|
|
||||||
ext = ext + c
|
|
||||||
else:
|
|
||||||
root = root + c
|
|
||||||
return root, ext
|
|
||||||
|
|
||||||
|
|
||||||
# Return the tail (basename) part of a path.
|
# Return the tail (basename) part of a path.
|
||||||
|
|
|
@ -78,20 +78,11 @@ def split(p):
|
||||||
def splitext(p):
|
def splitext(p):
|
||||||
"""Split the extension from a pathname. Extension is everything from the
|
"""Split the extension from a pathname. Extension is everything from the
|
||||||
last dot to the end. Returns "(root, ext)", either part may be empty."""
|
last dot to the end. Returns "(root, ext)", either part may be empty."""
|
||||||
root, ext = '', ''
|
i = p.rfind('.')
|
||||||
for c in p:
|
if i<=p.rfind('/'):
|
||||||
if c == '/':
|
return p, ''
|
||||||
root, ext = root + ext + c, ''
|
|
||||||
elif c == '.':
|
|
||||||
if ext:
|
|
||||||
root, ext = root + ext, c
|
|
||||||
else:
|
else:
|
||||||
ext = c
|
return p[:i], p[i:]
|
||||||
elif ext:
|
|
||||||
ext = ext + c
|
|
||||||
else:
|
|
||||||
root = root + c
|
|
||||||
return root, ext
|
|
||||||
|
|
||||||
|
|
||||||
# Split a pathname into a drive specification and the rest of the
|
# Split a pathname into a drive specification and the rest of the
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
import macpath
|
||||||
|
from test import test_support
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
|
||||||
|
class MacPathTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_abspath(self):
|
||||||
|
self.assert_(macpath.abspath("xx:yy") == "xx:yy")
|
||||||
|
|
||||||
|
def test_isabs(self):
|
||||||
|
isabs = macpath.isabs
|
||||||
|
self.assert_(isabs("xx:yy"))
|
||||||
|
self.assert_(isabs("xx:yy:"))
|
||||||
|
self.assert_(isabs("xx:"))
|
||||||
|
self.failIf(isabs("foo"))
|
||||||
|
self.failIf(isabs(":foo"))
|
||||||
|
self.failIf(isabs(":foo:bar"))
|
||||||
|
self.failIf(isabs(":foo:bar:"))
|
||||||
|
|
||||||
|
|
||||||
|
def test_commonprefix(self):
|
||||||
|
commonprefix = macpath.commonprefix
|
||||||
|
self.assert_(commonprefix(["home:swenson:spam", "home:swen:spam"])
|
||||||
|
== "home:swen")
|
||||||
|
self.assert_(commonprefix([":home:swen:spam", ":home:swen:eggs"])
|
||||||
|
== ":home:swen:")
|
||||||
|
self.assert_(commonprefix([":home:swen:spam", ":home:swen:spam"])
|
||||||
|
== ":home:swen:spam")
|
||||||
|
|
||||||
|
def test_split(self):
|
||||||
|
split = macpath.split
|
||||||
|
self.assertEquals(split("foo:bar"),
|
||||||
|
('foo:', 'bar'))
|
||||||
|
self.assertEquals(split("conky:mountpoint:foo:bar"),
|
||||||
|
('conky:mountpoint:foo', 'bar'))
|
||||||
|
|
||||||
|
self.assertEquals(split(":"), ('', ''))
|
||||||
|
self.assertEquals(split(":conky:mountpoint:"),
|
||||||
|
(':conky:mountpoint', ''))
|
||||||
|
|
||||||
|
def test_splitdrive(self):
|
||||||
|
splitdrive = macpath.splitdrive
|
||||||
|
self.assertEquals(splitdrive("foo:bar"), ('', 'foo:bar'))
|
||||||
|
self.assertEquals(splitdrive(":foo:bar"), ('', ':foo:bar'))
|
||||||
|
|
||||||
|
def test_splitext(self):
|
||||||
|
splitext = macpath.splitext
|
||||||
|
self.assertEquals(splitext(":foo.ext"), (':foo', '.ext'))
|
||||||
|
self.assertEquals(splitext("foo:foo.ext"), ('foo:foo', '.ext'))
|
||||||
|
self.assertEquals(splitext(".ext"), ('', '.ext'))
|
||||||
|
self.assertEquals(splitext("foo.ext:foo"), ('foo.ext:foo', ''))
|
||||||
|
self.assertEquals(splitext(":foo.ext:"), (':foo.ext:', ''))
|
||||||
|
self.assertEquals(splitext(""), ('', ''))
|
||||||
|
self.assertEquals(splitext("foo.bar.ext"), ('foo.bar', '.ext'))
|
||||||
|
|
||||||
|
|
||||||
|
def test_main():
|
||||||
|
test_support.run_unittest(MacPathTestCase)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
test_main()
|
||||||
|
|
|
@ -16,6 +16,16 @@ def tester(fn, wantResult):
|
||||||
print ""
|
print ""
|
||||||
errors = errors + 1
|
errors = errors + 1
|
||||||
|
|
||||||
|
tester('ntpath.splitext("foo.ext")', ('foo', '.ext'))
|
||||||
|
tester('ntpath.splitext("/foo/foo.ext")', ('/foo/foo', '.ext'))
|
||||||
|
tester('ntpath.splitext(".ext")', ('', '.ext'))
|
||||||
|
tester('ntpath.splitext("\\foo.ext\\foo")', ('\\foo.ext\\foo', ''))
|
||||||
|
tester('ntpath.splitext("foo.ext\\")', ('foo.ext\\', ''))
|
||||||
|
tester('ntpath.splitext("")', ('', ''))
|
||||||
|
tester('ntpath.splitext("foo.bar.ext")', ('foo.bar', '.ext'))
|
||||||
|
tester('ntpath.splitext("xx/foo.bar.ext")', ('xx/foo.bar', '.ext'))
|
||||||
|
tester('ntpath.splitext("xx\\foo.bar.ext")', ('xx\\foo.bar', '.ext'))
|
||||||
|
|
||||||
tester('ntpath.splitdrive("c:\\foo\\bar")',
|
tester('ntpath.splitdrive("c:\\foo\\bar")',
|
||||||
('c:', '\\foo\\bar'))
|
('c:', '\\foo\\bar'))
|
||||||
tester('ntpath.splitunc("\\\\conky\\mountpoint\\foo\\bar")',
|
tester('ntpath.splitunc("\\\\conky\\mountpoint\\foo\\bar")',
|
||||||
|
|
|
@ -21,6 +21,11 @@ tester('posixpath.split("foo")', ('', 'foo'))
|
||||||
|
|
||||||
tester('posixpath.splitext("foo.ext")', ('foo', '.ext'))
|
tester('posixpath.splitext("foo.ext")', ('foo', '.ext'))
|
||||||
tester('posixpath.splitext("/foo/foo.ext")', ('/foo/foo', '.ext'))
|
tester('posixpath.splitext("/foo/foo.ext")', ('/foo/foo', '.ext'))
|
||||||
|
tester('posixpath.splitext(".ext")', ('', '.ext'))
|
||||||
|
tester('posixpath.splitext("/foo.ext/foo")', ('/foo.ext/foo', ''))
|
||||||
|
tester('posixpath.splitext("foo.ext/")', ('foo.ext/', ''))
|
||||||
|
tester('posixpath.splitext("")', ('', ''))
|
||||||
|
tester('posixpath.splitext("foo.bar.ext")', ('foo.bar', '.ext'))
|
||||||
|
|
||||||
tester('posixpath.isabs("/")', 1)
|
tester('posixpath.isabs("/")', 1)
|
||||||
tester('posixpath.isabs("/foo")', 1)
|
tester('posixpath.isabs("/foo")', 1)
|
||||||
|
|
Loading…
Reference in New Issue