diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py index bfd38d92e04..15f12e44c36 100644 --- a/Lib/test/test_genericpath.py +++ b/Lib/test/test_genericpath.py @@ -174,6 +174,19 @@ class AllCommonTest(unittest.TestCase): self.assertRaises(TypeError, genericpath.samefile) + +# XXX at some point this should probably go in some class that contains common +# tests for all test_*path modules. +def _issue3426(self, cwd, abspath): + # 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 + with test_support.temp_cwd(cwd): + for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'): + self.assertIsInstance(abspath(path), str) + for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): + self.assertIsInstance(abspath(upath), unicode) + + def test_main(): test_support.run_unittest(AllCommonTest) diff --git a/Lib/test/test_macpath.py b/Lib/test/test_macpath.py index c93177fe36c..f477ddb42bb 100644 --- a/Lib/test/test_macpath.py +++ b/Lib/test/test_macpath.py @@ -1,6 +1,7 @@ import macpath from test import test_support import unittest +import test_genericpath class MacPathTestCase(unittest.TestCase): @@ -8,15 +9,11 @@ class MacPathTestCase(unittest.TestCase): def test_abspath(self): self.assertEqual(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_abspath_with_ascii_cwd(self): + test_genericpath._issue3426(self, u'cwd', macpath.abspath) + def test_abspath_with_nonascii_cwd(self): + test_genericpath._issue3426(self, u'\xe7w\xf0', macpath.abspath) def test_isabs(self): isabs = macpath.isabs diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py index da5d174581f..23a88e3a7f4 100644 --- a/Lib/test/test_posixpath.py +++ b/Lib/test/test_posixpath.py @@ -1,6 +1,8 @@ import unittest from test import test_support +import test_genericpath + import posixpath, os from posixpath import realpath, abspath, dirname, basename @@ -382,18 +384,14 @@ class PosixPathTest(unittest.TestCase): def test_abspath(self): self.assertIn("foo", 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_abspath_with_ascii_cwd(self): + test_genericpath._issue3426(self, u'cwd', posixpath.abspath) + + def test_abspath_with_nonascii_cwd(self): + test_genericpath._issue3426(self, u'\xe7w\xf0', posixpath.abspath) + def test_realpath(self): self.assertIn("foo", realpath("foo")) self.assertRaises(TypeError, posixpath.realpath) diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 0732ccee92b..db575332dd4 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -397,6 +397,13 @@ def temp_cwd(name='tempcwd', quiet=False): the CWD, an error is raised. If it's True, only a warning is raised and the original CWD is used. """ + if isinstance(name, unicode): + try: + name = name.encode(sys.getfilesystemencoding() or 'ascii') + except UnicodeEncodeError: + if not quiet: + raise unittest.SkipTest('unable to encode the cwd name with ' + 'the filesystem encoding.') saved_dir = os.getcwd() is_temporary = False try: