@@ -968,6 +968,30 @@ def test_list_file_names(tmpdir, files, path, filetype, expected, recursive, hid
968
968
assert f == expected
969
969
970
970
971
+ def test_list_file_names_symlinks (tmpdir ):
972
+ # symlinks in folder
973
+ folder = audeer .mkdir (tmpdir , "folder" )
974
+ file = audeer .touch (folder , "file.txt" )
975
+ link = audeer .path (folder , "link.txt" )
976
+ os .symlink (file , link )
977
+ files = audeer .list_file_names (folder , basenames = True )
978
+ assert files == ["file.txt" , "link.txt" ]
979
+ os .remove (link )
980
+ # symlinks to sub-folders
981
+ sub_folder = audeer .mkdir (folder , "sub-folder" )
982
+ audeer .touch (sub_folder , "file2.txt" )
983
+ link = audeer .path (folder , "link" )
984
+ os .symlink (sub_folder , link )
985
+ files = audeer .list_file_names (folder , basenames = True )
986
+ assert files == ["file.txt" ]
987
+ files = audeer .list_file_names (folder , basenames = True , recursive = True )
988
+ assert files == [
989
+ "file.txt" ,
990
+ os .path .join ("link" , "file2.txt" ),
991
+ os .path .join ("sub-folder" , "file2.txt" ),
992
+ ]
993
+
994
+
971
995
def test_md5_errors ():
972
996
with pytest .raises (FileNotFoundError ):
973
997
audeer .md5 ("does/not/exist" )
@@ -1072,6 +1096,33 @@ def test_md5_folder(tmpdir, tree, content, expected):
1072
1096
assert audeer .md5 (tmpdir ) == expected
1073
1097
1074
1098
1099
+ def test_md5_symbolic_link (tmpdir ):
1100
+ # Link to a file
1101
+ file = audeer .touch (tmpdir , "file.txt" )
1102
+ link = audeer .path (tmpdir , "link.txt" )
1103
+ os .symlink (file , link )
1104
+ assert audeer .md5 (file ) == audeer .md5 (link )
1105
+ os .remove (file )
1106
+ os .remove (link )
1107
+ # Link to a folder
1108
+ folder = audeer .mkdir (tmpdir , "folder" )
1109
+ file = audeer .touch (folder , "file.txt" )
1110
+ link = audeer .path (tmpdir , "link" )
1111
+ os .symlink (folder , link )
1112
+ assert audeer .md5 (folder ) == audeer .md5 (link )
1113
+ os .remove (link )
1114
+ # Link to file in folder
1115
+ md5_single_file = audeer .md5 (folder )
1116
+ link = audeer .path (folder , "link.txt" )
1117
+ os .symlink (file , link )
1118
+ md5_link = audeer .md5 (folder )
1119
+ os .remove (link )
1120
+ audeer .touch (folder , "link.txt" )
1121
+ md5_file = audeer .md5 (folder )
1122
+ assert md5_link == md5_file
1123
+ assert md5_file != md5_single_file
1124
+
1125
+
1075
1126
def test_mkdir (tmpdir ):
1076
1127
# New dir
1077
1128
path = str (tmpdir .mkdir ("folder1" ))
0 commit comments