Issue #21840: Fixed expanding unicode variables of form $var in
posixpath.expandvars(). Fixed all os.path implementations on
unicode-disabled builds.
diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py
index 94380b1..741b755 100644
--- a/Lib/test/test_genericpath.py
+++ b/Lib/test/test_genericpath.py
@@ -243,11 +243,13 @@
def test_realpath(self):
self.assertIn("foo", self.pathmodule.realpath("foo"))
+ @test_support.requires_unicode
def test_normpath_issue5827(self):
# Make sure normpath preserves unicode
for path in (u'', u'.', u'/', u'\\', u'///foo/.//bar//'):
self.assertIsInstance(self.pathmodule.normpath(path), unicode)
+ @test_support.requires_unicode
def test_abspath_issue3426(self):
# Check that abspath returns unicode when the arg is unicode
# with both ASCII and non-ASCII cwds.
diff --git a/Lib/test/test_macpath.py b/Lib/test/test_macpath.py
index 96ad61f..be936de 100644
--- a/Lib/test/test_macpath.py
+++ b/Lib/test/test_macpath.py
@@ -59,6 +59,7 @@
self.assertEqual(splitext(""), ('', ''))
self.assertEqual(splitext("foo.bar.ext"), ('foo.bar', '.ext'))
+ @test_support.requires_unicode
def test_normpath(self):
# Issue 5827: Make sure normpath preserves unicode
for path in (u'', u'.', u'/', u'\\', u':', u'///foo/.//bar//'):
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
index 0fbe6a1..55da7e1 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -69,8 +69,9 @@
('', '\\\\conky\\\\mountpoint\\foo\\bar'))
tester('ntpath.splitunc("//conky//mountpoint/foo/bar")',
('', '//conky//mountpoint/foo/bar'))
- self.assertEqual(ntpath.splitunc(u'//conky/MOUNTPO\u0130NT/foo/bar'),
- (u'//conky/MOUNTPO\u0130NT', u'/foo/bar'))
+ if test_support.have_unicode:
+ self.assertEqual(ntpath.splitunc(u'//conky/MOUNTPO%cNT/foo/bar' % 0x0130),
+ (u'//conky/MOUNTPO%cNT' % 0x0130, u'/foo/bar'))
def test_split(self):
tester('ntpath.split("c:\\foo\\bar")', ('c:\\foo', 'bar'))
diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py
index f74dc14..295bf49 100644
--- a/Lib/test/test_posixpath.py
+++ b/Lib/test/test_posixpath.py
@@ -1,7 +1,9 @@
import unittest
from test import test_support, test_genericpath
-import posixpath, os
+import posixpath
+import os
+import sys
from posixpath import realpath, abspath, dirname, basename
# An absolute path to a temporary filename for testing. We can't rely on TESTFN
@@ -409,6 +411,21 @@
finally:
os.getcwd = real_getcwd
+ @test_support.requires_unicode
+ def test_expandvars_nonascii_word(self):
+ encoding = sys.getfilesystemencoding()
+ # Non-ASCII word characters
+ letters = test_support.u(r'\xe6\u0130\u0141\u03c6\u041a\u05d0\u062a\u0e01')
+ uwnonascii = letters.encode(encoding, 'ignore').decode(encoding)[:3]
+ swnonascii = uwnonascii.encode(encoding)
+ if not swnonascii:
+ self.skip('Needs non-ASCII word characters')
+ with test_support.EnvironmentVarGuard() as env:
+ env.clear()
+ env[swnonascii] = 'baz' + swnonascii
+ self.assertEqual(posixpath.expandvars(u'$%s bar' % uwnonascii),
+ u'baz%s bar' % uwnonascii)
+
class PosixCommonTest(test_genericpath.CommonTest):
pathmodule = posixpath