@@ -34,3 +34,64 @@ func Test_recursive_delete()
3434 call assert_false (isdirectory (' Xdir1' ))
3535 call assert_equal (-1 , delete (' Xdir1' , ' d' ))
3636endfunc
37+
38+ func Test_symlink_delete ()
39+ if ! has (' unix' )
40+ return
41+ endif
42+ split Xfile
43+ call setline (1 , [' a' , ' b' ])
44+ wq
45+ silent ! ln -s Xfile Xlink
46+ " Delete the link, not the file
47+ call assert_equal (0 , delete (' Xlink' ))
48+ call assert_equal (-1 , delete (' Xlink' ))
49+ call assert_equal (0 , delete (' Xfile' ))
50+ endfunc
51+
52+ func Test_symlink_dir_delete ()
53+ if ! has (' unix' )
54+ return
55+ endif
56+ call mkdir (' Xdir1' )
57+ silent ! ln -s Xdir1 Xlink
58+ call assert_true (isdirectory (' Xdir1' ))
59+ call assert_true (isdirectory (' Xlink' ))
60+ " Delete the link, not the directory
61+ call assert_equal (0 , delete (' Xlink' ))
62+ call assert_equal (-1 , delete (' Xlink' ))
63+ call assert_equal (0 , delete (' Xdir1' , ' d' ))
64+ endfunc
65+
66+ func Test_symlink_recursive_delete ()
67+ if ! has (' unix' )
68+ return
69+ endif
70+ call mkdir (' Xdir3' )
71+ call mkdir (' Xdir3/subdir' )
72+ call mkdir (' Xdir4' )
73+ split Xdir3/Xfile
74+ call setline (1 , [' a' , ' b' ])
75+ w
76+ w Xdir3/subdir/ Xfile
77+ w Xdir4/Xfile
78+ close
79+ silent ! ln -s ../Xdir4 Xdir3/Xlink
80+
81+ call assert_true (isdirectory (' Xdir3' ))
82+ call assert_equal ([' a' , ' b' ], readfile (' Xdir3/Xfile' ))
83+ call assert_true (isdirectory (' Xdir3/subdir' ))
84+ call assert_equal ([' a' , ' b' ], readfile (' Xdir3/subdir/Xfile' ))
85+ call assert_true (isdirectory (' Xdir4' ))
86+ call assert_true (isdirectory (' Xdir3/Xlink' ))
87+ call assert_equal ([' a' , ' b' ], readfile (' Xdir4/Xfile' ))
88+
89+ call assert_equal (0 , delete (' Xdir3' , ' rf' ))
90+ call assert_false (isdirectory (' Xdir3' ))
91+ call assert_equal (-1 , delete (' Xdir3' , ' d' ))
92+ " symlink is deleted, not the directory it points to
93+ call assert_true (isdirectory (' Xdir4' ))
94+ call assert_equal ([' a' , ' b' ], readfile (' Xdir4/Xfile' ))
95+ call assert_equal (0 , delete (' Xdir4/Xfile' ))
96+ call assert_equal (0 , delete (' Xdir4' , ' d' ))
97+ endfunc
0 commit comments