@@ -1523,43 +1523,47 @@ def test_pidfd_open(self):
15231523
15241524 @unittest .skipUnless (hasattr (os , "link" ), "test needs os.link()" )
15251525 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' ))
15261529 orig = os_helper .TESTFN
15271530 symlink = orig + 'symlink'
15281531 posix .symlink (orig , symlink )
15291532 self .addCleanup (os_helper .unlink , symlink )
15301533
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 ))
15411543
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 ))
15521555
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 ))
15631567
15641568
15651569# tests for the posix *at functions follow
0 commit comments