diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py
index bfd38d9..15f12e4 100644
--- a/Lib/test/test_genericpath.py
+++ b/Lib/test/test_genericpath.py
@@ -174,6 +174,19 @@
 
             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 c93177f..f477ddb 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 @@
     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 da5d174..23a88e3 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 @@
 
     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 0732cce..db57533 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -397,6 +397,13 @@
     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:
