blob: 934286bbe8418abef444afd1cce9fb57e42aff3f [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
38 call writefile([], 'Xfile')
Bram Moolenaare2e40752020-09-04 21:18:46 +020039 call assert_fails('call mkdir("Xfile", "p")', 'E739:')
Bram Moolenaar78a16b02018-04-14 13:51:55 +020040 call delete('Xfile')
41 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
47func Test_line_continuation()
48 let array = [5,
49 "\ ignore this
50 \ 6,
51 "\ more to ignore
52 "\ more moreto ignore
53 \ ]
54 "\ and some more
55 call assert_equal([5, 6], array)
56endfunc
Bram Moolenaar88b53fd2018-12-05 18:43:28 +010057
58func Test_E963()
59 " These commands used to cause an internal error prior to vim 8.1.0563
60 let v_e = v:errors
61 let v_o = v:oldfiles
62 call assert_fails("let v:errors=''", 'E963:')
63 call assert_equal(v_e, v:errors)
64 call assert_fails("let v:oldfiles=''", 'E963:')
65 call assert_equal(v_o, v:oldfiles)
66endfunc
Bram Moolenaarc0f5a782019-01-13 15:16:13 +010067
68func Test_for_invalid()
Sean Dewar80d73952021-08-04 19:25:54 +020069 call assert_fails("for x in 99", 'E1098:')
70 call assert_fails("for x in function('winnr')", 'E1098:')
71 call assert_fails("for x in {'a': 9}", 'E1098:')
Bram Moolenaardf2c2982021-01-28 20:18:08 +010072
73 if 0
74 /1/5/2/s/\n
75 endif
76 redraw
Bram Moolenaarc0f5a782019-01-13 15:16:13 +010077endfunc
Bram Moolenaar05500ec2019-01-13 19:10:33 +010078
Bram Moolenaarf6d39c32022-08-16 17:50:38 +010079func Test_for_over_null_string()
80 let save_enc = &enc
81 set enc=iso8859
82 let cnt = 0
83 for c in test_null_string()
84 let cnt += 1
85 endfor
86 call assert_equal(0, cnt)
87
88 let &enc = save_enc
89endfunc
90
Bram Moolenaar35d21c62022-09-02 16:47:16 +010091func Test_for_invalid_line_count()
92 let lines =<< trim END
93 111111111111111111111111 for line in ['one']
94 endfor
95 END
96 call writefile(lines, 'XinvalidFor')
97 " only test that this doesn't crash
98 call RunVim([], [], '-u NONE -e -s -S XinvalidFor -c qa')
99
100 call delete('XinvalidFor')
101endfunc
102
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100103func Test_readfile_binary()
104 new
105 call setline(1, ['one', 'two', 'three'])
106 setlocal ff=dos
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200107 silent write XReadfile_bin
108 let lines = 'XReadfile_bin'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100109 call assert_equal(['one', 'two', 'three'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200110 let lines = readfile('XReadfile_bin', '', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100111 call assert_equal(['one', 'two'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200112 let lines = readfile('XReadfile_bin', 'b')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100113 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200114 let lines = readfile('XReadfile_bin', 'b', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100115 call assert_equal(["one\r", "two\r"], lines)
116
117 bwipe!
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200118 call delete('XReadfile_bin')
119endfunc
120
Dominique Pellef5d639a2022-01-12 15:24:40 +0000121func Test_readfile_binary_empty()
122 call writefile([], 'Xempty-file')
123 " This used to compare uninitialized memory in Vim <= 8.2.4065
124 call assert_equal([''], readfile('Xempty-file', 'b'))
125 call delete('Xempty-file')
126endfunc
127
Bram Moolenaar1b04ce22020-08-21 22:46:11 +0200128func Test_readfile_bom()
129 call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom')
130 call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom'))
131 call delete('XReadfile_bom')
132endfunc
133
134func Test_readfile_max()
135 call writefile(range(1, 4), 'XReadfile_max')
136 call assert_equal(['1', '2'], readfile('XReadfile_max', '', 2))
137 call assert_equal(['3', '4'], readfile('XReadfile_max', '', -2))
138 call delete('XReadfile_max')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100139endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +0100140
141func Test_let_errmsg()
142 call assert_fails('let v:errmsg = []', 'E730:')
143 let v:errmsg = ''
144 call assert_fails('let v:errmsg = []', 'E730:')
145 let v:errmsg = ''
146endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200147
148func Test_string_concatenation()
149 call assert_equal('ab', 'a'.'b')
150 call assert_equal('ab', 'a' .'b')
151 call assert_equal('ab', 'a'. 'b')
152 call assert_equal('ab', 'a' . 'b')
153
154 call assert_equal('ab', 'a'..'b')
155 call assert_equal('ab', 'a' ..'b')
156 call assert_equal('ab', 'a'.. 'b')
157 call assert_equal('ab', 'a' .. 'b')
158
159 let a = 'a'
160 let b = 'b'
161 let a .= b
162 call assert_equal('ab', a)
163
164 let a = 'a'
165 let a.=b
166 call assert_equal('ab', a)
167
168 let a = 'a'
169 let a ..= b
170 call assert_equal('ab', a)
171
172 let a = 'a'
173 let a..=b
174 call assert_equal('ab', a)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200175
176 if has('float')
177 let a = 'A'
178 let b = 1.234
Bram Moolenaar3cfa5b12021-06-06 14:14:39 +0200179 call assert_equal('A1.234', a .. b)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200180 endif
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200181endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200182
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200183" Test fix for issue #4507
184func Test_skip_after_throw()
185 try
186 throw 'something'
187 let x = wincol() || &ts
188 catch /something/
189 endtry
190endfunc
191
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200192scriptversion 2
193func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200194 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200195 let a = 'a'
196 let b = 'b'
197
198 call assert_fails('echo a . b', 'E15:')
199 call assert_fails('let a .= b', 'E985:')
Bram Moolenaarfae55a92021-06-17 22:08:30 +0200200 call assert_fails('let vers = 1.2.3', 'E488:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200201
202 if has('float')
203 let f = .5
204 call assert_equal(0.5, f)
205 endif
206endfunc
207
208scriptversion 1
209func Test_string_concat_scriptversion1()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200210 call assert_true(has('vimscript-1'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200211 let a = 'a'
212 let b = 'b'
213
214 echo a . b
215 let a .= b
216 let vers = 1.2.3
217 call assert_equal('123', vers)
218
219 if has('float')
220 call assert_fails('let f = .5', 'E15:')
221 endif
222endfunc
223
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200224scriptversion 3
225func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200226 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200227 call assert_fails('echo version', 'E121:')
228 call assert_false(exists('version'))
229 let version = 1
230 call assert_equal(1, version)
231endfunc
232
233scriptversion 2
234func Test_vvar_scriptversion2()
235 call assert_true(exists('version'))
236 echo version
237 call assert_fails('let version = 1', 'E46:')
238 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200239
240 call assert_equal(v:version, v:versionlong / 10000)
241 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200242endfunc
243
Bram Moolenaar61343f02019-07-20 21:11:13 +0200244func Test_dict_access_scriptversion2()
245 let l:x = {'foo': 1}
246
247 call assert_false(0 && l:x.foo)
248 call assert_true(1 && l:x.foo)
249endfunc
250
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200251scriptversion 4
252func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200253 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200254 call assert_equal(17, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200255 call assert_equal(15, 0o17)
256 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200257 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100258 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200259 call assert_equal(64, 0b1'00'00'00)
260 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200261 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200262 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200263 call assert_equal("1234", execute("echo 1'234")->trim())
264 call assert_equal('1 234', execute("echo 1''234")->trim())
265 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200266endfunc
267
268scriptversion 1
269func Test_vvar_scriptversion1()
270 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200271 call assert_equal(15, 0o17)
272 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200273 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100274 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200275endfunc
276
277func Test_scriptversion_fail()
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200278 call writefile(['scriptversion 9'], 'Xversionscript')
279 call assert_fails('source Xversionscript', 'E999:')
280 call delete('Xversionscript')
281endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100282
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200283func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100284 call assert_fails('execute test_null_list()', 'E730:')
285 call assert_fails('execute test_null_dict()', 'E731:')
286 call assert_fails('execute test_null_blob()', 'E976:')
287 execute test_null_string()
288 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200289 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100290 if has('job')
291 call assert_fails('execute test_null_job()', 'E908:')
292 call assert_fails('execute test_null_channel()', 'E908:')
293 endif
294endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100295
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100296func Test_number_max_min_size()
297 " This will fail on systems without 64 bit number support or when not
298 " configured correctly.
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100299 call assert_equal(64, v:numbersize)
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100300
301 call assert_true(v:numbermin < -9999999)
302 call assert_true(v:numbermax > 9999999)
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100303endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100304
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200305func Assert_reg(name, type, value, valuestr, expr, exprstr)
306 call assert_equal(a:type, getregtype(a:name))
307 call assert_equal(a:value, getreg(a:name))
308 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
309 call assert_equal(a:expr, getreg(a:name, 1))
310 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
311endfunc
312
313func Test_let_register()
314 let @" = 'abc'
315 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
316 let @" = "abc\n"
317 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
318 let @" = "abc\<C-m>"
319 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
320 let @= = '"abc"'
321 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
322endfunc
323
324func Assert_regput(name, result)
325 new
326 execute "silent normal! o==\n==\e\"" . a:name . "P"
327 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200328 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200329endfunc
330
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200331func Test_setreg_basic()
332 call setreg('a', 'abcA', 'c')
333 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
334 call Assert_regput('a', ['==', '=abcA='])
335
336 call setreg('A', 'abcAc', 'c')
337 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
338 call Assert_regput('a', ['==', '=abcAabcAc='])
339
340 call setreg('A', 'abcAl', 'l')
341 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
342 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
343
344 call setreg('A', 'abcAc2','c')
345 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
346 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
347
348 call setreg('b', 'abcB', 'v')
349 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
350 call Assert_regput('b', ['==', '=abcB='])
351
352 call setreg('b', 'abcBc', 'ca')
353 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
354 call Assert_regput('b', ['==', '=abcBabcBc='])
355
356 call setreg('b', 'abcBb', 'ba')
357 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
358 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
359
360 call setreg('b', 'abcBc2','ca')
361 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
362 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
363
364 call setreg('b', 'abcBb2','b50a')
365 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
366 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
367
368 call setreg('c', 'abcC', 'l')
369 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
370 call Assert_regput('c', ['==', 'abcC', '=='])
371
372 call setreg('C', 'abcCl', 'l')
373 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
374 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
375
376 call setreg('C', 'abcCc', 'c')
377 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
378 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
379
380 call setreg('d', 'abcD', 'V')
381 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
382 call Assert_regput('d', ['==', 'abcD', '=='])
383
384 call setreg('D', 'abcDb', 'b')
385 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
386 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
387
388 call setreg('e', 'abcE', 'b')
389 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
390 call Assert_regput('e', ['==', '=abcE='])
391
392 call setreg('E', 'abcEb', 'b')
393 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
394 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
395
396 call setreg('E', 'abcEl', 'l')
397 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
398 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
399
400 call setreg('f', 'abcF', "\<C-v>")
401 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
402 call Assert_regput('f', ['==', '=abcF='])
403
404 call setreg('F', 'abcFc', 'c')
405 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
406 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
407
408 call setreg('g', 'abcG', 'b10')
409 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
410 call Assert_regput('g', ['==', '=abcG ='])
411
412 call setreg('h', 'abcH', "\<C-v>10")
413 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
414 call Assert_regput('h', ['==', '=abcH ='])
415
416 call setreg('I', 'abcI')
417 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
418 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200419
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200420 " Appending NL with setreg()
421 call setreg('a', 'abcA2', 'c')
422 call setreg('b', 'abcB2', 'v')
423 call setreg('c', 'abcC2', 'l')
424 call setreg('d', 'abcD2', 'V')
425 call setreg('e', 'abcE2', 'b')
426 call setreg('f', 'abcF2', "\<C-v>")
427 call setreg('g', 'abcG2', 'b10')
428 call setreg('h', 'abcH2', "\<C-v>10")
429 call setreg('I', 'abcI2')
430
431 call setreg('A', "\n")
432 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
433 call Assert_regput('A', ['==', 'abcA2', '=='])
434
435 call setreg('B', "\n", 'c')
436 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
437 call Assert_regput('B', ['==', '=abcB2', '='])
438
439 call setreg('C', "\n")
440 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
441 call Assert_regput('C', ['==', 'abcC2', '', '=='])
442
443 call setreg('D', "\n", 'l')
444 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
445 call Assert_regput('D', ['==', 'abcD2', '', '=='])
446
447 call setreg('E', "\n")
448 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
449 call Assert_regput('E', ['==', 'abcE2', '', '=='])
450
451 call setreg('F', "\n", 'b')
452 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
453 call Assert_regput('F', ['==', '=abcF2=', ' '])
454
455 " Setting lists with setreg()
456 call setreg('a', ['abcA3'], 'c')
457 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
458 call Assert_regput('a', ['==', '=abcA3='])
459
460 call setreg('b', ['abcB3'], 'l')
461 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
462 call Assert_regput('b', ['==', 'abcB3', '=='])
463
464 call setreg('c', ['abcC3'], 'b')
465 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
466 call Assert_regput('c', ['==', '=abcC3='])
467
468 call setreg('d', ['abcD3'])
469 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
470 call Assert_regput('d', ['==', 'abcD3', '=='])
471
472 call setreg('e', [1, 2, 'abc', 3])
473 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
474 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
475
476 call setreg('f', [1, 2, 3])
477 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
478 call Assert_regput('f', ['==', '1', '2', '3', '=='])
479
480 " Appending lists with setreg()
481 call setreg('A', ['abcA3c'], 'c')
482 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
483 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
484
485 call setreg('b', ['abcB3l'], 'la')
486 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
487 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
488
489 call setreg('C', ['abcC3b'], 'lb')
490 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
491 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
492
493 call setreg('D', ['abcD32'])
494 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
495 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
496
497 call setreg('A', ['abcA32'])
498 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
499 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
500
501 call setreg('B', ['abcB3c'], 'c')
502 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
503 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
504
505 call setreg('C', ['abcC3l'], 'l')
506 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
507 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
508
509 call setreg('D', ['abcD3b'], 'b')
510 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
511 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
512
513 " Appending lists with NL with setreg()
514 call setreg('A', ["\n", 'abcA3l2'], 'l')
515 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']")
516 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
517
518 call setreg('B', ["\n", 'abcB3c2'], 'c')
519 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']")
520 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
521
522 call setreg('C', ["\n", 'abcC3b2'], 'b')
523 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']")
524 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
525
526 call setreg('D', ["\n", 'abcD3b50'],'b50')
527 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']")
528 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
529
530 " Setting lists with NLs with setreg()
531 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
532 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']")
533 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
534
535 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
536 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']")
537 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
538
539 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
540 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']")
541 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
542
543 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
544 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']")
545 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
546
547 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
548 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']")
549 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
550
551 " Search and expressions
552 call setreg('/', ['abc/'])
553 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
554 call Assert_regput('/', ['==', '=abc/='])
555
556 call setreg('/', ["abc/\n"])
557 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
558 call Assert_regput('/', ['==', "=abc/\n="])
559
560 call setreg('=', ['"abc/"'])
561 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
562
563 call setreg('=', ["\"abc/\n\""])
564 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
565
566 " System clipboard
567 if has('clipboard')
568 new | only!
569 call setline(1, ['clipboard contents', 'something else'])
570 " Save and restore system clipboard.
571 " If no connection to X-Server is possible, test should succeed.
572 let _clipreg = ['*', getreg('*'), getregtype('*')]
573 let _clipopt = &cb
574 let &cb='unnamed'
575 1y
576 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
577 tabdo :windo :echo "hi"
578 2y
579 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
580 let &cb=_clipopt
581 call call('setreg', _clipreg)
582 enew!
583 endif
584
Bram Moolenaar08f41572020-04-20 16:50:00 +0200585 " Error cases
586 call assert_fails('call setreg()', 'E119:')
587 call assert_fails('call setreg(1)', 'E119:')
588 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
589 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200590 call assert_fails('call setreg(1, 2, [])', 'E730:')
591 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
592 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
593 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
594endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200595
Bram Moolenaarae95a392020-08-06 16:38:12 +0200596func Test_curly_assignment()
597 let s:svar = 'svar'
598 let g:gvar = 'gvar'
599 let lname = 'gvar'
600 let gname = 'gvar'
601 let {'s:'.lname} = {'g:'.gname}
602 call assert_equal('gvar', s:gvar)
603 let s:gvar = ''
604 let { 's:'.lname } = { 'g:'.gname }
605 call assert_equal('gvar', s:gvar)
606 let s:gvar = ''
607 let { 's:' . lname } = { 'g:' . gname }
608 call assert_equal('gvar', s:gvar)
609 let s:gvar = ''
610 let { 's:' .. lname } = { 'g:' .. gname }
611 call assert_equal('gvar', s:gvar)
612
613 unlet s:svar
614 unlet s:gvar
615 unlet g:gvar
616endfunc
617
Bram Moolenaarfe6fb262022-01-24 18:16:12 +0000618func Test_deep_recursion()
619 " this was running out of stack
620 call assert_fails("exe 'if ' .. repeat('(', 1002)", 'E1169: Expression too recursive: ((')
621endfunc
622
zeertzjqdb088872022-05-02 22:53:45 +0100623" K_SPECIAL in the modified character used be escaped, which causes
624" double-escaping with feedkeys() or as the return value of an <expr> mapping,
625" and doesn't match what getchar() returns,
626func Test_modified_char_no_escape_special()
627 nnoremap <M-…> <Cmd>let g:got_m_ellipsis += 1<CR>
628 call feedkeys("\<M-…>", 't')
629 call assert_equal("\<M-…>", getchar())
630 let g:got_m_ellipsis = 0
631 call feedkeys("\<M-…>", 'xt')
632 call assert_equal(1, g:got_m_ellipsis)
633 func Func()
634 return "\<M-…>"
635 endfunc
636 nmap <expr> <F2> Func()
637 call feedkeys("\<F2>", 'xt')
638 call assert_equal(2, g:got_m_ellipsis)
639 delfunc Func
640 nunmap <F2>
641 unlet g:got_m_ellipsis
642 nunmap <M-…>
643endfunc
644
Bram Moolenaar1e56bda2022-07-29 15:28:27 +0100645func Test_eval_string_in_special_key()
646 " this was using the '{' inside <> as the start of an interpolated string
647 silent! echo 0{1-$"\<S--{>n|nö%�
648endfunc
649
Bram Moolenaar8b633132020-03-20 18:20:51 +0100650" vim: shiftwidth=2 sts=2 expandtab