blob: 46ec12df16a639a6aa7307f1c5488d1ee5ec9748 [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()
Bram Moolenaar5c645a22022-09-21 22:00:03 +010028 call mkdir('Xmkdir/nested', 'pR')
Bram Moolenaar78a16b02018-04-14 13:51:55 +020029 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 Moolenaar5c645a22022-09-21 22:00:03 +010038 call writefile([], 'Xmkdirfile', 'D')
Bram Moolenaarb18b4962022-09-02 21:55:50 +010039 call assert_fails('call mkdir("Xmkdirfile", "p")', 'E739:')
Bram Moolenaar5c645a22022-09-21 22:00:03 +010040
Bram Moolenaar92b83cc2020-04-25 15:24:44 +020041 call assert_equal(0, mkdir(test_null_string()))
Bram Moolenaare2e40752020-09-04 21:18:46 +020042 call assert_fails('call mkdir([])', 'E730:')
43 call assert_fails('call mkdir("abc", [], [])', 'E745:')
Bram Moolenaar78a16b02018-04-14 13:51:55 +020044endfunc
Bram Moolenaar67f8ab82018-09-11 22:37:29 +020045
Bram Moolenaar6f14da12022-09-07 21:30:44 +010046func DoMkdirDel(name)
47 call mkdir(a:name, 'pD')
48 call assert_true(isdirectory(a:name))
49endfunc
50
51func DoMkdirDelAddFile(name)
52 call mkdir(a:name, 'pD')
53 call assert_true(isdirectory(a:name))
54 call writefile(['text'], a:name .. '/file')
55endfunc
56
57func DoMkdirDelRec(name)
58 call mkdir(a:name, 'pR')
59 call assert_true(isdirectory(a:name))
60endfunc
61
62func DoMkdirDelRecAddFile(name)
63 call mkdir(a:name, 'pR')
64 call assert_true(isdirectory(a:name))
65 call writefile(['text'], a:name .. '/file')
66endfunc
67
68func Test_mkdir_defer_del()
69 " Xtopdir/tmp is created thus deleted, not Xtopdir itself
70 call mkdir('Xtopdir', 'R')
71 call DoMkdirDel('Xtopdir/tmp')
72 call assert_true(isdirectory('Xtopdir'))
73 call assert_false(isdirectory('Xtopdir/tmp'))
74
75 " Deletion fails because "tmp" contains "sub"
76 call DoMkdirDel('Xtopdir/tmp/sub')
77 call assert_true(isdirectory('Xtopdir'))
78 call assert_true(isdirectory('Xtopdir/tmp'))
79 call delete('Xtopdir/tmp', 'rf')
80
81 " Deletion fails because "tmp" contains "file"
82 call DoMkdirDelAddFile('Xtopdir/tmp')
83 call assert_true(isdirectory('Xtopdir'))
84 call assert_true(isdirectory('Xtopdir/tmp'))
85 call assert_true(filereadable('Xtopdir/tmp/file'))
86 call delete('Xtopdir/tmp', 'rf')
87
88 " Xtopdir/tmp is created thus deleted, not Xtopdir itself
89 call DoMkdirDelRec('Xtopdir/tmp')
90 call assert_true(isdirectory('Xtopdir'))
91 call assert_false(isdirectory('Xtopdir/tmp'))
92
93 " Deletion works even though "tmp" contains "sub"
94 call DoMkdirDelRec('Xtopdir/tmp/sub')
95 call assert_true(isdirectory('Xtopdir'))
96 call assert_false(isdirectory('Xtopdir/tmp'))
97
98 " Deletion works even though "tmp" contains "file"
99 call DoMkdirDelRecAddFile('Xtopdir/tmp')
100 call assert_true(isdirectory('Xtopdir'))
101 call assert_false(isdirectory('Xtopdir/tmp'))
102endfunc
103
Bram Moolenaar67f8ab82018-09-11 22:37:29 +0200104func Test_line_continuation()
105 let array = [5,
106 "\ ignore this
107 \ 6,
108 "\ more to ignore
109 "\ more moreto ignore
110 \ ]
111 "\ and some more
112 call assert_equal([5, 6], array)
113endfunc
Bram Moolenaar88b53fd2018-12-05 18:43:28 +0100114
115func Test_E963()
116 " These commands used to cause an internal error prior to vim 8.1.0563
117 let v_e = v:errors
118 let v_o = v:oldfiles
119 call assert_fails("let v:errors=''", 'E963:')
120 call assert_equal(v_e, v:errors)
121 call assert_fails("let v:oldfiles=''", 'E963:')
122 call assert_equal(v_o, v:oldfiles)
123endfunc
Bram Moolenaarc0f5a782019-01-13 15:16:13 +0100124
125func Test_for_invalid()
Sean Dewar80d73952021-08-04 19:25:54 +0200126 call assert_fails("for x in 99", 'E1098:')
127 call assert_fails("for x in function('winnr')", 'E1098:')
128 call assert_fails("for x in {'a': 9}", 'E1098:')
Bram Moolenaardf2c2982021-01-28 20:18:08 +0100129
130 if 0
131 /1/5/2/s/\n
132 endif
133 redraw
Bram Moolenaarc0f5a782019-01-13 15:16:13 +0100134endfunc
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100135
Bram Moolenaarf6d39c32022-08-16 17:50:38 +0100136func Test_for_over_null_string()
137 let save_enc = &enc
138 set enc=iso8859
139 let cnt = 0
140 for c in test_null_string()
141 let cnt += 1
142 endfor
143 call assert_equal(0, cnt)
144
145 let &enc = save_enc
146endfunc
147
Bram Moolenaar91324262022-09-09 13:27:59 +0100148func Test_for_with_modifier()
149 " this checks has_loop_cmd() works with a modifier
150 let result = []
151 vim9cmd for i in range(3)
152 call extend(result, [i])
153 endfor
154 call assert_equal([0, 1, 2], result)
155endfunc
156
Bram Moolenaar35d21c62022-09-02 16:47:16 +0100157func Test_for_invalid_line_count()
158 let lines =<< trim END
159 111111111111111111111111 for line in ['one']
160 endfor
161 END
Bram Moolenaar5c645a22022-09-21 22:00:03 +0100162 call writefile(lines, 'XinvalidFor', 'D')
Bram Moolenaar35d21c62022-09-02 16:47:16 +0100163 " only test that this doesn't crash
164 call RunVim([], [], '-u NONE -e -s -S XinvalidFor -c qa')
Bram Moolenaar35d21c62022-09-02 16:47:16 +0100165endfunc
166
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100167func Test_readfile_binary()
168 new
169 call setline(1, ['one', 'two', 'three'])
170 setlocal ff=dos
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200171 silent write XReadfile_bin
172 let lines = 'XReadfile_bin'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100173 call assert_equal(['one', 'two', 'three'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200174 let lines = readfile('XReadfile_bin', '', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100175 call assert_equal(['one', 'two'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200176 let lines = readfile('XReadfile_bin', 'b')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100177 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200178 let lines = readfile('XReadfile_bin', 'b', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100179 call assert_equal(["one\r", "two\r"], lines)
180
181 bwipe!
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200182 call delete('XReadfile_bin')
183endfunc
184
Dominique Pellef5d639a2022-01-12 15:24:40 +0000185func Test_readfile_binary_empty()
Bram Moolenaar5c645a22022-09-21 22:00:03 +0100186 call writefile([], 'Xempty-file', 'D')
Dominique Pellef5d639a2022-01-12 15:24:40 +0000187 " This used to compare uninitialized memory in Vim <= 8.2.4065
188 call assert_equal([''], readfile('Xempty-file', 'b'))
Dominique Pellef5d639a2022-01-12 15:24:40 +0000189endfunc
190
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200191func Test_readfile_bom()
192 call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom')
193 call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom'))
194 call delete('XReadfile_bom')
195endfunc
196
197func Test_readfile_max()
Bram Moolenaar5c645a22022-09-21 22:00:03 +0100198 call writefile(range(1, 4), 'XReadfile_max', 'D')
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200199 call assert_equal(['1', '2'], readfile('XReadfile_max', '', 2))
200 call assert_equal(['3', '4'], readfile('XReadfile_max', '', -2))
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100201endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +0100202
203func Test_let_errmsg()
204 call assert_fails('let v:errmsg = []', 'E730:')
205 let v:errmsg = ''
206 call assert_fails('let v:errmsg = []', 'E730:')
207 let v:errmsg = ''
208endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200209
210func Test_string_concatenation()
211 call assert_equal('ab', 'a'.'b')
212 call assert_equal('ab', 'a' .'b')
213 call assert_equal('ab', 'a'. 'b')
214 call assert_equal('ab', 'a' . 'b')
215
216 call assert_equal('ab', 'a'..'b')
217 call assert_equal('ab', 'a' ..'b')
218 call assert_equal('ab', 'a'.. 'b')
219 call assert_equal('ab', 'a' .. 'b')
220
221 let a = 'a'
222 let b = 'b'
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)
233
234 let a = 'a'
235 let a..=b
236 call assert_equal('ab', a)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200237
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100238 let a = 'A'
239 let b = 1.234
240 call assert_equal('A1.234', a .. b)
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200241endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200242
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200243" Test fix for issue #4507
244func Test_skip_after_throw()
245 try
246 throw 'something'
247 let x = wincol() || &ts
248 catch /something/
249 endtry
250endfunc
251
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200252scriptversion 2
253func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200254 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200255 let a = 'a'
256 let b = 'b'
257
258 call assert_fails('echo a . b', 'E15:')
259 call assert_fails('let a .= b', 'E985:')
Bram Moolenaarfae55a92021-06-17 22:08:30 +0200260 call assert_fails('let vers = 1.2.3', 'E488:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200261
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100262 let f = .5
263 call assert_equal(0.5, f)
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200264endfunc
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
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100277 call assert_fails('let f = .5', 'E15:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200278endfunc
279
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200280scriptversion 3
281func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200282 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200283 call assert_fails('echo version', 'E121:')
284 call assert_false(exists('version'))
285 let version = 1
286 call assert_equal(1, version)
287endfunc
288
289scriptversion 2
290func Test_vvar_scriptversion2()
291 call assert_true(exists('version'))
292 echo version
293 call assert_fails('let version = 1', 'E46:')
294 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200295
296 call assert_equal(v:version, v:versionlong / 10000)
297 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200298endfunc
299
Bram Moolenaar61343f02019-07-20 21:11:13 +0200300func Test_dict_access_scriptversion2()
301 let l:x = {'foo': 1}
302
303 call assert_false(0 && l:x.foo)
304 call assert_true(1 && l:x.foo)
305endfunc
306
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200307scriptversion 4
308func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200309 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200310 call assert_equal(17, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200311 call assert_equal(15, 0o17)
312 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200313 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100314 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200315 call assert_equal(64, 0b1'00'00'00)
316 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200317 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200318 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200319 call assert_equal("1234", execute("echo 1'234")->trim())
320 call assert_equal('1 234', execute("echo 1''234")->trim())
321 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200322endfunc
323
324scriptversion 1
325func Test_vvar_scriptversion1()
326 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200327 call assert_equal(15, 0o17)
328 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200329 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100330 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200331endfunc
332
333func Test_scriptversion_fail()
Bram Moolenaar5c645a22022-09-21 22:00:03 +0100334 call writefile(['scriptversion 9'], 'Xversionscript', 'D')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200335 call assert_fails('source Xversionscript', 'E999:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200336endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100337
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200338func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100339 call assert_fails('execute test_null_list()', 'E730:')
340 call assert_fails('execute test_null_dict()', 'E731:')
341 call assert_fails('execute test_null_blob()', 'E976:')
342 execute test_null_string()
343 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200344 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100345 if has('job')
346 call assert_fails('execute test_null_job()', 'E908:')
347 call assert_fails('execute test_null_channel()', 'E908:')
348 endif
349endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100350
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100351func Test_number_max_min_size()
352 " This will fail on systems without 64 bit number support or when not
353 " configured correctly.
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100354 call assert_equal(64, v:numbersize)
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100355
356 call assert_true(v:numbermin < -9999999)
357 call assert_true(v:numbermax > 9999999)
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100358endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100359
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200360func Assert_reg(name, type, value, valuestr, expr, exprstr)
361 call assert_equal(a:type, getregtype(a:name))
362 call assert_equal(a:value, getreg(a:name))
363 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
364 call assert_equal(a:expr, getreg(a:name, 1))
365 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
366endfunc
367
368func Test_let_register()
369 let @" = 'abc'
370 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
371 let @" = "abc\n"
372 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
373 let @" = "abc\<C-m>"
374 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
375 let @= = '"abc"'
376 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
377endfunc
378
379func Assert_regput(name, result)
380 new
381 execute "silent normal! o==\n==\e\"" . a:name . "P"
382 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200383 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200384endfunc
385
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200386func Test_setreg_basic()
387 call setreg('a', 'abcA', 'c')
388 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
389 call Assert_regput('a', ['==', '=abcA='])
390
391 call setreg('A', 'abcAc', 'c')
392 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
393 call Assert_regput('a', ['==', '=abcAabcAc='])
394
395 call setreg('A', 'abcAl', 'l')
396 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
397 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
398
399 call setreg('A', 'abcAc2','c')
400 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
401 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
402
403 call setreg('b', 'abcB', 'v')
404 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
405 call Assert_regput('b', ['==', '=abcB='])
406
407 call setreg('b', 'abcBc', 'ca')
408 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
409 call Assert_regput('b', ['==', '=abcBabcBc='])
410
411 call setreg('b', 'abcBb', 'ba')
412 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
413 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
414
415 call setreg('b', 'abcBc2','ca')
416 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
417 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
418
419 call setreg('b', 'abcBb2','b50a')
420 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
421 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
422
423 call setreg('c', 'abcC', 'l')
424 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
425 call Assert_regput('c', ['==', 'abcC', '=='])
426
427 call setreg('C', 'abcCl', 'l')
428 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
429 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
430
431 call setreg('C', 'abcCc', 'c')
432 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
433 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
434
435 call setreg('d', 'abcD', 'V')
436 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
437 call Assert_regput('d', ['==', 'abcD', '=='])
438
439 call setreg('D', 'abcDb', 'b')
440 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
441 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
442
443 call setreg('e', 'abcE', 'b')
444 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
445 call Assert_regput('e', ['==', '=abcE='])
446
447 call setreg('E', 'abcEb', 'b')
448 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
449 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
450
451 call setreg('E', 'abcEl', 'l')
452 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
453 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
454
455 call setreg('f', 'abcF', "\<C-v>")
456 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
457 call Assert_regput('f', ['==', '=abcF='])
458
459 call setreg('F', 'abcFc', 'c')
460 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
461 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
462
463 call setreg('g', 'abcG', 'b10')
464 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
465 call Assert_regput('g', ['==', '=abcG ='])
466
467 call setreg('h', 'abcH', "\<C-v>10")
468 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
469 call Assert_regput('h', ['==', '=abcH ='])
470
471 call setreg('I', 'abcI')
472 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
473 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200474
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200475 " Appending NL with setreg()
476 call setreg('a', 'abcA2', 'c')
477 call setreg('b', 'abcB2', 'v')
478 call setreg('c', 'abcC2', 'l')
479 call setreg('d', 'abcD2', 'V')
480 call setreg('e', 'abcE2', 'b')
481 call setreg('f', 'abcF2', "\<C-v>")
482 call setreg('g', 'abcG2', 'b10')
483 call setreg('h', 'abcH2', "\<C-v>10")
484 call setreg('I', 'abcI2')
485
486 call setreg('A', "\n")
487 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
488 call Assert_regput('A', ['==', 'abcA2', '=='])
489
490 call setreg('B', "\n", 'c')
491 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
492 call Assert_regput('B', ['==', '=abcB2', '='])
493
494 call setreg('C', "\n")
495 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
496 call Assert_regput('C', ['==', 'abcC2', '', '=='])
497
498 call setreg('D', "\n", 'l')
499 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
500 call Assert_regput('D', ['==', 'abcD2', '', '=='])
501
502 call setreg('E', "\n")
503 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
504 call Assert_regput('E', ['==', 'abcE2', '', '=='])
505
506 call setreg('F', "\n", 'b')
507 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
508 call Assert_regput('F', ['==', '=abcF2=', ' '])
509
510 " Setting lists with setreg()
511 call setreg('a', ['abcA3'], 'c')
512 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
513 call Assert_regput('a', ['==', '=abcA3='])
514
515 call setreg('b', ['abcB3'], 'l')
516 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
517 call Assert_regput('b', ['==', 'abcB3', '=='])
518
519 call setreg('c', ['abcC3'], 'b')
520 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
521 call Assert_regput('c', ['==', '=abcC3='])
522
523 call setreg('d', ['abcD3'])
524 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
525 call Assert_regput('d', ['==', 'abcD3', '=='])
526
527 call setreg('e', [1, 2, 'abc', 3])
528 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
529 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
530
531 call setreg('f', [1, 2, 3])
532 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
533 call Assert_regput('f', ['==', '1', '2', '3', '=='])
534
535 " Appending lists with setreg()
536 call setreg('A', ['abcA3c'], 'c')
537 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
538 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
539
540 call setreg('b', ['abcB3l'], 'la')
541 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
542 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
543
544 call setreg('C', ['abcC3b'], 'lb')
545 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
546 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
547
548 call setreg('D', ['abcD32'])
549 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
550 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
551
552 call setreg('A', ['abcA32'])
553 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
554 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
555
556 call setreg('B', ['abcB3c'], 'c')
557 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
558 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
559
560 call setreg('C', ['abcC3l'], 'l')
561 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
562 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
563
564 call setreg('D', ['abcD3b'], 'b')
565 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
566 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
567
568 " Appending lists with NL with setreg()
569 call setreg('A', ["\n", 'abcA3l2'], 'l')
570 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']")
571 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
572
573 call setreg('B', ["\n", 'abcB3c2'], 'c')
574 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']")
575 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
576
577 call setreg('C', ["\n", 'abcC3b2'], 'b')
578 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']")
579 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
580
581 call setreg('D', ["\n", 'abcD3b50'],'b50')
582 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']")
583 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
584
585 " Setting lists with NLs with setreg()
586 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
587 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']")
588 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
589
590 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
591 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']")
592 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
593
594 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
595 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']")
596 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
597
598 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
599 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']")
600 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
601
602 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
603 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']")
604 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
605
606 " Search and expressions
607 call setreg('/', ['abc/'])
608 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
609 call Assert_regput('/', ['==', '=abc/='])
610
611 call setreg('/', ["abc/\n"])
612 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
613 call Assert_regput('/', ['==', "=abc/\n="])
614
615 call setreg('=', ['"abc/"'])
616 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
617
618 call setreg('=', ["\"abc/\n\""])
619 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
620
621 " System clipboard
622 if has('clipboard')
623 new | only!
624 call setline(1, ['clipboard contents', 'something else'])
625 " Save and restore system clipboard.
626 " If no connection to X-Server is possible, test should succeed.
627 let _clipreg = ['*', getreg('*'), getregtype('*')]
628 let _clipopt = &cb
629 let &cb='unnamed'
630 1y
631 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
632 tabdo :windo :echo "hi"
633 2y
634 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
635 let &cb=_clipopt
636 call call('setreg', _clipreg)
637 enew!
638 endif
639
Bram Moolenaar08f41572020-04-20 16:50:00 +0200640 " Error cases
641 call assert_fails('call setreg()', 'E119:')
642 call assert_fails('call setreg(1)', 'E119:')
643 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
644 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200645 call assert_fails('call setreg(1, 2, [])', 'E730:')
646 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
647 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
648 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
649endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200650
Bram Moolenaarae95a392020-08-06 16:38:12 +0200651func Test_curly_assignment()
652 let s:svar = 'svar'
653 let g:gvar = 'gvar'
654 let lname = 'gvar'
655 let gname = 'gvar'
656 let {'s:'.lname} = {'g:'.gname}
657 call assert_equal('gvar', s:gvar)
658 let s: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
668 unlet s:svar
669 unlet s:gvar
670 unlet g:gvar
671endfunc
672
Bram Moolenaarfe6fb262022-01-24 18:16:12 +0000673func Test_deep_recursion()
674 " this was running out of stack
675 call assert_fails("exe 'if ' .. repeat('(', 1002)", 'E1169: Expression too recursive: ((')
676endfunc
677
zeertzjqdb088872022-05-02 22:53:45 +0100678" K_SPECIAL in the modified character used be escaped, which causes
679" double-escaping with feedkeys() or as the return value of an <expr> mapping,
680" and doesn't match what getchar() returns,
681func Test_modified_char_no_escape_special()
682 nnoremap <M-…> <Cmd>let g:got_m_ellipsis += 1<CR>
683 call feedkeys("\<M-…>", 't')
684 call assert_equal("\<M-…>", getchar())
685 let g:got_m_ellipsis = 0
686 call feedkeys("\<M-…>", 'xt')
687 call assert_equal(1, g:got_m_ellipsis)
688 func Func()
689 return "\<M-…>"
690 endfunc
691 nmap <expr> <F2> Func()
692 call feedkeys("\<F2>", 'xt')
693 call assert_equal(2, g:got_m_ellipsis)
694 delfunc Func
695 nunmap <F2>
696 unlet g:got_m_ellipsis
697 nunmap <M-…>
698endfunc
699
Bram Moolenaar1e56bda2022-07-29 15:28:27 +0100700func Test_eval_string_in_special_key()
701 " this was using the '{' inside <> as the start of an interpolated string
702 silent! echo 0{1-$"\<S--{>n|nö%�
703endfunc
704
Bram Moolenaar8b633132020-03-20 18:20:51 +0100705" vim: shiftwidth=2 sts=2 expandtab