blob: 0081d89a52a488d644f570d314bce2336251c0b0 [file] [log] [blame]
Bram Moolenaarfabaf752017-12-23 17:26:11 +01001" Tests for various eval things.
2
Bram Moolenaar2b6ef852020-07-11 22:25:57 +02003source view_util.vim
Bram Moolenaar35d21c62022-09-02 16:47:16 +01004source shared.vim
Bram Moolenaar2b6ef852020-07-11 22:25:57 +02005
Bram Moolenaarfabaf752017-12-23 17:26:11 +01006function s:foo() abort
7 try
8 return [] == 0
9 catch
10 return 1
11 endtry
12endfunction
13
14func Test_catch_return_with_error()
15 call assert_equal(1, s:foo())
16endfunc
Bram Moolenaar2be57332018-02-13 18:05:18 +010017
18func Test_nocatch_restore_silent_emsg()
19 silent! try
20 throw 1
21 catch
22 endtry
Bram Moolenaar2b6ef852020-07-11 22:25:57 +020023 echoerr 'wrong again'
24 call assert_equal('wrong again', ScreenLine(&lines))
Bram Moolenaar2be57332018-02-13 18:05:18 +010025endfunc
Bram Moolenaar78a16b02018-04-14 13:51:55 +020026
27func Test_mkdir_p()
28 call mkdir('Xmkdir/nested', 'p')
29 call assert_true(isdirectory('Xmkdir/nested'))
30 try
31 " Trying to make existing directories doesn't error
32 call mkdir('Xmkdir', 'p')
33 call mkdir('Xmkdir/nested', 'p')
34 catch /E739:/
35 call assert_report('mkdir(..., "p") failed for an existing directory')
36 endtry
37 " 'p' doesn't suppress real errors
Bram Moolenaarb18b4962022-09-02 21:55:50 +010038 call writefile([], 'Xmkdirfile')
39 call assert_fails('call mkdir("Xmkdirfile", "p")', 'E739:')
40 call delete('Xmkdirfile')
Bram Moolenaar78a16b02018-04-14 13:51:55 +020041 call delete('Xmkdir', 'rf')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +020042 call assert_equal(0, mkdir(test_null_string()))
Bram Moolenaare2e40752020-09-04 21:18:46 +020043 call assert_fails('call mkdir([])', 'E730:')
44 call assert_fails('call mkdir("abc", [], [])', 'E745:')
Bram Moolenaar78a16b02018-04-14 13:51:55 +020045endfunc
Bram Moolenaar67f8ab82018-09-11 22:37:29 +020046
Bram Moolenaar6f14da12022-09-07 21:30:44 +010047func DoMkdirDel(name)
48 call mkdir(a:name, 'pD')
49 call assert_true(isdirectory(a:name))
50endfunc
51
52func DoMkdirDelAddFile(name)
53 call mkdir(a:name, 'pD')
54 call assert_true(isdirectory(a:name))
55 call writefile(['text'], a:name .. '/file')
56endfunc
57
58func DoMkdirDelRec(name)
59 call mkdir(a:name, 'pR')
60 call assert_true(isdirectory(a:name))
61endfunc
62
63func DoMkdirDelRecAddFile(name)
64 call mkdir(a:name, 'pR')
65 call assert_true(isdirectory(a:name))
66 call writefile(['text'], a:name .. '/file')
67endfunc
68
69func Test_mkdir_defer_del()
70 " Xtopdir/tmp is created thus deleted, not Xtopdir itself
71 call mkdir('Xtopdir', 'R')
72 call DoMkdirDel('Xtopdir/tmp')
73 call assert_true(isdirectory('Xtopdir'))
74 call assert_false(isdirectory('Xtopdir/tmp'))
75
76 " Deletion fails because "tmp" contains "sub"
77 call DoMkdirDel('Xtopdir/tmp/sub')
78 call assert_true(isdirectory('Xtopdir'))
79 call assert_true(isdirectory('Xtopdir/tmp'))
80 call delete('Xtopdir/tmp', 'rf')
81
82 " Deletion fails because "tmp" contains "file"
83 call DoMkdirDelAddFile('Xtopdir/tmp')
84 call assert_true(isdirectory('Xtopdir'))
85 call assert_true(isdirectory('Xtopdir/tmp'))
86 call assert_true(filereadable('Xtopdir/tmp/file'))
87 call delete('Xtopdir/tmp', 'rf')
88
89 " Xtopdir/tmp is created thus deleted, not Xtopdir itself
90 call DoMkdirDelRec('Xtopdir/tmp')
91 call assert_true(isdirectory('Xtopdir'))
92 call assert_false(isdirectory('Xtopdir/tmp'))
93
94 " Deletion works even though "tmp" contains "sub"
95 call DoMkdirDelRec('Xtopdir/tmp/sub')
96 call assert_true(isdirectory('Xtopdir'))
97 call assert_false(isdirectory('Xtopdir/tmp'))
98
99 " Deletion works even though "tmp" contains "file"
100 call DoMkdirDelRecAddFile('Xtopdir/tmp')
101 call assert_true(isdirectory('Xtopdir'))
102 call assert_false(isdirectory('Xtopdir/tmp'))
103endfunc
104
Bram Moolenaar67f8ab82018-09-11 22:37:29 +0200105func Test_line_continuation()
106 let array = [5,
107 "\ ignore this
108 \ 6,
109 "\ more to ignore
110 "\ more moreto ignore
111 \ ]
112 "\ and some more
113 call assert_equal([5, 6], array)
114endfunc
Bram Moolenaar88b53fd2018-12-05 18:43:28 +0100115
116func Test_E963()
117 " These commands used to cause an internal error prior to vim 8.1.0563
118 let v_e = v:errors
119 let v_o = v:oldfiles
120 call assert_fails("let v:errors=''", 'E963:')
121 call assert_equal(v_e, v:errors)
122 call assert_fails("let v:oldfiles=''", 'E963:')
123 call assert_equal(v_o, v:oldfiles)
124endfunc
Bram Moolenaarc0f5a782019-01-13 15:16:13 +0100125
126func Test_for_invalid()
Sean Dewar80d73952021-08-04 19:25:54 +0200127 call assert_fails("for x in 99", 'E1098:')
128 call assert_fails("for x in function('winnr')", 'E1098:')
129 call assert_fails("for x in {'a': 9}", 'E1098:')
Bram Moolenaardf2c2982021-01-28 20:18:08 +0100130
131 if 0
132 /1/5/2/s/\n
133 endif
134 redraw
Bram Moolenaarc0f5a782019-01-13 15:16:13 +0100135endfunc
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100136
Bram Moolenaarf6d39c32022-08-16 17:50:38 +0100137func Test_for_over_null_string()
138 let save_enc = &enc
139 set enc=iso8859
140 let cnt = 0
141 for c in test_null_string()
142 let cnt += 1
143 endfor
144 call assert_equal(0, cnt)
145
146 let &enc = save_enc
147endfunc
148
Bram Moolenaar35d21c62022-09-02 16:47:16 +0100149func Test_for_invalid_line_count()
150 let lines =<< trim END
151 111111111111111111111111 for line in ['one']
152 endfor
153 END
154 call writefile(lines, 'XinvalidFor')
155 " only test that this doesn't crash
156 call RunVim([], [], '-u NONE -e -s -S XinvalidFor -c qa')
157
158 call delete('XinvalidFor')
159endfunc
160
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100161func Test_readfile_binary()
162 new
163 call setline(1, ['one', 'two', 'three'])
164 setlocal ff=dos
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200165 silent write XReadfile_bin
166 let lines = 'XReadfile_bin'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100167 call assert_equal(['one', 'two', 'three'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200168 let lines = readfile('XReadfile_bin', '', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100169 call assert_equal(['one', 'two'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200170 let lines = readfile('XReadfile_bin', 'b')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100171 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200172 let lines = readfile('XReadfile_bin', 'b', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100173 call assert_equal(["one\r", "two\r"], lines)
174
175 bwipe!
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200176 call delete('XReadfile_bin')
177endfunc
178
Dominique Pellef5d639a2022-01-12 15:24:40 +0000179func Test_readfile_binary_empty()
180 call writefile([], 'Xempty-file')
181 " This used to compare uninitialized memory in Vim <= 8.2.4065
182 call assert_equal([''], readfile('Xempty-file', 'b'))
183 call delete('Xempty-file')
184endfunc
185
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200186func Test_readfile_bom()
187 call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom')
188 call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom'))
189 call delete('XReadfile_bom')
190endfunc
191
192func Test_readfile_max()
193 call writefile(range(1, 4), 'XReadfile_max')
194 call assert_equal(['1', '2'], readfile('XReadfile_max', '', 2))
195 call assert_equal(['3', '4'], readfile('XReadfile_max', '', -2))
196 call delete('XReadfile_max')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100197endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +0100198
199func Test_let_errmsg()
200 call assert_fails('let v:errmsg = []', 'E730:')
201 let v:errmsg = ''
202 call assert_fails('let v:errmsg = []', 'E730:')
203 let v:errmsg = ''
204endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200205
206func Test_string_concatenation()
207 call assert_equal('ab', 'a'.'b')
208 call assert_equal('ab', 'a' .'b')
209 call assert_equal('ab', 'a'. 'b')
210 call assert_equal('ab', 'a' . 'b')
211
212 call assert_equal('ab', 'a'..'b')
213 call assert_equal('ab', 'a' ..'b')
214 call assert_equal('ab', 'a'.. 'b')
215 call assert_equal('ab', 'a' .. 'b')
216
217 let a = 'a'
218 let b = 'b'
219 let a .= b
220 call assert_equal('ab', a)
221
222 let a = 'a'
223 let a.=b
224 call assert_equal('ab', a)
225
226 let a = 'a'
227 let a ..= b
228 call assert_equal('ab', a)
229
230 let a = 'a'
231 let a..=b
232 call assert_equal('ab', a)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200233
234 if has('float')
235 let a = 'A'
236 let b = 1.234
Bram Moolenaar3cfa5b12021-06-06 14:14:39 +0200237 call assert_equal('A1.234', a .. b)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200238 endif
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200239endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200240
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200241" Test fix for issue #4507
242func Test_skip_after_throw()
243 try
244 throw 'something'
245 let x = wincol() || &ts
246 catch /something/
247 endtry
248endfunc
249
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200250scriptversion 2
251func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200252 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200253 let a = 'a'
254 let b = 'b'
255
256 call assert_fails('echo a . b', 'E15:')
257 call assert_fails('let a .= b', 'E985:')
Bram Moolenaarfae55a92021-06-17 22:08:30 +0200258 call assert_fails('let vers = 1.2.3', 'E488:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200259
260 if has('float')
261 let f = .5
262 call assert_equal(0.5, f)
263 endif
264endfunc
265
266scriptversion 1
267func Test_string_concat_scriptversion1()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200268 call assert_true(has('vimscript-1'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200269 let a = 'a'
270 let b = 'b'
271
272 echo a . b
273 let a .= b
274 let vers = 1.2.3
275 call assert_equal('123', vers)
276
277 if has('float')
278 call assert_fails('let f = .5', 'E15:')
279 endif
280endfunc
281
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200282scriptversion 3
283func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200284 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200285 call assert_fails('echo version', 'E121:')
286 call assert_false(exists('version'))
287 let version = 1
288 call assert_equal(1, version)
289endfunc
290
291scriptversion 2
292func Test_vvar_scriptversion2()
293 call assert_true(exists('version'))
294 echo version
295 call assert_fails('let version = 1', 'E46:')
296 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200297
298 call assert_equal(v:version, v:versionlong / 10000)
299 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200300endfunc
301
Bram Moolenaar61343f02019-07-20 21:11:13 +0200302func Test_dict_access_scriptversion2()
303 let l:x = {'foo': 1}
304
305 call assert_false(0 && l:x.foo)
306 call assert_true(1 && l:x.foo)
307endfunc
308
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200309scriptversion 4
310func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200311 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200312 call assert_equal(17, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200313 call assert_equal(15, 0o17)
314 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200315 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100316 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200317 call assert_equal(64, 0b1'00'00'00)
318 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200319 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200320 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200321 call assert_equal("1234", execute("echo 1'234")->trim())
322 call assert_equal('1 234', execute("echo 1''234")->trim())
323 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200324endfunc
325
326scriptversion 1
327func Test_vvar_scriptversion1()
328 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200329 call assert_equal(15, 0o17)
330 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200331 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100332 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200333endfunc
334
335func Test_scriptversion_fail()
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200336 call writefile(['scriptversion 9'], 'Xversionscript')
337 call assert_fails('source Xversionscript', 'E999:')
338 call delete('Xversionscript')
339endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100340
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200341func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100342 call assert_fails('execute test_null_list()', 'E730:')
343 call assert_fails('execute test_null_dict()', 'E731:')
344 call assert_fails('execute test_null_blob()', 'E976:')
345 execute test_null_string()
346 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200347 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100348 if has('job')
349 call assert_fails('execute test_null_job()', 'E908:')
350 call assert_fails('execute test_null_channel()', 'E908:')
351 endif
352endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100353
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100354func Test_number_max_min_size()
355 " This will fail on systems without 64 bit number support or when not
356 " configured correctly.
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100357 call assert_equal(64, v:numbersize)
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100358
359 call assert_true(v:numbermin < -9999999)
360 call assert_true(v:numbermax > 9999999)
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100361endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100362
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200363func Assert_reg(name, type, value, valuestr, expr, exprstr)
364 call assert_equal(a:type, getregtype(a:name))
365 call assert_equal(a:value, getreg(a:name))
366 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
367 call assert_equal(a:expr, getreg(a:name, 1))
368 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
369endfunc
370
371func Test_let_register()
372 let @" = 'abc'
373 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
374 let @" = "abc\n"
375 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
376 let @" = "abc\<C-m>"
377 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
378 let @= = '"abc"'
379 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
380endfunc
381
382func Assert_regput(name, result)
383 new
384 execute "silent normal! o==\n==\e\"" . a:name . "P"
385 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200386 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200387endfunc
388
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200389func Test_setreg_basic()
390 call setreg('a', 'abcA', 'c')
391 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
392 call Assert_regput('a', ['==', '=abcA='])
393
394 call setreg('A', 'abcAc', 'c')
395 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
396 call Assert_regput('a', ['==', '=abcAabcAc='])
397
398 call setreg('A', 'abcAl', 'l')
399 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
400 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
401
402 call setreg('A', 'abcAc2','c')
403 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
404 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
405
406 call setreg('b', 'abcB', 'v')
407 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
408 call Assert_regput('b', ['==', '=abcB='])
409
410 call setreg('b', 'abcBc', 'ca')
411 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
412 call Assert_regput('b', ['==', '=abcBabcBc='])
413
414 call setreg('b', 'abcBb', 'ba')
415 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
416 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
417
418 call setreg('b', 'abcBc2','ca')
419 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
420 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
421
422 call setreg('b', 'abcBb2','b50a')
423 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
424 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
425
426 call setreg('c', 'abcC', 'l')
427 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
428 call Assert_regput('c', ['==', 'abcC', '=='])
429
430 call setreg('C', 'abcCl', 'l')
431 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
432 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
433
434 call setreg('C', 'abcCc', 'c')
435 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
436 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
437
438 call setreg('d', 'abcD', 'V')
439 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
440 call Assert_regput('d', ['==', 'abcD', '=='])
441
442 call setreg('D', 'abcDb', 'b')
443 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
444 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
445
446 call setreg('e', 'abcE', 'b')
447 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
448 call Assert_regput('e', ['==', '=abcE='])
449
450 call setreg('E', 'abcEb', 'b')
451 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
452 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
453
454 call setreg('E', 'abcEl', 'l')
455 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
456 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
457
458 call setreg('f', 'abcF', "\<C-v>")
459 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
460 call Assert_regput('f', ['==', '=abcF='])
461
462 call setreg('F', 'abcFc', 'c')
463 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
464 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
465
466 call setreg('g', 'abcG', 'b10')
467 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
468 call Assert_regput('g', ['==', '=abcG ='])
469
470 call setreg('h', 'abcH', "\<C-v>10")
471 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
472 call Assert_regput('h', ['==', '=abcH ='])
473
474 call setreg('I', 'abcI')
475 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
476 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200477
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200478 " Appending NL with setreg()
479 call setreg('a', 'abcA2', 'c')
480 call setreg('b', 'abcB2', 'v')
481 call setreg('c', 'abcC2', 'l')
482 call setreg('d', 'abcD2', 'V')
483 call setreg('e', 'abcE2', 'b')
484 call setreg('f', 'abcF2', "\<C-v>")
485 call setreg('g', 'abcG2', 'b10')
486 call setreg('h', 'abcH2', "\<C-v>10")
487 call setreg('I', 'abcI2')
488
489 call setreg('A', "\n")
490 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
491 call Assert_regput('A', ['==', 'abcA2', '=='])
492
493 call setreg('B', "\n", 'c')
494 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
495 call Assert_regput('B', ['==', '=abcB2', '='])
496
497 call setreg('C', "\n")
498 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
499 call Assert_regput('C', ['==', 'abcC2', '', '=='])
500
501 call setreg('D', "\n", 'l')
502 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
503 call Assert_regput('D', ['==', 'abcD2', '', '=='])
504
505 call setreg('E', "\n")
506 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
507 call Assert_regput('E', ['==', 'abcE2', '', '=='])
508
509 call setreg('F', "\n", 'b')
510 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
511 call Assert_regput('F', ['==', '=abcF2=', ' '])
512
513 " Setting lists with setreg()
514 call setreg('a', ['abcA3'], 'c')
515 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
516 call Assert_regput('a', ['==', '=abcA3='])
517
518 call setreg('b', ['abcB3'], 'l')
519 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
520 call Assert_regput('b', ['==', 'abcB3', '=='])
521
522 call setreg('c', ['abcC3'], 'b')
523 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
524 call Assert_regput('c', ['==', '=abcC3='])
525
526 call setreg('d', ['abcD3'])
527 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
528 call Assert_regput('d', ['==', 'abcD3', '=='])
529
530 call setreg('e', [1, 2, 'abc', 3])
531 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
532 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
533
534 call setreg('f', [1, 2, 3])
535 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
536 call Assert_regput('f', ['==', '1', '2', '3', '=='])
537
538 " Appending lists with setreg()
539 call setreg('A', ['abcA3c'], 'c')
540 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
541 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
542
543 call setreg('b', ['abcB3l'], 'la')
544 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
545 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
546
547 call setreg('C', ['abcC3b'], 'lb')
548 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
549 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
550
551 call setreg('D', ['abcD32'])
552 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
553 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
554
555 call setreg('A', ['abcA32'])
556 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
557 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
558
559 call setreg('B', ['abcB3c'], 'c')
560 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
561 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
562
563 call setreg('C', ['abcC3l'], 'l')
564 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
565 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
566
567 call setreg('D', ['abcD3b'], 'b')
568 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
569 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
570
571 " Appending lists with NL with setreg()
572 call setreg('A', ["\n", 'abcA3l2'], 'l')
573 call Assert_reg('A', "V", "abcA3\nabcA3c\nabcA32\n\n\nabcA3l2\n", "['abcA3', 'abcA3c', 'abcA32', '\n', 'abcA3l2']", "abcA3\nabcA3c\nabcA32\n\n\nabcA3l2\n", "['abcA3', 'abcA3c', 'abcA32', '\n', 'abcA3l2']")
574 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
575
576 call setreg('B', ["\n", 'abcB3c2'], 'c')
577 call Assert_reg('B', "v", "abcB3\nabcB3l\nabcB3c\n\n\nabcB3c2", "['abcB3', 'abcB3l', 'abcB3c', '\n', 'abcB3c2']", "abcB3\nabcB3l\nabcB3c\n\n\nabcB3c2", "['abcB3', 'abcB3l', 'abcB3c', '\n', 'abcB3c2']")
578 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
579
580 call setreg('C', ["\n", 'abcC3b2'], 'b')
581 call Assert_reg('C', "7", "abcC3\nabcC3b\nabcC3l\n\n\nabcC3b2", "['abcC3', 'abcC3b', 'abcC3l', '\n', 'abcC3b2']", "abcC3\nabcC3b\nabcC3l\n\n\nabcC3b2", "['abcC3', 'abcC3b', 'abcC3l', '\n', 'abcC3b2']")
582 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
583
584 call setreg('D', ["\n", 'abcD3b50'],'b50')
585 call Assert_reg('D', "50", "abcD3\nabcD32\nabcD3b\n\n\nabcD3b50", "['abcD3', 'abcD32', 'abcD3b', '\n', 'abcD3b50']", "abcD3\nabcD32\nabcD3b\n\n\nabcD3b50", "['abcD3', 'abcD32', 'abcD3b', '\n', 'abcD3b50']")
586 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
587
588 " Setting lists with NLs with setreg()
589 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
590 call Assert_reg('a', "V", "abcA4-0\n\n\nabcA4-2\n\n\nabcA4-3\nabcA4-4\nabcA4-4-2\n", "['abcA4-0', '\n', 'abcA4-2\n', '\nabcA4-3', 'abcA4-4\nabcA4-4-2']", "abcA4-0\n\n\nabcA4-2\n\n\nabcA4-3\nabcA4-4\nabcA4-4-2\n", "['abcA4-0', '\n', 'abcA4-2\n', '\nabcA4-3', 'abcA4-4\nabcA4-4-2']")
591 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
592
593 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
594 call Assert_reg('b', "v", "abcB4c-0\n\n\nabcB4c-2\n\n\nabcB4c-3\nabcB4c-4\nabcB4c-4-2", "['abcB4c-0', '\n', 'abcB4c-2\n', '\nabcB4c-3', 'abcB4c-4\nabcB4c-4-2']", "abcB4c-0\n\n\nabcB4c-2\n\n\nabcB4c-3\nabcB4c-4\nabcB4c-4-2", "['abcB4c-0', '\n', 'abcB4c-2\n', '\nabcB4c-3', 'abcB4c-4\nabcB4c-4-2']")
595 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
596
597 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
598 call Assert_reg('c', "V", "abcC4l-0\n\n\nabcC4l-2\n\n\nabcC4l-3\nabcC4l-4\nabcC4l-4-2\n", "['abcC4l-0', '\n', 'abcC4l-2\n', '\nabcC4l-3', 'abcC4l-4\nabcC4l-4-2']", "abcC4l-0\n\n\nabcC4l-2\n\n\nabcC4l-3\nabcC4l-4\nabcC4l-4-2\n", "['abcC4l-0', '\n', 'abcC4l-2\n', '\nabcC4l-3', 'abcC4l-4\nabcC4l-4-2']")
599 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
600
601 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
602 call Assert_reg('d', "19", "abcD4b-0\n\n\nabcD4b-2\n\n\nabcD4b-3\nabcD4b-4\nabcD4b-4-2", "['abcD4b-0', '\n', 'abcD4b-2\n', '\nabcD4b-3', 'abcD4b-4\nabcD4b-4-2']", "abcD4b-0\n\n\nabcD4b-2\n\n\nabcD4b-3\nabcD4b-4\nabcD4b-4-2", "['abcD4b-0', '\n', 'abcD4b-2\n', '\nabcD4b-3', 'abcD4b-4\nabcD4b-4-2']")
603 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
604
605 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
606 call Assert_reg('e', "10", "abcE4b10-0\n\n\nabcE4b10-2\n\n\nabcE4b10-3\nabcE4b10-4\nabcE4b10-4-2", "['abcE4b10-0', '\n', 'abcE4b10-2\n', '\nabcE4b10-3', 'abcE4b10-4\nabcE4b10-4-2']", "abcE4b10-0\n\n\nabcE4b10-2\n\n\nabcE4b10-3\nabcE4b10-4\nabcE4b10-4-2", "['abcE4b10-0', '\n', 'abcE4b10-2\n', '\nabcE4b10-3', 'abcE4b10-4\nabcE4b10-4-2']")
607 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
608
609 " Search and expressions
610 call setreg('/', ['abc/'])
611 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
612 call Assert_regput('/', ['==', '=abc/='])
613
614 call setreg('/', ["abc/\n"])
615 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
616 call Assert_regput('/', ['==', "=abc/\n="])
617
618 call setreg('=', ['"abc/"'])
619 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
620
621 call setreg('=', ["\"abc/\n\""])
622 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
623
624 " System clipboard
625 if has('clipboard')
626 new | only!
627 call setline(1, ['clipboard contents', 'something else'])
628 " Save and restore system clipboard.
629 " If no connection to X-Server is possible, test should succeed.
630 let _clipreg = ['*', getreg('*'), getregtype('*')]
631 let _clipopt = &cb
632 let &cb='unnamed'
633 1y
634 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
635 tabdo :windo :echo "hi"
636 2y
637 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
638 let &cb=_clipopt
639 call call('setreg', _clipreg)
640 enew!
641 endif
642
Bram Moolenaar08f41572020-04-20 16:50:00 +0200643 " Error cases
644 call assert_fails('call setreg()', 'E119:')
645 call assert_fails('call setreg(1)', 'E119:')
646 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
647 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200648 call assert_fails('call setreg(1, 2, [])', 'E730:')
649 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
650 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
651 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
652endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200653
Bram Moolenaarae95a392020-08-06 16:38:12 +0200654func Test_curly_assignment()
655 let s:svar = 'svar'
656 let g:gvar = 'gvar'
657 let lname = 'gvar'
658 let gname = 'gvar'
659 let {'s:'.lname} = {'g:'.gname}
660 call assert_equal('gvar', s:gvar)
661 let s:gvar = ''
662 let { 's:'.lname } = { 'g:'.gname }
663 call assert_equal('gvar', s:gvar)
664 let s:gvar = ''
665 let { 's:' . lname } = { 'g:' . gname }
666 call assert_equal('gvar', s:gvar)
667 let s:gvar = ''
668 let { 's:' .. lname } = { 'g:' .. gname }
669 call assert_equal('gvar', s:gvar)
670
671 unlet s:svar
672 unlet s:gvar
673 unlet g:gvar
674endfunc
675
Bram Moolenaarfe6fb262022-01-24 18:16:12 +0000676func Test_deep_recursion()
677 " this was running out of stack
678 call assert_fails("exe 'if ' .. repeat('(', 1002)", 'E1169: Expression too recursive: ((')
679endfunc
680
zeertzjqdb088872022-05-02 22:53:45 +0100681" K_SPECIAL in the modified character used be escaped, which causes
682" double-escaping with feedkeys() or as the return value of an <expr> mapping,
683" and doesn't match what getchar() returns,
684func Test_modified_char_no_escape_special()
685 nnoremap <M-…> <Cmd>let g:got_m_ellipsis += 1<CR>
686 call feedkeys("\<M-…>", 't')
687 call assert_equal("\<M-…>", getchar())
688 let g:got_m_ellipsis = 0
689 call feedkeys("\<M-…>", 'xt')
690 call assert_equal(1, g:got_m_ellipsis)
691 func Func()
692 return "\<M-…>"
693 endfunc
694 nmap <expr> <F2> Func()
695 call feedkeys("\<F2>", 'xt')
696 call assert_equal(2, g:got_m_ellipsis)
697 delfunc Func
698 nunmap <F2>
699 unlet g:got_m_ellipsis
700 nunmap <M-…>
701endfunc
702
Bram Moolenaar1e56bda2022-07-29 15:28:27 +0100703func Test_eval_string_in_special_key()
704 " this was using the '{' inside <> as the start of an interpolated string
705 silent! echo 0{1-$"\<S--{>n|nö%�
706endfunc
707
Bram Moolenaar8b633132020-03-20 18:20:51 +0100708" vim: shiftwidth=2 sts=2 expandtab