1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
" Test for delete().
source check.vim
source term_util.vim
source screendump.vim
func Test_file_delete()
split Xfdelfile
call setline(1, ['a', 'b'])
wq
call assert_equal(['a', 'b'], readfile('Xfdelfile'))
call assert_equal(0, delete('Xfdelfile'))
call assert_fails('call readfile("Xfdelfile")', 'E484:')
call assert_equal(-1, delete('Xfdelfile'))
bwipe Xfdelfile
endfunc
func Test_dir_delete()
call mkdir('Xdirdel')
call assert_true(isdirectory('Xdirdel'))
call assert_equal(0, delete('Xdirdel', 'd'))
call assert_false(isdirectory('Xdirdel'))
call assert_equal(-1, delete('Xdirdel', 'd'))
endfunc
func Test_recursive_delete()
call mkdir('Xrecdel')
call mkdir('Xrecdel/subdir')
call mkdir('Xrecdel/empty')
split Xrecdel/Xfile
call setline(1, ['a', 'b'])
w
w Xrecdel/subdir/Xfile
close
call assert_true(isdirectory('Xrecdel'))
call assert_equal(['a', 'b'], readfile('Xrecdel/Xfile'))
call assert_true(isdirectory('Xrecdel/subdir'))
call assert_equal(['a', 'b'], readfile('Xrecdel/subdir/Xfile'))
call assert_true('Xrecdel/empty'->isdirectory())
call assert_equal(0, delete('Xrecdel', 'rf'))
call assert_false(isdirectory('Xrecdel'))
call assert_equal(-1, delete('Xrecdel', 'd'))
bwipe Xrecdel/Xfile
bwipe Xrecdel/subdir/Xfile
endfunc
func Test_symlink_delete()
CheckUnix
split Xslfile
call setline(1, ['a', 'b'])
wq
silent !ln -s Xslfile Xdellink
" Delete the link, not the file
call assert_equal(0, delete('Xdellink'))
call assert_equal(-1, delete('Xdellink'))
call assert_equal(0, delete('Xslfile'))
bwipe Xslfile
endfunc
func Test_symlink_dir_delete()
CheckUnix
call mkdir('Xsymdir')
silent !ln -s Xsymdir Xdirlink
call assert_true(isdirectory('Xsymdir'))
call assert_true(isdirectory('Xdirlink'))
" Delete the link, not the directory
call assert_equal(0, delete('Xdirlink'))
call assert_equal(-1, delete('Xdirlink'))
call assert_equal(0, delete('Xsymdir', 'd'))
endfunc
func Test_symlink_recursive_delete()
CheckUnix
call mkdir('Xrecdir3')
call mkdir('Xrecdir3/subdir')
call mkdir('Xrecdir4')
split Xrecdir3/Xfile
call setline(1, ['a', 'b'])
w
w Xrecdir3/subdir/Xfile
w Xrecdir4/Xfile
close
silent !ln -s ../Xrecdir4 Xrecdir3/Xreclink
call assert_true(isdirectory('Xrecdir3'))
call assert_equal(['a', 'b'], readfile('Xrecdir3/Xfile'))
call assert_true(isdirectory('Xrecdir3/subdir'))
call assert_equal(['a', 'b'], readfile('Xrecdir3/subdir/Xfile'))
call assert_true(isdirectory('Xrecdir4'))
call assert_true(isdirectory('Xrecdir3/Xreclink'))
call assert_equal(['a', 'b'], readfile('Xrecdir4/Xfile'))
call assert_equal(0, delete('Xrecdir3', 'rf'))
call assert_false(isdirectory('Xrecdir3'))
call assert_equal(-1, delete('Xrecdir3', 'd'))
" symlink is deleted, not the directory it points to
call assert_true(isdirectory('Xrecdir4'))
call assert_equal(['a', 'b'], readfile('Xrecdir4/Xfile'))
call assert_equal(0, delete('Xrecdir4/Xfile'))
call assert_equal(0, delete('Xrecdir4', 'd'))
bwipe Xrecdir3/Xfile
bwipe Xrecdir3/subdir/Xfile
bwipe Xrecdir4/Xfile
endfunc
func Test_delete_errors()
call assert_fails('call delete('''')', 'E474:')
call assert_fails('call delete(''foo'', 0)', 'E15:')
endfunc
" This should no longer trigger ml_get errors
func Test_delete_ml_get_errors()
CheckRunVimInTerminal
let lines =<< trim END
set noshowcmd noruler scrolloff=0
source samples/matchparen.vim
END
call writefile(lines, 'XDelete_ml_get_error', 'D')
let buf = RunVimInTerminal('-S XDelete_ml_get_error samples/box.txt', #{rows: 10, wait_for_ruler: 0})
call TermWait(buf)
call term_sendkeys(buf, "249GV\<C-End>d")
call TermWait(buf)
" The following used to trigger ml_get errors
call term_sendkeys(buf, "\<PageUp>")
call TermWait(buf)
call term_sendkeys(buf, ":mess\<cr>")
call VerifyScreenDump(buf, 'Test_delete_ml_get_errors_1', {})
call term_sendkeys(buf, ":q!\<cr>")
call StopVimInTerminal(buf)
endfunc
" vim: shiftwidth=2 sts=2 expandtab
|