]> granicus.if.org Git - python/commitdiff
Backported test for posixpath.expanduser().
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 3 May 2016 19:15:29 +0000 (22:15 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Tue, 3 May 2016 19:15:29 +0000 (22:15 +0300)
Lib/test/test_posixpath.py

index 686b6b9ff60378eeac6ba1d4e58ab58ffe0f0a2a..fbb18fd22bd02bf35d02822b20730321784c17ef 100644 (file)
@@ -198,6 +198,12 @@ class PosixPathTest(unittest.TestCase):
 
     def test_expanduser(self):
         self.assertEqual(posixpath.expanduser("foo"), "foo")
+        with test_support.EnvironmentVarGuard() as env:
+            for home in '/', '', '//', '///':
+                env['HOME'] = home
+                self.assertEqual(posixpath.expanduser("~"), "/")
+                self.assertEqual(posixpath.expanduser("~/"), "/")
+                self.assertEqual(posixpath.expanduser("~/foo"), "/foo")
         try:
             import pwd
         except ImportError:
@@ -214,9 +220,12 @@ class PosixPathTest(unittest.TestCase):
             self.assertIsInstance(posixpath.expanduser("~foo/"), basestring)
 
             with test_support.EnvironmentVarGuard() as env:
-                env['HOME'] = '/'
-                self.assertEqual(posixpath.expanduser("~"), "/")
-                self.assertEqual(posixpath.expanduser("~/foo"), "/foo")
+                # expanduser should fall back to using the password database
+                del env['HOME']
+                home = pwd.getpwuid(os.getuid()).pw_dir
+                # $HOME can end with a trailing /, so strip it (see #17809)
+                home = home.rstrip("/") or '/'
+                self.assertEqual(posixpath.expanduser("~"), home)
 
     def test_normpath(self):
         self.assertEqual(posixpath.normpath(""), ".")