blob: a346399eb513bbf2c45a4c98f5d823d206e7edbc [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 Moolenaar16d2c022023-06-05 19:46:18 +0100129 call assert_fails("for v:maxcol in range(1)", 'E46:')
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 Moolenaar91324262022-09-09 13:27:59 +0100149func Test_for_with_modifier()
150 " this checks has_loop_cmd() works with a modifier
151 let result = []
152 vim9cmd for i in range(3)
153 call extend(result, [i])
154 endfor
155 call assert_equal([0, 1, 2], result)
156endfunc
157
Bram Moolenaar35d21c62022-09-02 16:47:16 +0100158func Test_for_invalid_line_count()
159 let lines =<< trim END
160 111111111111111111111111 for line in ['one']
161 endfor
162 END
Bram Moolenaar5c645a22022-09-21 22:00:03 +0100163 call writefile(lines, 'XinvalidFor', 'D')
Bram Moolenaar35d21c62022-09-02 16:47:16 +0100164 " only test that this doesn't crash
165 call RunVim([], [], '-u NONE -e -s -S XinvalidFor -c qa')
Bram Moolenaar35d21c62022-09-02 16:47:16 +0100166endfunc
167
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100168func Test_readfile_binary()
169 new
170 call setline(1, ['one', 'two', 'three'])
171 setlocal ff=dos
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200172 silent write XReadfile_bin
173 let lines = 'XReadfile_bin'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100174 call assert_equal(['one', 'two', 'three'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200175 let lines = readfile('XReadfile_bin', '', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100176 call assert_equal(['one', 'two'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200177 let lines = readfile('XReadfile_bin', 'b')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100178 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200179 let lines = readfile('XReadfile_bin', 'b', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100180 call assert_equal(["one\r", "two\r"], lines)
181
182 bwipe!
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200183 call delete('XReadfile_bin')
184endfunc
185
Dominique Pellef5d639a2022-01-12 15:24:40 +0000186func Test_readfile_binary_empty()
Bram Moolenaar5c645a22022-09-21 22:00:03 +0100187 call writefile([], 'Xempty-file', 'D')
Dominique Pellef5d639a2022-01-12 15:24:40 +0000188 " This used to compare uninitialized memory in Vim <= 8.2.4065
189 call assert_equal([''], readfile('Xempty-file', 'b'))
Dominique Pellef5d639a2022-01-12 15:24:40 +0000190endfunc
191
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200192func Test_readfile_bom()
193 call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom')
194 call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom'))
195 call delete('XReadfile_bom')
196endfunc
197
198func Test_readfile_max()
Bram Moolenaar5c645a22022-09-21 22:00:03 +0100199 call writefile(range(1, 4), 'XReadfile_max', 'D')
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200200 call assert_equal(['1', '2'], readfile('XReadfile_max', '', 2))
201 call assert_equal(['3', '4'], readfile('XReadfile_max', '', -2))
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100202endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +0100203
204func Test_let_errmsg()
205 call assert_fails('let v:errmsg = []', 'E730:')
206 let v:errmsg = ''
207 call assert_fails('let v:errmsg = []', 'E730:')
208 let v:errmsg = ''
209endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200210
211func Test_string_concatenation()
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 call assert_equal('ab', 'a'..'b')
218 call assert_equal('ab', 'a' ..'b')
219 call assert_equal('ab', 'a'.. 'b')
220 call assert_equal('ab', 'a' .. 'b')
221
222 let a = 'a'
223 let b = 'b'
224 let a .= b
225 call assert_equal('ab', a)
226
227 let a = 'a'
228 let a.=b
229 call assert_equal('ab', a)
230
231 let a = 'a'
232 let a ..= b
233 call assert_equal('ab', a)
234
235 let a = 'a'
236 let a..=b
237 call assert_equal('ab', a)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200238
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100239 let a = 'A'
240 let b = 1.234
241 call assert_equal('A1.234', a .. b)
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200242endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200243
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200244" Test fix for issue #4507
245func Test_skip_after_throw()
246 try
247 throw 'something'
248 let x = wincol() || &ts
249 catch /something/
250 endtry
251endfunc
252
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200253scriptversion 2
254func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200255 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200256 let a = 'a'
257 let b = 'b'
258
259 call assert_fails('echo a . b', 'E15:')
260 call assert_fails('let a .= b', 'E985:')
Bram Moolenaarfae55a92021-06-17 22:08:30 +0200261 call assert_fails('let vers = 1.2.3', 'E488:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200262
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100263 let f = .5
264 call assert_equal(0.5, f)
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200265endfunc
266
267scriptversion 1
268func Test_string_concat_scriptversion1()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200269 call assert_true(has('vimscript-1'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200270 let a = 'a'
271 let b = 'b'
272
273 echo a . b
274 let a .= b
275 let vers = 1.2.3
276 call assert_equal('123', vers)
277
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100278 call assert_fails('let f = .5', 'E15:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200279endfunc
280
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200281scriptversion 3
282func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200283 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200284 call assert_fails('echo version', 'E121:')
285 call assert_false(exists('version'))
286 let version = 1
287 call assert_equal(1, version)
288endfunc
289
290scriptversion 2
291func Test_vvar_scriptversion2()
292 call assert_true(exists('version'))
293 echo version
294 call assert_fails('let version = 1', 'E46:')
295 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200296
297 call assert_equal(v:version, v:versionlong / 10000)
298 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200299endfunc
300
Bram Moolenaar61343f02019-07-20 21:11:13 +0200301func Test_dict_access_scriptversion2()
302 let l:x = {'foo': 1}
303
304 call assert_false(0 && l:x.foo)
305 call assert_true(1 && l:x.foo)
306endfunc
307
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200308scriptversion 4
309func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200310 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200311 call assert_equal(17, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200312 call assert_equal(15, 0o17)
313 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200314 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100315 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200316 call assert_equal(64, 0b1'00'00'00)
317 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200318 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200319 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200320 call assert_equal("1234", execute("echo 1'234")->trim())
321 call assert_equal('1 234', execute("echo 1''234")->trim())
322 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200323endfunc
324
325scriptversion 1
326func Test_vvar_scriptversion1()
327 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200328 call assert_equal(15, 0o17)
329 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200330 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100331 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200332endfunc
333
334func Test_scriptversion_fail()
Bram Moolenaar5c645a22022-09-21 22:00:03 +0100335 call writefile(['scriptversion 9'], 'Xversionscript', 'D')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200336 call assert_fails('source Xversionscript', 'E999:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200337endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100338
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200339func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100340 call assert_fails('execute test_null_list()', 'E730:')
341 call assert_fails('execute test_null_dict()', 'E731:')
342 call assert_fails('execute test_null_blob()', 'E976:')
343 execute test_null_string()
344 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200345 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100346 if has('job')
347 call assert_fails('execute test_null_job()', 'E908:')
348 call assert_fails('execute test_null_channel()', 'E908:')
349 endif
350endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100351
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100352func Test_number_max_min_size()
353 " This will fail on systems without 64 bit number support or when not
354 " configured correctly.
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100355 call assert_equal(64, v:numbersize)
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100356
357 call assert_true(v:numbermin < -9999999)
358 call assert_true(v:numbermax > 9999999)
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100359endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100360
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200361func Assert_reg(name, type, value, valuestr, expr, exprstr)
362 call assert_equal(a:type, getregtype(a:name))
363 call assert_equal(a:value, getreg(a:name))
364 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
365 call assert_equal(a:expr, getreg(a:name, 1))
366 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
367endfunc
368
369func Test_let_register()
370 let @" = 'abc'
371 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
372 let @" = "abc\n"
373 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
374 let @" = "abc\<C-m>"
375 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
376 let @= = '"abc"'
377 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
378endfunc
379
380func Assert_regput(name, result)
381 new
382 execute "silent normal! o==\n==\e\"" . a:name . "P"
383 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200384 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200385endfunc
386
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200387func Test_setreg_basic()
388 call setreg('a', 'abcA', 'c')
389 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
390 call Assert_regput('a', ['==', '=abcA='])
391
392 call setreg('A', 'abcAc', 'c')
393 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
394 call Assert_regput('a', ['==', '=abcAabcAc='])
395
396 call setreg('A', 'abcAl', 'l')
397 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
398 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
399
400 call setreg('A', 'abcAc2','c')
401 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
402 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
403
404 call setreg('b', 'abcB', 'v')
405 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
406 call Assert_regput('b', ['==', '=abcB='])
407
408 call setreg('b', 'abcBc', 'ca')
409 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
410 call Assert_regput('b', ['==', '=abcBabcBc='])
411
412 call setreg('b', 'abcBb', 'ba')
413 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
414 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
415
416 call setreg('b', 'abcBc2','ca')
417 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
418 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
419
420 call setreg('b', 'abcBb2','b50a')
421 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
422 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
423
424 call setreg('c', 'abcC', 'l')
425 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
426 call Assert_regput('c', ['==', 'abcC', '=='])
427
428 call setreg('C', 'abcCl', 'l')
429 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
430 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
431
432 call setreg('C', 'abcCc', 'c')
433 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
434 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
435
436 call setreg('d', 'abcD', 'V')
437 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
438 call Assert_regput('d', ['==', 'abcD', '=='])
439
440 call setreg('D', 'abcDb', 'b')
441 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
442 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
443
444 call setreg('e', 'abcE', 'b')
445 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
446 call Assert_regput('e', ['==', '=abcE='])
447
448 call setreg('E', 'abcEb', 'b')
449 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
450 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
451
452 call setreg('E', 'abcEl', 'l')
453 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
454 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
455
456 call setreg('f', 'abcF', "\<C-v>")
457 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
458 call Assert_regput('f', ['==', '=abcF='])
459
460 call setreg('F', 'abcFc', 'c')
461 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
462 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
463
464 call setreg('g', 'abcG', 'b10')
465 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
466 call Assert_regput('g', ['==', '=abcG ='])
467
468 call setreg('h', 'abcH', "\<C-v>10")
469 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
470 call Assert_regput('h', ['==', '=abcH ='])
471
472 call setreg('I', 'abcI')
473 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
474 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200475
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200476 " Appending NL with setreg()
477 call setreg('a', 'abcA2', 'c')
478 call setreg('b', 'abcB2', 'v')
479 call setreg('c', 'abcC2', 'l')
480 call setreg('d', 'abcD2', 'V')
481 call setreg('e', 'abcE2', 'b')
482 call setreg('f', 'abcF2', "\<C-v>")
483 call setreg('g', 'abcG2', 'b10')
484 call setreg('h', 'abcH2', "\<C-v>10")
485 call setreg('I', 'abcI2')
486
487 call setreg('A', "\n")
488 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
489 call Assert_regput('A', ['==', 'abcA2', '=='])
490
491 call setreg('B', "\n", 'c')
492 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
493 call Assert_regput('B', ['==', '=abcB2', '='])
494
495 call setreg('C', "\n")
496 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
497 call Assert_regput('C', ['==', 'abcC2', '', '=='])
498
499 call setreg('D', "\n", 'l')
500 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
501 call Assert_regput('D', ['==', 'abcD2', '', '=='])
502
503 call setreg('E', "\n")
504 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
505 call Assert_regput('E', ['==', 'abcE2', '', '=='])
506
507 call setreg('F', "\n", 'b')
508 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
509 call Assert_regput('F', ['==', '=abcF2=', ' '])
510
511 " Setting lists with setreg()
512 call setreg('a', ['abcA3'], 'c')
513 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
514 call Assert_regput('a', ['==', '=abcA3='])
515
516 call setreg('b', ['abcB3'], 'l')
517 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
518 call Assert_regput('b', ['==', 'abcB3', '=='])
519
520 call setreg('c', ['abcC3'], 'b')
521 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
522 call Assert_regput('c', ['==', '=abcC3='])
523
524 call setreg('d', ['abcD3'])
525 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
526 call Assert_regput('d', ['==', 'abcD3', '=='])
527
528 call setreg('e', [1, 2, 'abc', 3])
529 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
530 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
531
532 call setreg('f', [1, 2, 3])
533 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
534 call Assert_regput('f', ['==', '1', '2', '3', '=='])
535
536 " Appending lists with setreg()
537 call setreg('A', ['abcA3c'], 'c')
538 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
539 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
540
541 call setreg('b', ['abcB3l'], 'la')
542 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
543 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
544
545 call setreg('C', ['abcC3b'], 'lb')
546 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
547 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
548
549 call setreg('D', ['abcD32'])
550 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
551 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
552
553 call setreg('A', ['abcA32'])
554 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
555 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
556
557 call setreg('B', ['abcB3c'], 'c')
558 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
559 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
560
561 call setreg('C', ['abcC3l'], 'l')
562 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
563 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
564
565 call setreg('D', ['abcD3b'], 'b')
566 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
567 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
568
569 " Appending lists with NL with setreg()
570 call setreg('A', ["\n", 'abcA3l2'], 'l')
571 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']")
572 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
573
574 call setreg('B', ["\n", 'abcB3c2'], 'c')
575 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']")
576 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
577
578 call setreg('C', ["\n", 'abcC3b2'], 'b')
579 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']")
580 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
581
582 call setreg('D', ["\n", 'abcD3b50'],'b50')
583 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']")
584 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
585
586 " Setting lists with NLs with setreg()
587 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
588 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']")
589 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
590
591 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
592 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']")
593 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
594
595 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
596 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']")
597 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
598
599 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
600 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']")
601 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
602
603 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
604 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']")
605 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
606
607 " Search and expressions
608 call setreg('/', ['abc/'])
609 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
610 call Assert_regput('/', ['==', '=abc/='])
611
612 call setreg('/', ["abc/\n"])
613 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
614 call Assert_regput('/', ['==', "=abc/\n="])
615
616 call setreg('=', ['"abc/"'])
617 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
618
619 call setreg('=', ["\"abc/\n\""])
620 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
621
622 " System clipboard
623 if has('clipboard')
624 new | only!
625 call setline(1, ['clipboard contents', 'something else'])
626 " Save and restore system clipboard.
627 " If no connection to X-Server is possible, test should succeed.
628 let _clipreg = ['*', getreg('*'), getregtype('*')]
629 let _clipopt = &cb
630 let &cb='unnamed'
631 1y
632 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
633 tabdo :windo :echo "hi"
634 2y
635 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
636 let &cb=_clipopt
637 call call('setreg', _clipreg)
638 enew!
639 endif
640
Bram Moolenaar08f41572020-04-20 16:50:00 +0200641 " Error cases
642 call assert_fails('call setreg()', 'E119:')
643 call assert_fails('call setreg(1)', 'E119:')
644 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
645 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200646 call assert_fails('call setreg(1, 2, [])', 'E730:')
647 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
648 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
649 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
650endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200651
Bram Moolenaarae95a392020-08-06 16:38:12 +0200652func Test_curly_assignment()
653 let s:svar = 'svar'
654 let g:gvar = 'gvar'
655 let lname = 'gvar'
656 let gname = 'gvar'
657 let {'s:'.lname} = {'g:'.gname}
658 call assert_equal('gvar', s:gvar)
659 let s:gvar = ''
660 let { 's:'.lname } = { 'g:'.gname }
661 call assert_equal('gvar', s:gvar)
662 let s:gvar = ''
663 let { 's:' . lname } = { 'g:' . gname }
664 call assert_equal('gvar', s:gvar)
665 let s:gvar = ''
666 let { 's:' .. lname } = { 'g:' .. gname }
667 call assert_equal('gvar', s:gvar)
668
669 unlet s:svar
670 unlet s:gvar
671 unlet g:gvar
672endfunc
673
Bram Moolenaarfe6fb262022-01-24 18:16:12 +0000674func Test_deep_recursion()
675 " this was running out of stack
676 call assert_fails("exe 'if ' .. repeat('(', 1002)", 'E1169: Expression too recursive: ((')
677endfunc
678
zeertzjqdb088872022-05-02 22:53:45 +0100679" K_SPECIAL in the modified character used be escaped, which causes
680" double-escaping with feedkeys() or as the return value of an <expr> mapping,
681" and doesn't match what getchar() returns,
682func Test_modified_char_no_escape_special()
683 nnoremap <M-…> <Cmd>let g:got_m_ellipsis += 1<CR>
684 call feedkeys("\<M-…>", 't')
685 call assert_equal("\<M-…>", getchar())
686 let g:got_m_ellipsis = 0
687 call feedkeys("\<M-…>", 'xt')
688 call assert_equal(1, g:got_m_ellipsis)
689 func Func()
690 return "\<M-…>"
691 endfunc
692 nmap <expr> <F2> Func()
693 call feedkeys("\<F2>", 'xt')
694 call assert_equal(2, g:got_m_ellipsis)
695 delfunc Func
696 nunmap <F2>
697 unlet g:got_m_ellipsis
698 nunmap <M-…>
699endfunc
700
Bram Moolenaar1e56bda2022-07-29 15:28:27 +0100701func Test_eval_string_in_special_key()
702 " this was using the '{' inside <> as the start of an interpolated string
703 silent! echo 0{1-$"\<S--{>n|nö%�
704endfunc
705
Bram Moolenaar8b633132020-03-20 18:20:51 +0100706" vim: shiftwidth=2 sts=2 expandtab