blob: 313d791850c003bfbe907b33d89e440567ea3d13 [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
4
Bram Moolenaarfabaf752017-12-23 17:26:11 +01005function s:foo() abort
6 try
7 return [] == 0
8 catch
9 return 1
10 endtry
11endfunction
12
13func Test_catch_return_with_error()
14 call assert_equal(1, s:foo())
15endfunc
Bram Moolenaar2be57332018-02-13 18:05:18 +010016
17func Test_nocatch_restore_silent_emsg()
18 silent! try
19 throw 1
20 catch
21 endtry
Bram Moolenaar2b6ef852020-07-11 22:25:57 +020022 echoerr 'wrong again'
23 call assert_equal('wrong again', ScreenLine(&lines))
Bram Moolenaar2be57332018-02-13 18:05:18 +010024endfunc
Bram Moolenaar78a16b02018-04-14 13:51:55 +020025
26func Test_mkdir_p()
27 call mkdir('Xmkdir/nested', 'p')
28 call assert_true(isdirectory('Xmkdir/nested'))
29 try
30 " Trying to make existing directories doesn't error
31 call mkdir('Xmkdir', 'p')
32 call mkdir('Xmkdir/nested', 'p')
33 catch /E739:/
34 call assert_report('mkdir(..., "p") failed for an existing directory')
35 endtry
36 " 'p' doesn't suppress real errors
37 call writefile([], 'Xfile')
Bram Moolenaare2e40752020-09-04 21:18:46 +020038 call assert_fails('call mkdir("Xfile", "p")', 'E739:')
Bram Moolenaar78a16b02018-04-14 13:51:55 +020039 call delete('Xfile')
40 call delete('Xmkdir', 'rf')
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
46func Test_line_continuation()
47 let array = [5,
48 "\ ignore this
49 \ 6,
50 "\ more to ignore
51 "\ more moreto ignore
52 \ ]
53 "\ and some more
54 call assert_equal([5, 6], array)
55endfunc
Bram Moolenaar88b53fd2018-12-05 18:43:28 +010056
57func Test_E963()
58 " These commands used to cause an internal error prior to vim 8.1.0563
59 let v_e = v:errors
60 let v_o = v:oldfiles
61 call assert_fails("let v:errors=''", 'E963:')
62 call assert_equal(v_e, v:errors)
63 call assert_fails("let v:oldfiles=''", 'E963:')
64 call assert_equal(v_o, v:oldfiles)
65endfunc
Bram Moolenaarc0f5a782019-01-13 15:16:13 +010066
67func Test_for_invalid()
Sean Dewar80d73952021-08-04 19:25:54 +020068 call assert_fails("for x in 99", 'E1098:')
69 call assert_fails("for x in function('winnr')", 'E1098:')
70 call assert_fails("for x in {'a': 9}", 'E1098:')
Bram Moolenaardf2c2982021-01-28 20:18:08 +010071
72 if 0
73 /1/5/2/s/\n
74 endif
75 redraw
Bram Moolenaarc0f5a782019-01-13 15:16:13 +010076endfunc
Bram Moolenaar05500ec2019-01-13 19:10:33 +010077
Bram Moolenaarf6d39c32022-08-16 17:50:38 +010078func Test_for_over_null_string()
79 let save_enc = &enc
80 set enc=iso8859
81 let cnt = 0
82 for c in test_null_string()
83 let cnt += 1
84 endfor
85 call assert_equal(0, cnt)
86
87 let &enc = save_enc
88endfunc
89
Bram Moolenaar05500ec2019-01-13 19:10:33 +010090func Test_readfile_binary()
91 new
92 call setline(1, ['one', 'two', 'three'])
93 setlocal ff=dos
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020094 silent write XReadfile_bin
95 let lines = 'XReadfile_bin'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +010096 call assert_equal(['one', 'two', 'three'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020097 let lines = readfile('XReadfile_bin', '', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +010098 call assert_equal(['one', 'two'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020099 let lines = readfile('XReadfile_bin', 'b')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100100 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200101 let lines = readfile('XReadfile_bin', 'b', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100102 call assert_equal(["one\r", "two\r"], lines)
103
104 bwipe!
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200105 call delete('XReadfile_bin')
106endfunc
107
Dominique Pellef5d639a2022-01-12 15:24:40 +0000108func Test_readfile_binary_empty()
109 call writefile([], 'Xempty-file')
110 " This used to compare uninitialized memory in Vim <= 8.2.4065
111 call assert_equal([''], readfile('Xempty-file', 'b'))
112 call delete('Xempty-file')
113endfunc
114
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200115func Test_readfile_bom()
116 call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom')
117 call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom'))
118 call delete('XReadfile_bom')
119endfunc
120
121func Test_readfile_max()
122 call writefile(range(1, 4), 'XReadfile_max')
123 call assert_equal(['1', '2'], readfile('XReadfile_max', '', 2))
124 call assert_equal(['3', '4'], readfile('XReadfile_max', '', -2))
125 call delete('XReadfile_max')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100126endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +0100127
128func Test_let_errmsg()
129 call assert_fails('let v:errmsg = []', 'E730:')
130 let v:errmsg = ''
131 call assert_fails('let v:errmsg = []', 'E730:')
132 let v:errmsg = ''
133endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200134
135func Test_string_concatenation()
136 call assert_equal('ab', 'a'.'b')
137 call assert_equal('ab', 'a' .'b')
138 call assert_equal('ab', 'a'. 'b')
139 call assert_equal('ab', 'a' . 'b')
140
141 call assert_equal('ab', 'a'..'b')
142 call assert_equal('ab', 'a' ..'b')
143 call assert_equal('ab', 'a'.. 'b')
144 call assert_equal('ab', 'a' .. 'b')
145
146 let a = 'a'
147 let b = 'b'
148 let a .= b
149 call assert_equal('ab', a)
150
151 let a = 'a'
152 let a.=b
153 call assert_equal('ab', a)
154
155 let a = 'a'
156 let a ..= b
157 call assert_equal('ab', a)
158
159 let a = 'a'
160 let a..=b
161 call assert_equal('ab', a)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200162
163 if has('float')
164 let a = 'A'
165 let b = 1.234
Bram Moolenaar3cfa5b12021-06-06 14:14:39 +0200166 call assert_equal('A1.234', a .. b)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200167 endif
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200168endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200169
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200170" Test fix for issue #4507
171func Test_skip_after_throw()
172 try
173 throw 'something'
174 let x = wincol() || &ts
175 catch /something/
176 endtry
177endfunc
178
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200179scriptversion 2
180func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200181 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200182 let a = 'a'
183 let b = 'b'
184
185 call assert_fails('echo a . b', 'E15:')
186 call assert_fails('let a .= b', 'E985:')
Bram Moolenaarfae55a92021-06-17 22:08:30 +0200187 call assert_fails('let vers = 1.2.3', 'E488:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200188
189 if has('float')
190 let f = .5
191 call assert_equal(0.5, f)
192 endif
193endfunc
194
195scriptversion 1
196func Test_string_concat_scriptversion1()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200197 call assert_true(has('vimscript-1'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200198 let a = 'a'
199 let b = 'b'
200
201 echo a . b
202 let a .= b
203 let vers = 1.2.3
204 call assert_equal('123', vers)
205
206 if has('float')
207 call assert_fails('let f = .5', 'E15:')
208 endif
209endfunc
210
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200211scriptversion 3
212func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200213 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200214 call assert_fails('echo version', 'E121:')
215 call assert_false(exists('version'))
216 let version = 1
217 call assert_equal(1, version)
218endfunc
219
220scriptversion 2
221func Test_vvar_scriptversion2()
222 call assert_true(exists('version'))
223 echo version
224 call assert_fails('let version = 1', 'E46:')
225 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200226
227 call assert_equal(v:version, v:versionlong / 10000)
228 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200229endfunc
230
Bram Moolenaar61343f02019-07-20 21:11:13 +0200231func Test_dict_access_scriptversion2()
232 let l:x = {'foo': 1}
233
234 call assert_false(0 && l:x.foo)
235 call assert_true(1 && l:x.foo)
236endfunc
237
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200238scriptversion 4
239func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200240 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200241 call assert_equal(17, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200242 call assert_equal(15, 0o17)
243 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200244 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100245 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200246 call assert_equal(64, 0b1'00'00'00)
247 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200248 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200249 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200250 call assert_equal("1234", execute("echo 1'234")->trim())
251 call assert_equal('1 234', execute("echo 1''234")->trim())
252 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200253endfunc
254
255scriptversion 1
256func Test_vvar_scriptversion1()
257 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200258 call assert_equal(15, 0o17)
259 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200260 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100261 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200262endfunc
263
264func Test_scriptversion_fail()
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200265 call writefile(['scriptversion 9'], 'Xversionscript')
266 call assert_fails('source Xversionscript', 'E999:')
267 call delete('Xversionscript')
268endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100269
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200270func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100271 call assert_fails('execute test_null_list()', 'E730:')
272 call assert_fails('execute test_null_dict()', 'E731:')
273 call assert_fails('execute test_null_blob()', 'E976:')
274 execute test_null_string()
275 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200276 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100277 if has('job')
278 call assert_fails('execute test_null_job()', 'E908:')
279 call assert_fails('execute test_null_channel()', 'E908:')
280 endif
281endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100282
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100283func Test_number_max_min_size()
284 " This will fail on systems without 64 bit number support or when not
285 " configured correctly.
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100286 call assert_equal(64, v:numbersize)
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100287
288 call assert_true(v:numbermin < -9999999)
289 call assert_true(v:numbermax > 9999999)
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100290endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100291
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200292func Assert_reg(name, type, value, valuestr, expr, exprstr)
293 call assert_equal(a:type, getregtype(a:name))
294 call assert_equal(a:value, getreg(a:name))
295 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
296 call assert_equal(a:expr, getreg(a:name, 1))
297 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
298endfunc
299
300func Test_let_register()
301 let @" = 'abc'
302 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
303 let @" = "abc\n"
304 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
305 let @" = "abc\<C-m>"
306 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
307 let @= = '"abc"'
308 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
309endfunc
310
311func Assert_regput(name, result)
312 new
313 execute "silent normal! o==\n==\e\"" . a:name . "P"
314 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200315 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200316endfunc
317
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200318func Test_setreg_basic()
319 call setreg('a', 'abcA', 'c')
320 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
321 call Assert_regput('a', ['==', '=abcA='])
322
323 call setreg('A', 'abcAc', 'c')
324 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
325 call Assert_regput('a', ['==', '=abcAabcAc='])
326
327 call setreg('A', 'abcAl', 'l')
328 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
329 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
330
331 call setreg('A', 'abcAc2','c')
332 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
333 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
334
335 call setreg('b', 'abcB', 'v')
336 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
337 call Assert_regput('b', ['==', '=abcB='])
338
339 call setreg('b', 'abcBc', 'ca')
340 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
341 call Assert_regput('b', ['==', '=abcBabcBc='])
342
343 call setreg('b', 'abcBb', 'ba')
344 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
345 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
346
347 call setreg('b', 'abcBc2','ca')
348 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
349 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
350
351 call setreg('b', 'abcBb2','b50a')
352 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
353 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
354
355 call setreg('c', 'abcC', 'l')
356 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
357 call Assert_regput('c', ['==', 'abcC', '=='])
358
359 call setreg('C', 'abcCl', 'l')
360 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
361 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
362
363 call setreg('C', 'abcCc', 'c')
364 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
365 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
366
367 call setreg('d', 'abcD', 'V')
368 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
369 call Assert_regput('d', ['==', 'abcD', '=='])
370
371 call setreg('D', 'abcDb', 'b')
372 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
373 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
374
375 call setreg('e', 'abcE', 'b')
376 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
377 call Assert_regput('e', ['==', '=abcE='])
378
379 call setreg('E', 'abcEb', 'b')
380 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
381 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
382
383 call setreg('E', 'abcEl', 'l')
384 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
385 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
386
387 call setreg('f', 'abcF', "\<C-v>")
388 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
389 call Assert_regput('f', ['==', '=abcF='])
390
391 call setreg('F', 'abcFc', 'c')
392 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
393 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
394
395 call setreg('g', 'abcG', 'b10')
396 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
397 call Assert_regput('g', ['==', '=abcG ='])
398
399 call setreg('h', 'abcH', "\<C-v>10")
400 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
401 call Assert_regput('h', ['==', '=abcH ='])
402
403 call setreg('I', 'abcI')
404 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
405 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200406
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200407 " Appending NL with setreg()
408 call setreg('a', 'abcA2', 'c')
409 call setreg('b', 'abcB2', 'v')
410 call setreg('c', 'abcC2', 'l')
411 call setreg('d', 'abcD2', 'V')
412 call setreg('e', 'abcE2', 'b')
413 call setreg('f', 'abcF2', "\<C-v>")
414 call setreg('g', 'abcG2', 'b10')
415 call setreg('h', 'abcH2', "\<C-v>10")
416 call setreg('I', 'abcI2')
417
418 call setreg('A', "\n")
419 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
420 call Assert_regput('A', ['==', 'abcA2', '=='])
421
422 call setreg('B', "\n", 'c')
423 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
424 call Assert_regput('B', ['==', '=abcB2', '='])
425
426 call setreg('C', "\n")
427 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
428 call Assert_regput('C', ['==', 'abcC2', '', '=='])
429
430 call setreg('D', "\n", 'l')
431 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
432 call Assert_regput('D', ['==', 'abcD2', '', '=='])
433
434 call setreg('E', "\n")
435 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
436 call Assert_regput('E', ['==', 'abcE2', '', '=='])
437
438 call setreg('F', "\n", 'b')
439 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
440 call Assert_regput('F', ['==', '=abcF2=', ' '])
441
442 " Setting lists with setreg()
443 call setreg('a', ['abcA3'], 'c')
444 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
445 call Assert_regput('a', ['==', '=abcA3='])
446
447 call setreg('b', ['abcB3'], 'l')
448 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
449 call Assert_regput('b', ['==', 'abcB3', '=='])
450
451 call setreg('c', ['abcC3'], 'b')
452 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
453 call Assert_regput('c', ['==', '=abcC3='])
454
455 call setreg('d', ['abcD3'])
456 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
457 call Assert_regput('d', ['==', 'abcD3', '=='])
458
459 call setreg('e', [1, 2, 'abc', 3])
460 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
461 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
462
463 call setreg('f', [1, 2, 3])
464 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
465 call Assert_regput('f', ['==', '1', '2', '3', '=='])
466
467 " Appending lists with setreg()
468 call setreg('A', ['abcA3c'], 'c')
469 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
470 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
471
472 call setreg('b', ['abcB3l'], 'la')
473 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
474 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
475
476 call setreg('C', ['abcC3b'], 'lb')
477 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
478 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
479
480 call setreg('D', ['abcD32'])
481 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
482 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
483
484 call setreg('A', ['abcA32'])
485 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
486 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
487
488 call setreg('B', ['abcB3c'], 'c')
489 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
490 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
491
492 call setreg('C', ['abcC3l'], 'l')
493 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
494 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
495
496 call setreg('D', ['abcD3b'], 'b')
497 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
498 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
499
500 " Appending lists with NL with setreg()
501 call setreg('A', ["\n", 'abcA3l2'], 'l')
502 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']")
503 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
504
505 call setreg('B', ["\n", 'abcB3c2'], 'c')
506 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']")
507 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
508
509 call setreg('C', ["\n", 'abcC3b2'], 'b')
510 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']")
511 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
512
513 call setreg('D', ["\n", 'abcD3b50'],'b50')
514 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']")
515 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
516
517 " Setting lists with NLs with setreg()
518 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
519 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']")
520 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
521
522 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
523 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']")
524 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
525
526 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
527 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']")
528 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
529
530 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
531 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']")
532 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
533
534 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
535 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']")
536 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
537
538 " Search and expressions
539 call setreg('/', ['abc/'])
540 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
541 call Assert_regput('/', ['==', '=abc/='])
542
543 call setreg('/', ["abc/\n"])
544 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
545 call Assert_regput('/', ['==', "=abc/\n="])
546
547 call setreg('=', ['"abc/"'])
548 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
549
550 call setreg('=', ["\"abc/\n\""])
551 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
552
553 " System clipboard
554 if has('clipboard')
555 new | only!
556 call setline(1, ['clipboard contents', 'something else'])
557 " Save and restore system clipboard.
558 " If no connection to X-Server is possible, test should succeed.
559 let _clipreg = ['*', getreg('*'), getregtype('*')]
560 let _clipopt = &cb
561 let &cb='unnamed'
562 1y
563 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
564 tabdo :windo :echo "hi"
565 2y
566 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
567 let &cb=_clipopt
568 call call('setreg', _clipreg)
569 enew!
570 endif
571
Bram Moolenaar08f41572020-04-20 16:50:00 +0200572 " Error cases
573 call assert_fails('call setreg()', 'E119:')
574 call assert_fails('call setreg(1)', 'E119:')
575 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
576 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200577 call assert_fails('call setreg(1, 2, [])', 'E730:')
578 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
579 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
580 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
581endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200582
Bram Moolenaarae95a392020-08-06 16:38:12 +0200583func Test_curly_assignment()
584 let s:svar = 'svar'
585 let g:gvar = 'gvar'
586 let lname = 'gvar'
587 let gname = 'gvar'
588 let {'s:'.lname} = {'g:'.gname}
589 call assert_equal('gvar', s:gvar)
590 let s:gvar = ''
591 let { 's:'.lname } = { 'g:'.gname }
592 call assert_equal('gvar', s:gvar)
593 let s:gvar = ''
594 let { 's:' . lname } = { 'g:' . gname }
595 call assert_equal('gvar', s:gvar)
596 let s:gvar = ''
597 let { 's:' .. lname } = { 'g:' .. gname }
598 call assert_equal('gvar', s:gvar)
599
600 unlet s:svar
601 unlet s:gvar
602 unlet g:gvar
603endfunc
604
Bram Moolenaarfe6fb262022-01-24 18:16:12 +0000605func Test_deep_recursion()
606 " this was running out of stack
607 call assert_fails("exe 'if ' .. repeat('(', 1002)", 'E1169: Expression too recursive: ((')
608endfunc
609
zeertzjqdb088872022-05-02 22:53:45 +0100610" K_SPECIAL in the modified character used be escaped, which causes
611" double-escaping with feedkeys() or as the return value of an <expr> mapping,
612" and doesn't match what getchar() returns,
613func Test_modified_char_no_escape_special()
614 nnoremap <M-…> <Cmd>let g:got_m_ellipsis += 1<CR>
615 call feedkeys("\<M-…>", 't')
616 call assert_equal("\<M-…>", getchar())
617 let g:got_m_ellipsis = 0
618 call feedkeys("\<M-…>", 'xt')
619 call assert_equal(1, g:got_m_ellipsis)
620 func Func()
621 return "\<M-…>"
622 endfunc
623 nmap <expr> <F2> Func()
624 call feedkeys("\<F2>", 'xt')
625 call assert_equal(2, g:got_m_ellipsis)
626 delfunc Func
627 nunmap <F2>
628 unlet g:got_m_ellipsis
629 nunmap <M-…>
630endfunc
631
Bram Moolenaar1e56bda2022-07-29 15:28:27 +0100632func Test_eval_string_in_special_key()
633 " this was using the '{' inside <> as the start of an interpolated string
634 silent! echo 0{1-$"\<S--{>n|nö%�
635endfunc
636
Bram Moolenaar8b633132020-03-20 18:20:51 +0100637" vim: shiftwidth=2 sts=2 expandtab