Skip to content

Commit 43e7456

Browse files
committed
Add tests
1 parent 603f12a commit 43e7456

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

Lib/test/test_pathlib.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2559,6 +2559,42 @@ def test_expanduser(self):
25592559
self.assertEqual(p6.expanduser(), p6)
25602560
self.assertRaises(RuntimeError, p7.expanduser)
25612561

2562+
@unittest.skipUnless(hasattr(pwd, 'getpwall'),
2563+
'pwd module does not expose getpwall()')
2564+
@unittest.skipIf(sys.platform == "vxworks",
2565+
"no home directory on VxWorks")
2566+
def test_home(self):
2567+
P = self.cls
2568+
import_helper.import_module('pwd')
2569+
import pwd
2570+
pwdent = pwd.getpwuid(os.getuid())
2571+
username = pwdent.pw_name
2572+
userhome = pwdent.pw_dir.rstrip('/') or '/'
2573+
# Find arbitrary different user (if exists).
2574+
for pwdent in pwd.getpwall():
2575+
othername = pwdent.pw_name
2576+
otherhome = pwdent.pw_dir.rstrip('/')
2577+
if othername != username and otherhome:
2578+
break
2579+
else:
2580+
othername = username
2581+
otherhome = userhome
2582+
2583+
with os_helper.EnvironmentVarGuard() as env:
2584+
env.pop('HOME', None)
2585+
2586+
self.assertEqual(P.home(), P(userhome))
2587+
self.assertEqual(P.home(username), P(userhome))
2588+
self.assertEqual(P.home(othername), P(otherhome))
2589+
self.assertRaises(RuntimeError, P.home, 'missinguser')
2590+
2591+
env['HOME'] = '/tmp'
2592+
2593+
self.assertEqual(P.home(), P('/tmp'))
2594+
self.assertEqual(P.home(username), P(userhome))
2595+
self.assertEqual(P.home(othername), P(otherhome))
2596+
self.assertRaises(RuntimeError, P.home, 'missinguser')
2597+
25622598
@unittest.skipIf(sys.platform != "darwin",
25632599
"Bad file descriptor in /dev/fd affects only macOS")
25642600
def test_handling_bad_descriptor(self):
@@ -2654,6 +2690,43 @@ def check():
26542690
env['HOME'] = 'C:\\Users\\eve'
26552691
check()
26562692

2693+
def test_home(self):
2694+
P = self.cls
2695+
with os_helper.EnvironmentVarGuard() as env:
2696+
env.pop('HOME', None)
2697+
env.pop('USERPROFILE', None)
2698+
env.pop('HOMEPATH', None)
2699+
env.pop('HOMEDRIVE', None)
2700+
env['USERNAME'] = 'alice'
2701+
2702+
self.assertRaises(RuntimeError, P.home)
2703+
self.assertRaises(RuntimeError, P.home, 'alice')
2704+
self.assertRaises(RuntimeError, P.home, 'bob')
2705+
2706+
def check():
2707+
env.pop('USERNAME', None)
2708+
self.assertEqual(P.home(), P('C:/Users/alice'))
2709+
self.assertRaises(RuntimeError, P.home, 'alice')
2710+
env['USERNAME'] = 'alice'
2711+
self.assertEqual(P.home('alice'), P('C:/Users/alice'))
2712+
self.assertEqual(P.home('bob'), P('C:/Users/bob'))
2713+
2714+
env['HOMEPATH'] = 'C:\\Users\\alice'
2715+
check()
2716+
2717+
env['HOMEDRIVE'] = 'C:\\'
2718+
env['HOMEPATH'] = 'Users\\alice'
2719+
check()
2720+
2721+
env.pop('HOMEDRIVE', None)
2722+
env.pop('HOMEPATH', None)
2723+
env['USERPROFILE'] = 'C:\\Users\\alice'
2724+
check()
2725+
2726+
# bpo-38883: ignore `HOME` when set on windows
2727+
env['HOME'] = 'C:\\Users\\eve'
2728+
check()
2729+
26572730

26582731
class CompatiblePathTest(unittest.TestCase):
26592732
"""

0 commit comments

Comments
 (0)