@@ -1523,43 +1523,47 @@ def test_pidfd_open(self):
1523
1523
1524
1524
@unittest .skipUnless (hasattr (os , "link" ), "test needs os.link()" )
1525
1525
def test_link_follow_symlinks (self ):
1526
+ default_follow = sys .platform .startswith (
1527
+ ('darwin' , 'freebsd' , 'netbsd' , 'openbsd' , 'dragonfly' , 'sunos5' ))
1528
+ default_no_follow = sys .platform .startswith (('win32' , 'linux' ))
1526
1529
orig = os_helper .TESTFN
1527
1530
symlink = orig + 'symlink'
1528
1531
posix .symlink (orig , symlink )
1529
1532
self .addCleanup (os_helper .unlink , symlink )
1530
1533
1531
- link = orig + 'link'
1532
- posix .link (symlink , link )
1533
- self .addCleanup (os_helper .unlink , link )
1534
- default_follow = sys .platform .startswith (
1535
- ('darwin' , 'freebsd' , 'netbsd' , 'openbsd' , 'dragonfly' , 'sunos5' ))
1536
- default_no_follow = sys .platform .startswith (('win32' , 'linux' ))
1537
- if os .link in os .supports_follow_symlinks or default_follow :
1538
- self .assertEqual (posix .lstat (link ), posix .lstat (orig ))
1539
- elif default_no_follow :
1540
- self .assertEqual (posix .lstat (link ), posix .lstat (symlink ))
1534
+ with self .subTest ('no follow_symlinks' ):
1535
+ # no follow_symlinks -> platform depending
1536
+ link = orig + 'link'
1537
+ posix .link (symlink , link )
1538
+ self .addCleanup (os_helper .unlink , link )
1539
+ if os .link in os .supports_follow_symlinks or default_follow :
1540
+ self .assertEqual (posix .lstat (link ), posix .lstat (orig ))
1541
+ elif default_no_follow :
1542
+ self .assertEqual (posix .lstat (link ), posix .lstat (symlink ))
1541
1543
1542
- # follow_symlinks=False -> duplicate the symlink itself
1543
- link_nofollow = orig + 'link_nofollow'
1544
- try :
1545
- posix .link (symlink , link_nofollow , follow_symlinks = False )
1546
- except NotImplementedError :
1547
- if os .link in os .supports_follow_symlinks or default_no_follow :
1548
- raise
1549
- else :
1550
- self .addCleanup (os_helper .unlink , link_nofollow )
1551
- self .assertEqual (posix .lstat (link_nofollow ), posix .lstat (symlink ))
1544
+ with self .subTest ('follow_symlinks=False' ):
1545
+ # follow_symlinks=False -> duplicate the symlink itself
1546
+ link = orig + 'link_nofollow'
1547
+ try :
1548
+ posix .link (symlink , link , follow_symlinks = False )
1549
+ except NotImplementedError :
1550
+ if os .link in os .supports_follow_symlinks or default_no_follow :
1551
+ raise
1552
+ else :
1553
+ self .addCleanup (os_helper .unlink , link )
1554
+ self .assertEqual (posix .lstat (link ), posix .lstat (symlink ))
1552
1555
1553
- # follow_symlinks=True -> duplicate the target file
1554
- link_following = orig + 'link_following'
1555
- try :
1556
- posix .link (symlink , link_following , follow_symlinks = True )
1557
- except NotImplementedError :
1558
- if os .link in os .supports_follow_symlinks or default_follow :
1559
- raise
1560
- else :
1561
- self .addCleanup (os_helper .unlink , link_following )
1562
- self .assertEqual (posix .lstat (link_following ), posix .lstat (orig ))
1556
+ with self .subTest ('follow_symlinks=True' ):
1557
+ # follow_symlinks=True -> duplicate the target file
1558
+ link = orig + 'link_following'
1559
+ try :
1560
+ posix .link (symlink , link , follow_symlinks = True )
1561
+ except NotImplementedError :
1562
+ if os .link in os .supports_follow_symlinks or default_follow :
1563
+ raise
1564
+ else :
1565
+ self .addCleanup (os_helper .unlink , link )
1566
+ self .assertEqual (posix .lstat (link ), posix .lstat (orig ))
1563
1567
1564
1568
1565
1569
# tests for the posix *at functions follow
0 commit comments