#3426: os.path.abspath now returns unicode when its arg is unicode.
This commit is contained in:
parent
61afd2694b
commit
4cc80ca921
|
@ -186,7 +186,11 @@ def walk(top, func, arg):
|
|||
def abspath(path):
|
||||
"""Return an absolute path."""
|
||||
if not isabs(path):
|
||||
path = join(os.getcwd(), path)
|
||||
if isinstance(path, unicode):
|
||||
cwd = os.getcwdu()
|
||||
else:
|
||||
cwd = os.getcwd()
|
||||
path = join(cwd, path)
|
||||
return normpath(path)
|
||||
|
||||
# realpath is a no-op on systems without islink support
|
||||
|
|
|
@ -449,7 +449,11 @@ except ImportError: # not running on Windows - mock up something sensible
|
|||
def abspath(path):
|
||||
"""Return the absolute version of a path."""
|
||||
if not isabs(path):
|
||||
path = join(os.getcwd(), path)
|
||||
if isinstance(path, unicode):
|
||||
cwd = os.getcwdu()
|
||||
else:
|
||||
cwd = os.getcwd()
|
||||
path = join(cwd, path)
|
||||
return normpath(path)
|
||||
|
||||
else: # use native Windows method on Windows
|
||||
|
@ -461,6 +465,8 @@ else: # use native Windows method on Windows
|
|||
path = _getfullpathname(path)
|
||||
except WindowsError:
|
||||
pass # Bad path - return unchanged.
|
||||
elif isinstance(path, unicode):
|
||||
path = os.getcwdu()
|
||||
else:
|
||||
path = os.getcwd()
|
||||
return normpath(path)
|
||||
|
|
|
@ -146,7 +146,11 @@ def normpath(path):
|
|||
def abspath(path):
|
||||
"""Return the absolute version of a path"""
|
||||
if not isabs(path):
|
||||
path = join(os.getcwd(), path)
|
||||
if isinstance(path, unicode):
|
||||
cwd = os.getcwdu()
|
||||
else:
|
||||
cwd = os.getcwd()
|
||||
path = join(cwd, path)
|
||||
return normpath(path)
|
||||
|
||||
# realpath is a no-op on systems without islink support
|
||||
|
|
|
@ -337,7 +337,11 @@ def normpath(path):
|
|||
def abspath(path):
|
||||
"""Return an absolute path."""
|
||||
if not isabs(path):
|
||||
path = join(os.getcwd(), path)
|
||||
if isinstance(path, unicode):
|
||||
cwd = os.getcwdu()
|
||||
else:
|
||||
cwd = os.getcwd()
|
||||
path = join(cwd, path)
|
||||
return normpath(path)
|
||||
|
||||
|
||||
|
|
|
@ -8,6 +8,16 @@ class MacPathTestCase(unittest.TestCase):
|
|||
def test_abspath(self):
|
||||
self.assertTrue(macpath.abspath("xx:yy") == "xx:yy")
|
||||
|
||||
# Issue 3426: check that abspath retuns unicode when the arg is unicode
|
||||
# and str when it's str, with both ASCII and non-ASCII cwds
|
||||
for cwd in (u'cwd', u'\xe7w\xf0'):
|
||||
with test_support.temp_cwd(cwd):
|
||||
for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'):
|
||||
self.assertIsInstance(macpath.abspath(path), str)
|
||||
for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'):
|
||||
self.assertIsInstance(macpath.abspath(upath), unicode)
|
||||
|
||||
|
||||
def test_isabs(self):
|
||||
isabs = macpath.isabs
|
||||
self.assertTrue(isabs("xx:yy"))
|
||||
|
|
|
@ -160,13 +160,25 @@ class TestNtpath(unittest.TestCase):
|
|||
# the rest of the tests for the ntpath module to be run to completion
|
||||
# on any platform, since most of the module is intended to be usable
|
||||
# from any platform.
|
||||
# XXX this needs more tests
|
||||
try:
|
||||
import nt
|
||||
except ImportError:
|
||||
pass
|
||||
# check that the function is there even if we are not on Windows
|
||||
ntpath.abspath
|
||||
else:
|
||||
tester('ntpath.abspath("C:\\")', "C:\\")
|
||||
|
||||
# Issue 3426: check that abspath retuns unicode when the arg is
|
||||
# unicode and str when it's str, with both ASCII and non-ASCII cwds
|
||||
for cwd in (u'cwd', u'\xe7w\xf0'):
|
||||
with test_support.temp_cwd(cwd):
|
||||
for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'):
|
||||
self.assertIsInstance(ntpath.abspath(path), str)
|
||||
for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'):
|
||||
self.assertIsInstance(ntpath.abspath(upath), unicode)
|
||||
|
||||
|
||||
def test_relpath(self):
|
||||
currentdir = os.path.split(os.getcwd())[-1]
|
||||
tester('ntpath.relpath("a")', 'a')
|
||||
|
|
|
@ -386,6 +386,15 @@ class PosixPathTest(unittest.TestCase):
|
|||
def test_abspath(self):
|
||||
self.assertTrue("foo" in posixpath.abspath("foo"))
|
||||
|
||||
# Issue 3426: check that abspath retuns unicode when the arg is unicode
|
||||
# and str when it's str, with both ASCII and non-ASCII cwds
|
||||
for cwd in (u'cwd', u'\xe7w\xf0'):
|
||||
with test_support.temp_cwd(cwd):
|
||||
for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'):
|
||||
self.assertIsInstance(posixpath.abspath(path), str)
|
||||
for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'):
|
||||
self.assertIsInstance(posixpath.abspath(upath), unicode)
|
||||
|
||||
self.assertRaises(TypeError, posixpath.abspath)
|
||||
|
||||
def test_realpath(self):
|
||||
|
|
|
@ -15,6 +15,8 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #3426: ``os.path.abspath`` now returns unicode when its arg is unicode.
|
||||
|
||||
- Issue #7633: In the decimal module, Context class methods (with the
|
||||
exception of canonical and is_canonical) now accept instances of int
|
||||
and long wherever a Decimal instance is accepted, and implicitly
|
||||
|
@ -28,7 +30,7 @@ Library
|
|||
argument added to the TextTestRunner constructor allowing a different result
|
||||
class to be used without having to subclass.
|
||||
|
||||
- Issue 7588: ``unittest.TextTestResult.getDescription`` now includes the test
|
||||
- Issue #7588: ``unittest.TextTestResult.getDescription`` now includes the test
|
||||
name in failure reports even if the test has a docstring.
|
||||
|
||||
Extension Modules
|
||||
|
|
Loading…
Reference in New Issue