summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/macpath.py6
-rw-r--r--Lib/ntpath.py8
-rw-r--r--Lib/os2emxpath.py6
-rw-r--r--Lib/posixpath.py6
-rw-r--r--Lib/test/test_macpath.py17
-rw-r--r--Lib/test/test_ntpath.py21
-rw-r--r--Lib/test/test_posixpath.py15
7 files changed, 74 insertions, 5 deletions
diff --git a/Lib/macpath.py b/Lib/macpath.py
index 14e49a3..15714c6 100644
--- a/Lib/macpath.py
+++ b/Lib/macpath.py
@@ -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
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 02d8584..a124dfd 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -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)
diff --git a/Lib/os2emxpath.py b/Lib/os2emxpath.py
index 4e85c4d..1bed51d 100644
--- a/Lib/os2emxpath.py
+++ b/Lib/os2emxpath.py
@@ -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
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 35dcffb..44519d4 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -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)
diff --git a/Lib/test/test_macpath.py b/Lib/test/test_macpath.py
index 2449b0a..81374d1 100644
--- a/Lib/test/test_macpath.py
+++ b/Lib/test/test_macpath.py
@@ -1,3 +1,4 @@
+import os
import macpath
from test import test_support
import unittest
@@ -8,6 +9,22 @@ class MacPathTestCase(unittest.TestCase):
def test_abspath(self):
self.assert_(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
+ saved_cwd = os.getcwd()
+ for cwd in (u'cwd', u'\xe7w\xf0'):
+ try:
+ os.mkdir(cwd)
+ os.chdir(cwd)
+ for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'):
+ self.assertTrue(isinstance(macpath.abspath(path), str))
+ for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'):
+ self.assertTrue(isinstance(macpath.abspath(upath), unicode))
+ finally:
+ os.chdir(saved_cwd)
+ os.rmdir(cwd)
+
+
def test_isabs(self):
isabs = macpath.isabs
self.assert_(isabs("xx:yy"))
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
index 10bbe3a..89b3f61 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -164,13 +164,32 @@ 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
+ saved_cwd = os.getcwd()
+ for cwd in (u'cwd', u'\xe7w\xf0'):
+ try:
+ os.mkdir(cwd)
+ os.chdir(cwd)
+ for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'):
+ self.assertTrue(isinstance(ntpath.abspath(path), str))
+ for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'):
+ self.assertTrue(isinstance(ntpath.abspath(upath),
+ unicode))
+ finally:
+ os.chdir(saved_cwd)
+ os.rmdir(cwd)
+
+
def test_relpath(self):
currentdir = os.path.split(os.getcwd())[-1]
tester('ntpath.relpath("a")', 'a')
diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py
index c2f3a4a..ef3429f 100644
--- a/Lib/test/test_posixpath.py
+++ b/Lib/test/test_posixpath.py
@@ -390,6 +390,21 @@ class PosixPathTest(unittest.TestCase):
def test_abspath(self):
self.assert_("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
+ saved_cwd = os.getcwd()
+ for cwd in (u'cwd', u'\xe7w\xf0'):
+ try:
+ os.mkdir(cwd)
+ os.chdir(cwd)
+ for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'):
+ self.assertTrue(isinstance(posixpath.abspath(path), str))
+ for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'):
+ self.assertTrue(isinstance(posixpath.abspath(upath), unicode))
+ finally:
+ os.chdir(saved_cwd)
+ os.rmdir(cwd)
+
self.assertRaises(TypeError, posixpath.abspath)
def test_realpath(self):