blob: 7d8421b7250d54f0a0dcd39338a729c2faeff781 [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 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
163 call writefile(lines, 'XinvalidFor')
164 " only test that this doesn't crash
165 call RunVim([], [], '-u NONE -e -s -S XinvalidFor -c qa')
166
167 call delete('XinvalidFor')
168endfunc
169
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100170func Test_readfile_binary()
171 new
172 call setline(1, ['one', 'two', 'three'])
173 setlocal ff=dos
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200174 silent write XReadfile_bin
175 let lines = 'XReadfile_bin'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100176 call assert_equal(['one', 'two', 'three'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200177 let lines = readfile('XReadfile_bin', '', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100178 call assert_equal(['one', 'two'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200179 let lines = readfile('XReadfile_bin', 'b')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100180 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200181 let lines = readfile('XReadfile_bin', 'b', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100182 call assert_equal(["one\r", "two\r"], lines)
183
184 bwipe!
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200185 call delete('XReadfile_bin')
186endfunc
187
Dominique Pellef5d639a2022-01-12 15:24:40 +0000188func Test_readfile_binary_empty()
189 call writefile([], 'Xempty-file')
190 " This used to compare uninitialized memory in Vim <= 8.2.4065
191 call assert_equal([''], readfile('Xempty-file', 'b'))
192 call delete('Xempty-file')
193endfunc
194
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200195func Test_readfile_bom()
196 call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom')
197 call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom'))
198 call delete('XReadfile_bom')
199endfunc
200
201func Test_readfile_max()
202 call writefile(range(1, 4), 'XReadfile_max')
203 call assert_equal(['1', '2'], readfile('XReadfile_max', '', 2))
204 call assert_equal(['3', '4'], readfile('XReadfile_max', '', -2))
205 call delete('XReadfile_max')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100206endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +0100207
208func Test_let_errmsg()
209 call assert_fails('let v:errmsg = []', 'E730:')
210 let v:errmsg = ''
211 call assert_fails('let v:errmsg = []', 'E730:')
212 let v:errmsg = ''
213endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200214
215func Test_string_concatenation()
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 call assert_equal('ab', 'a'..'b')
222 call assert_equal('ab', 'a' ..'b')
223 call assert_equal('ab', 'a'.. 'b')
224 call assert_equal('ab', 'a' .. 'b')
225
226 let a = 'a'
227 let b = 'b'
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)
238
239 let a = 'a'
240 let a..=b
241 call assert_equal('ab', a)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200242
243 if has('float')
244 let a = 'A'
245 let b = 1.234
Bram Moolenaar3cfa5b12021-06-06 14:14:39 +0200246 call assert_equal('A1.234', a .. b)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200247 endif
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200248endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200249
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200250" Test fix for issue #4507
251func Test_skip_after_throw()
252 try
253 throw 'something'
254 let x = wincol() || &ts
255 catch /something/
256 endtry
257endfunc
258
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200259scriptversion 2
260func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200261 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200262 let a = 'a'
263 let b = 'b'
264
265 call assert_fails('echo a . b', 'E15:')
266 call assert_fails('let a .= b', 'E985:')
Bram Moolenaarfae55a92021-06-17 22:08:30 +0200267 call assert_fails('let vers = 1.2.3', 'E488:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200268
269 if has('float')
270 let f = .5
271 call assert_equal(0.5, f)
272 endif
273endfunc
274
275scriptversion 1
276func Test_string_concat_scriptversion1()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200277 call assert_true(has('vimscript-1'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200278 let a = 'a'
279 let b = 'b'
280
281 echo a . b
282 let a .= b
283 let vers = 1.2.3
284 call assert_equal('123', vers)
285
286 if has('float')
287 call assert_fails('let f = .5', 'E15:')
288 endif
289endfunc
290
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200291scriptversion 3
292func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200293 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200294 call assert_fails('echo version', 'E121:')
295 call assert_false(exists('version'))
296 let version = 1
297 call assert_equal(1, version)
298endfunc
299
300scriptversion 2
301func Test_vvar_scriptversion2()
302 call assert_true(exists('version'))
303 echo version
304 call assert_fails('let version = 1', 'E46:')
305 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200306
307 call assert_equal(v:version, v:versionlong / 10000)
308 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200309endfunc
310
Bram Moolenaar61343f02019-07-20 21:11:13 +0200311func Test_dict_access_scriptversion2()
312 let l:x = {'foo': 1}
313
314 call assert_false(0 && l:x.foo)
315 call assert_true(1 && l:x.foo)
316endfunc
317
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200318scriptversion 4
319func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200320 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200321 call assert_equal(17, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200322 call assert_equal(15, 0o17)
323 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200324 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100325 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200326 call assert_equal(64, 0b1'00'00'00)
327 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200328 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200329 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200330 call assert_equal("1234", execute("echo 1'234")->trim())
331 call assert_equal('1 234', execute("echo 1''234")->trim())
332 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200333endfunc
334
335scriptversion 1
336func Test_vvar_scriptversion1()
337 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200338 call assert_equal(15, 0o17)
339 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200340 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100341 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200342endfunc
343
344func Test_scriptversion_fail()
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200345 call writefile(['scriptversion 9'], 'Xversionscript')
346 call assert_fails('source Xversionscript', 'E999:')
347 call delete('Xversionscript')
348endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100349
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200350func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100351 call assert_fails('execute test_null_list()', 'E730:')
352 call assert_fails('execute test_null_dict()', 'E731:')
353 call assert_fails('execute test_null_blob()', 'E976:')
354 execute test_null_string()
355 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200356 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100357 if has('job')
358 call assert_fails('execute test_null_job()', 'E908:')
359 call assert_fails('execute test_null_channel()', 'E908:')
360 endif
361endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100362
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100363func Test_number_max_min_size()
364 " This will fail on systems without 64 bit number support or when not
365 " configured correctly.
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100366 call assert_equal(64, v:numbersize)
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100367
368 call assert_true(v:numbermin < -9999999)
369 call assert_true(v:numbermax > 9999999)
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100370endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100371
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200372func Assert_reg(name, type, value, valuestr, expr, exprstr)
373 call assert_equal(a:type, getregtype(a:name))
374 call assert_equal(a:value, getreg(a:name))
375 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
376 call assert_equal(a:expr, getreg(a:name, 1))
377 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
378endfunc
379
380func Test_let_register()
381 let @" = 'abc'
382 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
383 let @" = "abc\n"
384 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
385 let @" = "abc\<C-m>"
386 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
387 let @= = '"abc"'
388 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
389endfunc
390
391func Assert_regput(name, result)
392 new
393 execute "silent normal! o==\n==\e\"" . a:name . "P"
394 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200395 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200396endfunc
397
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200398func Test_setreg_basic()
399 call setreg('a', 'abcA', 'c')
400 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
401 call Assert_regput('a', ['==', '=abcA='])
402
403 call setreg('A', 'abcAc', 'c')
404 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
405 call Assert_regput('a', ['==', '=abcAabcAc='])
406
407 call setreg('A', 'abcAl', 'l')
408 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
409 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
410
411 call setreg('A', 'abcAc2','c')
412 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
413 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
414
415 call setreg('b', 'abcB', 'v')
416 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
417 call Assert_regput('b', ['==', '=abcB='])
418
419 call setreg('b', 'abcBc', 'ca')
420 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
421 call Assert_regput('b', ['==', '=abcBabcBc='])
422
423 call setreg('b', 'abcBb', 'ba')
424 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
425 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
426
427 call setreg('b', 'abcBc2','ca')
428 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
429 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
430
431 call setreg('b', 'abcBb2','b50a')
432 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
433 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
434
435 call setreg('c', 'abcC', 'l')
436 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
437 call Assert_regput('c', ['==', 'abcC', '=='])
438
439 call setreg('C', 'abcCl', 'l')
440 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
441 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
442
443 call setreg('C', 'abcCc', 'c')
444 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
445 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
446
447 call setreg('d', 'abcD', 'V')
448 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
449 call Assert_regput('d', ['==', 'abcD', '=='])
450
451 call setreg('D', 'abcDb', 'b')
452 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
453 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
454
455 call setreg('e', 'abcE', 'b')
456 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
457 call Assert_regput('e', ['==', '=abcE='])
458
459 call setreg('E', 'abcEb', 'b')
460 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
461 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
462
463 call setreg('E', 'abcEl', 'l')
464 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
465 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
466
467 call setreg('f', 'abcF', "\<C-v>")
468 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
469 call Assert_regput('f', ['==', '=abcF='])
470
471 call setreg('F', 'abcFc', 'c')
472 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
473 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
474
475 call setreg('g', 'abcG', 'b10')
476 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
477 call Assert_regput('g', ['==', '=abcG ='])
478
479 call setreg('h', 'abcH', "\<C-v>10")
480 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
481 call Assert_regput('h', ['==', '=abcH ='])
482
483 call setreg('I', 'abcI')
484 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
485 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200486
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200487 " Appending NL with setreg()
488 call setreg('a', 'abcA2', 'c')
489 call setreg('b', 'abcB2', 'v')
490 call setreg('c', 'abcC2', 'l')
491 call setreg('d', 'abcD2', 'V')
492 call setreg('e', 'abcE2', 'b')
493 call setreg('f', 'abcF2', "\<C-v>")
494 call setreg('g', 'abcG2', 'b10')
495 call setreg('h', 'abcH2', "\<C-v>10")
496 call setreg('I', 'abcI2')
497
498 call setreg('A', "\n")
499 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
500 call Assert_regput('A', ['==', 'abcA2', '=='])
501
502 call setreg('B', "\n", 'c')
503 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
504 call Assert_regput('B', ['==', '=abcB2', '='])
505
506 call setreg('C', "\n")
507 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
508 call Assert_regput('C', ['==', 'abcC2', '', '=='])
509
510 call setreg('D', "\n", 'l')
511 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
512 call Assert_regput('D', ['==', 'abcD2', '', '=='])
513
514 call setreg('E', "\n")
515 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
516 call Assert_regput('E', ['==', 'abcE2', '', '=='])
517
518 call setreg('F', "\n", 'b')
519 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
520 call Assert_regput('F', ['==', '=abcF2=', ' '])
521
522 " Setting lists with setreg()
523 call setreg('a', ['abcA3'], 'c')
524 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
525 call Assert_regput('a', ['==', '=abcA3='])
526
527 call setreg('b', ['abcB3'], 'l')
528 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
529 call Assert_regput('b', ['==', 'abcB3', '=='])
530
531 call setreg('c', ['abcC3'], 'b')
532 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
533 call Assert_regput('c', ['==', '=abcC3='])
534
535 call setreg('d', ['abcD3'])
536 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
537 call Assert_regput('d', ['==', 'abcD3', '=='])
538
539 call setreg('e', [1, 2, 'abc', 3])
540 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
541 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
542
543 call setreg('f', [1, 2, 3])
544 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
545 call Assert_regput('f', ['==', '1', '2', '3', '=='])
546
547 " Appending lists with setreg()
548 call setreg('A', ['abcA3c'], 'c')
549 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
550 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
551
552 call setreg('b', ['abcB3l'], 'la')
553 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
554 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
555
556 call setreg('C', ['abcC3b'], 'lb')
557 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
558 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
559
560 call setreg('D', ['abcD32'])
561 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
562 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
563
564 call setreg('A', ['abcA32'])
565 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
566 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
567
568 call setreg('B', ['abcB3c'], 'c')
569 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
570 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
571
572 call setreg('C', ['abcC3l'], 'l')
573 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
574 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
575
576 call setreg('D', ['abcD3b'], 'b')
577 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
578 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
579
580 " Appending lists with NL with setreg()
581 call setreg('A', ["\n", 'abcA3l2'], 'l')
582 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']")
583 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
584
585 call setreg('B', ["\n", 'abcB3c2'], 'c')
586 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']")
587 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
588
589 call setreg('C', ["\n", 'abcC3b2'], 'b')
590 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']")
591 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
592
593 call setreg('D', ["\n", 'abcD3b50'],'b50')
594 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']")
595 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
596
597 " Setting lists with NLs with setreg()
598 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
599 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']")
600 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
601
602 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
603 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']")
604 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
605
606 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
607 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']")
608 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
609
610 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
611 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']")
612 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
613
614 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
615 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']")
616 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
617
618 " Search and expressions
619 call setreg('/', ['abc/'])
620 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
621 call Assert_regput('/', ['==', '=abc/='])
622
623 call setreg('/', ["abc/\n"])
624 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
625 call Assert_regput('/', ['==', "=abc/\n="])
626
627 call setreg('=', ['"abc/"'])
628 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
629
630 call setreg('=', ["\"abc/\n\""])
631 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
632
633 " System clipboard
634 if has('clipboard')
635 new | only!
636 call setline(1, ['clipboard contents', 'something else'])
637 " Save and restore system clipboard.
638 " If no connection to X-Server is possible, test should succeed.
639 let _clipreg = ['*', getreg('*'), getregtype('*')]
640 let _clipopt = &cb
641 let &cb='unnamed'
642 1y
643 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
644 tabdo :windo :echo "hi"
645 2y
646 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
647 let &cb=_clipopt
648 call call('setreg', _clipreg)
649 enew!
650 endif
651
Bram Moolenaar08f41572020-04-20 16:50:00 +0200652 " Error cases
653 call assert_fails('call setreg()', 'E119:')
654 call assert_fails('call setreg(1)', 'E119:')
655 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
656 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200657 call assert_fails('call setreg(1, 2, [])', 'E730:')
658 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
659 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
660 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
661endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200662
Bram Moolenaarae95a392020-08-06 16:38:12 +0200663func Test_curly_assignment()
664 let s:svar = 'svar'
665 let g:gvar = 'gvar'
666 let lname = 'gvar'
667 let gname = 'gvar'
668 let {'s:'.lname} = {'g:'.gname}
669 call assert_equal('gvar', s:gvar)
670 let s:gvar = ''
671 let { 's:'.lname } = { 'g:'.gname }
672 call assert_equal('gvar', s:gvar)
673 let s:gvar = ''
674 let { 's:' . lname } = { 'g:' . gname }
675 call assert_equal('gvar', s:gvar)
676 let s:gvar = ''
677 let { 's:' .. lname } = { 'g:' .. gname }
678 call assert_equal('gvar', s:gvar)
679
680 unlet s:svar
681 unlet s:gvar
682 unlet g:gvar
683endfunc
684
Bram Moolenaarfe6fb262022-01-24 18:16:12 +0000685func Test_deep_recursion()
686 " this was running out of stack
687 call assert_fails("exe 'if ' .. repeat('(', 1002)", 'E1169: Expression too recursive: ((')
688endfunc
689
zeertzjqdb088872022-05-02 22:53:45 +0100690" K_SPECIAL in the modified character used be escaped, which causes
691" double-escaping with feedkeys() or as the return value of an <expr> mapping,
692" and doesn't match what getchar() returns,
693func Test_modified_char_no_escape_special()
694 nnoremap <M-…> <Cmd>let g:got_m_ellipsis += 1<CR>
695 call feedkeys("\<M-…>", 't')
696 call assert_equal("\<M-…>", getchar())
697 let g:got_m_ellipsis = 0
698 call feedkeys("\<M-…>", 'xt')
699 call assert_equal(1, g:got_m_ellipsis)
700 func Func()
701 return "\<M-…>"
702 endfunc
703 nmap <expr> <F2> Func()
704 call feedkeys("\<F2>", 'xt')
705 call assert_equal(2, g:got_m_ellipsis)
706 delfunc Func
707 nunmap <F2>
708 unlet g:got_m_ellipsis
709 nunmap <M-…>
710endfunc
711
Bram Moolenaar1e56bda2022-07-29 15:28:27 +0100712func Test_eval_string_in_special_key()
713 " this was using the '{' inside <> as the start of an interpolated string
714 silent! echo 0{1-$"\<S--{>n|nö%�
715endfunc
716
Bram Moolenaar8b633132020-03-20 18:20:51 +0100717" vim: shiftwidth=2 sts=2 expandtab