blob: 1a0e4aff280909c21338742c0932657d4b8f5835 [file] [log] [blame]
Bram Moolenaar72defda2016-01-17 18:04:33 +01001" Test argument list commands
2
3func Test_argidx()
4 args a b c
5 last
6 call assert_equal(2, argidx())
7 %argdelete
8 call assert_equal(0, argidx())
Bram Moolenaar69a92fb2017-03-09 15:58:30 +01009 " doing it again doesn't result in an error
10 %argdelete
11 call assert_equal(0, argidx())
12 call assert_fails('2argdelete', 'E16:')
Bram Moolenaar72defda2016-01-17 18:04:33 +010013
14 args a b c
15 call assert_equal(0, argidx())
16 next
17 call assert_equal(1, argidx())
18 next
19 call assert_equal(2, argidx())
20 1argdelete
21 call assert_equal(1, argidx())
22 1argdelete
23 call assert_equal(0, argidx())
24 1argdelete
25 call assert_equal(0, argidx())
26endfunc
Bram Moolenaara24f0a52016-01-17 19:39:00 +010027
28func Test_argadd()
29 %argdelete
30 argadd a b c
31 call assert_equal(0, argidx())
32
33 %argdelete
34 argadd a
35 call assert_equal(0, argidx())
36 argadd b c d
37 call assert_equal(0, argidx())
38
39 call Init_abc()
40 argadd x
41 call Assert_argc(['a', 'b', 'x', 'c'])
42 call assert_equal(1, argidx())
43
44 call Init_abc()
45 0argadd x
46 call Assert_argc(['x', 'a', 'b', 'c'])
47 call assert_equal(2, argidx())
48
49 call Init_abc()
50 1argadd x
51 call Assert_argc(['a', 'x', 'b', 'c'])
52 call assert_equal(2, argidx())
53
54 call Init_abc()
55 $argadd x
56 call Assert_argc(['a', 'b', 'c', 'x'])
57 call assert_equal(1, argidx())
58
59 call Init_abc()
60 $argadd x
61 +2argadd y
62 call Assert_argc(['a', 'b', 'c', 'x', 'y'])
63 call assert_equal(1, argidx())
Bram Moolenaar2faa29f2016-01-23 23:02:34 +010064
65 %argd
66 edit d
67 arga
68 call assert_equal(len(argv()), 1)
69 call assert_equal(get(argv(), 0, ''), 'd')
70
71 %argd
72 new
73 arga
74 call assert_equal(len(argv()), 0)
Bram Moolenaara24f0a52016-01-17 19:39:00 +010075endfunc
76
77func Init_abc()
78 args a b c
79 next
80endfunc
81
82func Assert_argc(l)
83 call assert_equal(len(a:l), argc())
84 let i = 0
85 while i < len(a:l) && i < argc()
86 call assert_equal(a:l[i], argv(i))
87 let i += 1
88 endwhile
89endfunc
Bram Moolenaar99dbe292016-01-19 13:07:23 +010090
91" Test for [count]argument and [count]argdelete commands
92" Ported from the test_argument_count.in test script
Bram Moolenaar8c34aa02017-03-16 22:52:32 +010093func Test_argument()
Bram Moolenaar99dbe292016-01-19 13:07:23 +010094 " Clean the argument list
95 arga a | %argd
96
97 let save_hidden = &hidden
98 set hidden
99
100 let g:buffers = []
101 augroup TEST
102 au BufEnter * call add(buffers, expand('%:t'))
103 augroup END
104
105 argadd a b c d
106 $argu
107 $-argu
108 -argu
109 1argu
110 +2argu
111
112 augroup TEST
113 au!
114 augroup END
115
116 call assert_equal(['d', 'c', 'b', 'a', 'c'], g:buffers)
117
118 redir => result
119 ar
120 redir END
121 call assert_true(result =~# 'a b \[c] d')
122
123 .argd
124 call assert_equal(['a', 'b', 'd'], argv())
125
126 -argd
127 call assert_equal(['a', 'd'], argv())
128
129 $argd
130 call assert_equal(['a'], argv())
131
132 1arga c
133 1arga b
134 $argu
135 $arga x
136 call assert_equal(['a', 'b', 'c', 'x'], argv())
137
Bram Moolenaar30141702016-01-19 14:14:08 +0100138 0arga y
139 call assert_equal(['y', 'a', 'b', 'c', 'x'], argv())
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100140
141 %argd
142 call assert_equal([], argv())
143
144 arga a b c d e f
145 2,$-argd
146 call assert_equal(['a', 'f'], argv())
147
148 let &hidden = save_hidden
149
150 " Setting argument list should fail when the current buffer has unsaved
151 " changes
152 %argd
153 enew!
154 set modified
155 call assert_fails('args x y z', 'E37:')
156 args! x y z
157 call assert_equal(['x', 'y', 'z'], argv())
158 call assert_equal('x', expand('%:t'))
159
160 last | enew | argu
161 call assert_equal('z', expand('%:t'))
162
163 %argdelete
164 call assert_fails('argument', 'E163:')
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100165endfunc
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100166
167" Test for 0argadd and 0argedit
168" Ported from the test_argument_0count.in test script
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100169func Test_zero_argadd()
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100170 " Clean the argument list
171 arga a | %argd
172
173 arga a b c d
174 2argu
175 0arga added
176 call assert_equal(['added', 'a', 'b', 'c', 'd'], argv())
177
178 2argu
179 arga third
180 call assert_equal(['added', 'a', 'third', 'b', 'c', 'd'], argv())
181
182 %argd
183 arga a b c d
184 2argu
185 0arge edited
186 call assert_equal(['edited', 'a', 'b', 'c', 'd'], argv())
187
188 2argu
189 arga third
190 call assert_equal(['edited', 'a', 'third', 'b', 'c', 'd'], argv())
Bram Moolenaar90305c62017-07-16 15:31:17 +0200191
192 2argu
193 argedit file\ with\ spaces another file
194 call assert_equal(['edited', 'a', 'file with spaces', 'another', 'file', 'third', 'b', 'c', 'd'], argv())
195 call assert_equal('file with spaces', expand('%'))
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100196endfunc
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100197
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100198func Reset_arglist()
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100199 args a | %argd
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100200endfunc
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100201
202" Test for argc()
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100203func Test_argc()
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100204 call Reset_arglist()
205 call assert_equal(0, argc())
206 argadd a b
207 call assert_equal(2, argc())
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100208endfunc
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100209
210" Test for arglistid()
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100211func Test_arglistid()
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100212 call Reset_arglist()
213 arga a b
214 call assert_equal(0, arglistid())
215 split
216 arglocal
217 call assert_equal(1, arglistid())
218 tabnew | tabfirst
219 call assert_equal(0, arglistid(2))
220 call assert_equal(1, arglistid(1, 1))
221 call assert_equal(0, arglistid(2, 1))
222 call assert_equal(1, arglistid(1, 2))
223 tabonly | only | enew!
224 argglobal
225 call assert_equal(0, arglistid())
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100226endfunc
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100227
228" Test for argv()
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100229func Test_argv()
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100230 call Reset_arglist()
231 call assert_equal([], argv())
232 call assert_equal("", argv(2))
233 argadd a b c d
234 call assert_equal('c', argv(2))
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100235endfunc
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100236
237" Test for the :argedit command
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100238func Test_argedit()
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100239 call Reset_arglist()
240 argedit a
241 call assert_equal(['a'], argv())
242 call assert_equal('a', expand('%:t'))
243 argedit b
244 call assert_equal(['a', 'b'], argv())
245 call assert_equal('b', expand('%:t'))
246 argedit a
Bram Moolenaar90305c62017-07-16 15:31:17 +0200247 call assert_equal(['a', 'b', 'a'], argv())
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100248 call assert_equal('a', expand('%:t'))
Bram Moolenaar90305c62017-07-16 15:31:17 +0200249 argedit C D
250 call assert_equal('C', expand('%:t'))
251 call assert_equal(['a', 'b', 'a', 'C', 'D'], argv())
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100252 argedit c
Bram Moolenaar90305c62017-07-16 15:31:17 +0200253 call assert_equal(['a', 'b', 'a', 'C', 'c', 'D'], argv())
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100254 0argedit x
Bram Moolenaar90305c62017-07-16 15:31:17 +0200255 call assert_equal(['x', 'a', 'b', 'a', 'C', 'c', 'D'], argv())
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100256 enew! | set modified
257 call assert_fails('argedit y', 'E37:')
258 argedit! y
Bram Moolenaar90305c62017-07-16 15:31:17 +0200259 call assert_equal(['x', 'y', 'y', 'a', 'b', 'a', 'C', 'c', 'D'], argv())
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100260 %argd
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100261endfunc
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100262
263" Test for the :argdelete command
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100264func Test_argdelete()
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100265 call Reset_arglist()
266 args aa a aaa b bb
267 argdelete a*
268 call assert_equal(['b', 'bb'], argv())
269 call assert_equal('aa', expand('%:t'))
270 last
271 argdelete %
272 call assert_equal(['b'], argv())
273 call assert_fails('argdelete', 'E471:')
274 call assert_fails('1,100argdelete', 'E16:')
275 %argd
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100276endfunc
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100277
278" Tests for the :next, :prev, :first, :last, :rewind commands
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100279func Test_argpos()
Bram Moolenaar99dbe292016-01-19 13:07:23 +0100280 call Reset_arglist()
281 args a b c d
282 last
283 call assert_equal(3, argidx())
284 call assert_fails('next', 'E165:')
285 prev
286 call assert_equal(2, argidx())
287 Next
288 call assert_equal(1, argidx())
289 first
290 call assert_equal(0, argidx())
291 call assert_fails('prev', 'E164:')
292 3next
293 call assert_equal(3, argidx())
294 rewind
295 call assert_equal(0, argidx())
296 %argd
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100297endfunc
Bram Moolenaar53f16732016-09-07 20:46:39 +0200298
299" Test for autocommand that redefines the argument list, when doing ":all".
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100300func Test_arglist_autocmd()
Bram Moolenaar53f16732016-09-07 20:46:39 +0200301 autocmd BufReadPost Xxx2 next Xxx2 Xxx1
302 call writefile(['test file Xxx1'], 'Xxx1')
303 call writefile(['test file Xxx2'], 'Xxx2')
304 call writefile(['test file Xxx3'], 'Xxx3')
305
306 new
307 " redefine arglist; go to Xxx1
308 next! Xxx1 Xxx2 Xxx3
309 " open window for all args
310 all
311 call assert_equal('test file Xxx1', getline(1))
312 wincmd w
313 wincmd w
314 call assert_equal('test file Xxx1', getline(1))
315 " should now be in Xxx2
316 rewind
317 call assert_equal('test file Xxx2', getline(1))
318
319 autocmd! BufReadPost Xxx2
320 enew! | only
321 call delete('Xxx1')
322 call delete('Xxx2')
323 call delete('Xxx3')
324 argdelete Xxx*
325 bwipe! Xxx1 Xxx2 Xxx3
Bram Moolenaar8c34aa02017-03-16 22:52:32 +0100326endfunc
327
328func Test_arg_all_expand()
329 call writefile(['test file Xxx1'], 'Xx x')
330 next notexist Xx\ x runtest.vim
331 call assert_equal('notexist Xx\ x runtest.vim', expand('##'))
332 call delete('Xx x')
333endfunc