blob: e5f521c85c7c2d6b349e5dc8e6d86da71a7f3721 [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()
68 call assert_fails("for x in 99", 'E714:')
69 call assert_fails("for x in 'asdf'", 'E714:')
70 call assert_fails("for x in {'a': 9}", 'E714:')
71endfunc
Bram Moolenaar05500ec2019-01-13 19:10:33 +010072
73func Test_readfile_binary()
74 new
75 call setline(1, ['one', 'two', 'three'])
76 setlocal ff=dos
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020077 silent write XReadfile_bin
78 let lines = 'XReadfile_bin'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +010079 call assert_equal(['one', 'two', 'three'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020080 let lines = readfile('XReadfile_bin', '', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +010081 call assert_equal(['one', 'two'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020082 let lines = readfile('XReadfile_bin', 'b')
Bram Moolenaar05500ec2019-01-13 19:10:33 +010083 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020084 let lines = readfile('XReadfile_bin', 'b', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +010085 call assert_equal(["one\r", "two\r"], lines)
86
87 bwipe!
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020088 call delete('XReadfile_bin')
89endfunc
90
91func Test_readfile_bom()
92 call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom')
93 call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom'))
94 call delete('XReadfile_bom')
95endfunc
96
97func Test_readfile_max()
98 call writefile(range(1, 4), 'XReadfile_max')
99 call assert_equal(['1', '2'], readfile('XReadfile_max', '', 2))
100 call assert_equal(['3', '4'], readfile('XReadfile_max', '', -2))
101 call delete('XReadfile_max')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100102endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +0100103
104func Test_let_errmsg()
105 call assert_fails('let v:errmsg = []', 'E730:')
106 let v:errmsg = ''
107 call assert_fails('let v:errmsg = []', 'E730:')
108 let v:errmsg = ''
109endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200110
111func Test_string_concatenation()
112 call assert_equal('ab', 'a'.'b')
113 call assert_equal('ab', 'a' .'b')
114 call assert_equal('ab', 'a'. 'b')
115 call assert_equal('ab', 'a' . 'b')
116
117 call assert_equal('ab', 'a'..'b')
118 call assert_equal('ab', 'a' ..'b')
119 call assert_equal('ab', 'a'.. 'b')
120 call assert_equal('ab', 'a' .. 'b')
121
122 let a = 'a'
123 let b = 'b'
124 let a .= b
125 call assert_equal('ab', a)
126
127 let a = 'a'
128 let a.=b
129 call assert_equal('ab', a)
130
131 let a = 'a'
132 let a ..= b
133 call assert_equal('ab', a)
134
135 let a = 'a'
136 let a..=b
137 call assert_equal('ab', a)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200138
139 if has('float')
140 let a = 'A'
141 let b = 1.234
142 call assert_fails('echo a .. b', 'E806:')
143 endif
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200144endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200145
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200146" Test fix for issue #4507
147func Test_skip_after_throw()
148 try
149 throw 'something'
150 let x = wincol() || &ts
151 catch /something/
152 endtry
153endfunc
154
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200155scriptversion 2
156func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200157 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200158 let a = 'a'
159 let b = 'b'
160
161 call assert_fails('echo a . b', 'E15:')
162 call assert_fails('let a .= b', 'E985:')
163 call assert_fails('let vers = 1.2.3', 'E15:')
164
165 if has('float')
166 let f = .5
167 call assert_equal(0.5, f)
168 endif
169endfunc
170
171scriptversion 1
172func Test_string_concat_scriptversion1()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200173 call assert_true(has('vimscript-1'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200174 let a = 'a'
175 let b = 'b'
176
177 echo a . b
178 let a .= b
179 let vers = 1.2.3
180 call assert_equal('123', vers)
181
182 if has('float')
183 call assert_fails('let f = .5', 'E15:')
184 endif
185endfunc
186
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200187scriptversion 3
188func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200189 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200190 call assert_fails('echo version', 'E121:')
191 call assert_false(exists('version'))
192 let version = 1
193 call assert_equal(1, version)
194endfunc
195
196scriptversion 2
197func Test_vvar_scriptversion2()
198 call assert_true(exists('version'))
199 echo version
200 call assert_fails('let version = 1', 'E46:')
201 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200202
203 call assert_equal(v:version, v:versionlong / 10000)
204 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200205endfunc
206
Bram Moolenaar61343f02019-07-20 21:11:13 +0200207func Test_dict_access_scriptversion2()
208 let l:x = {'foo': 1}
209
210 call assert_false(0 && l:x.foo)
211 call assert_true(1 && l:x.foo)
212endfunc
213
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200214scriptversion 4
215func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200216 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200217 call assert_equal(17, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200218 call assert_equal(15, 0o17)
219 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200220 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100221 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200222 call assert_equal(64, 0b1'00'00'00)
223 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200224 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200225 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200226 call assert_equal("1234", execute("echo 1'234")->trim())
227 call assert_equal('1 234', execute("echo 1''234")->trim())
228 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200229endfunc
230
231scriptversion 1
232func Test_vvar_scriptversion1()
233 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200234 call assert_equal(15, 0o17)
235 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200236 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100237 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200238endfunc
239
240func Test_scriptversion_fail()
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200241 call writefile(['scriptversion 9'], 'Xversionscript')
242 call assert_fails('source Xversionscript', 'E999:')
243 call delete('Xversionscript')
244endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100245
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200246func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100247 call assert_fails('execute test_null_list()', 'E730:')
248 call assert_fails('execute test_null_dict()', 'E731:')
249 call assert_fails('execute test_null_blob()', 'E976:')
250 execute test_null_string()
251 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200252 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100253 if has('job')
254 call assert_fails('execute test_null_job()', 'E908:')
255 call assert_fails('execute test_null_channel()', 'E908:')
256 endif
257endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100258
259func Test_numbersize()
260 " This will fail on systems without 64 bit int support or when not configured
261 " correctly.
262 call assert_equal(64, v:numbersize)
263endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100264
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200265func Assert_reg(name, type, value, valuestr, expr, exprstr)
266 call assert_equal(a:type, getregtype(a:name))
267 call assert_equal(a:value, getreg(a:name))
268 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
269 call assert_equal(a:expr, getreg(a:name, 1))
270 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
271endfunc
272
273func Test_let_register()
274 let @" = 'abc'
275 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
276 let @" = "abc\n"
277 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
278 let @" = "abc\<C-m>"
279 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
280 let @= = '"abc"'
281 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
282endfunc
283
284func Assert_regput(name, result)
285 new
286 execute "silent normal! o==\n==\e\"" . a:name . "P"
287 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200288 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200289endfunc
290
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200291func Test_setreg_basic()
292 call setreg('a', 'abcA', 'c')
293 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
294 call Assert_regput('a', ['==', '=abcA='])
295
296 call setreg('A', 'abcAc', 'c')
297 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
298 call Assert_regput('a', ['==', '=abcAabcAc='])
299
300 call setreg('A', 'abcAl', 'l')
301 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
302 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
303
304 call setreg('A', 'abcAc2','c')
305 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
306 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
307
308 call setreg('b', 'abcB', 'v')
309 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
310 call Assert_regput('b', ['==', '=abcB='])
311
312 call setreg('b', 'abcBc', 'ca')
313 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
314 call Assert_regput('b', ['==', '=abcBabcBc='])
315
316 call setreg('b', 'abcBb', 'ba')
317 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
318 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
319
320 call setreg('b', 'abcBc2','ca')
321 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
322 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
323
324 call setreg('b', 'abcBb2','b50a')
325 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
326 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
327
328 call setreg('c', 'abcC', 'l')
329 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
330 call Assert_regput('c', ['==', 'abcC', '=='])
331
332 call setreg('C', 'abcCl', 'l')
333 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
334 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
335
336 call setreg('C', 'abcCc', 'c')
337 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
338 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
339
340 call setreg('d', 'abcD', 'V')
341 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
342 call Assert_regput('d', ['==', 'abcD', '=='])
343
344 call setreg('D', 'abcDb', 'b')
345 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
346 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
347
348 call setreg('e', 'abcE', 'b')
349 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
350 call Assert_regput('e', ['==', '=abcE='])
351
352 call setreg('E', 'abcEb', 'b')
353 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
354 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
355
356 call setreg('E', 'abcEl', 'l')
357 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
358 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
359
360 call setreg('f', 'abcF', "\<C-v>")
361 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
362 call Assert_regput('f', ['==', '=abcF='])
363
364 call setreg('F', 'abcFc', 'c')
365 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
366 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
367
368 call setreg('g', 'abcG', 'b10')
369 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
370 call Assert_regput('g', ['==', '=abcG ='])
371
372 call setreg('h', 'abcH', "\<C-v>10")
373 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
374 call Assert_regput('h', ['==', '=abcH ='])
375
376 call setreg('I', 'abcI')
377 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
378 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200379
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200380 " Appending NL with setreg()
381 call setreg('a', 'abcA2', 'c')
382 call setreg('b', 'abcB2', 'v')
383 call setreg('c', 'abcC2', 'l')
384 call setreg('d', 'abcD2', 'V')
385 call setreg('e', 'abcE2', 'b')
386 call setreg('f', 'abcF2', "\<C-v>")
387 call setreg('g', 'abcG2', 'b10')
388 call setreg('h', 'abcH2', "\<C-v>10")
389 call setreg('I', 'abcI2')
390
391 call setreg('A', "\n")
392 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
393 call Assert_regput('A', ['==', 'abcA2', '=='])
394
395 call setreg('B', "\n", 'c')
396 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
397 call Assert_regput('B', ['==', '=abcB2', '='])
398
399 call setreg('C', "\n")
400 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
401 call Assert_regput('C', ['==', 'abcC2', '', '=='])
402
403 call setreg('D', "\n", 'l')
404 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
405 call Assert_regput('D', ['==', 'abcD2', '', '=='])
406
407 call setreg('E', "\n")
408 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
409 call Assert_regput('E', ['==', 'abcE2', '', '=='])
410
411 call setreg('F', "\n", 'b')
412 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
413 call Assert_regput('F', ['==', '=abcF2=', ' '])
414
415 " Setting lists with setreg()
416 call setreg('a', ['abcA3'], 'c')
417 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
418 call Assert_regput('a', ['==', '=abcA3='])
419
420 call setreg('b', ['abcB3'], 'l')
421 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
422 call Assert_regput('b', ['==', 'abcB3', '=='])
423
424 call setreg('c', ['abcC3'], 'b')
425 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
426 call Assert_regput('c', ['==', '=abcC3='])
427
428 call setreg('d', ['abcD3'])
429 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
430 call Assert_regput('d', ['==', 'abcD3', '=='])
431
432 call setreg('e', [1, 2, 'abc', 3])
433 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
434 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
435
436 call setreg('f', [1, 2, 3])
437 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
438 call Assert_regput('f', ['==', '1', '2', '3', '=='])
439
440 " Appending lists with setreg()
441 call setreg('A', ['abcA3c'], 'c')
442 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
443 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
444
445 call setreg('b', ['abcB3l'], 'la')
446 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
447 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
448
449 call setreg('C', ['abcC3b'], 'lb')
450 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
451 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
452
453 call setreg('D', ['abcD32'])
454 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
455 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
456
457 call setreg('A', ['abcA32'])
458 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
459 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
460
461 call setreg('B', ['abcB3c'], 'c')
462 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
463 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
464
465 call setreg('C', ['abcC3l'], 'l')
466 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
467 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
468
469 call setreg('D', ['abcD3b'], 'b')
470 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
471 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
472
473 " Appending lists with NL with setreg()
474 call setreg('A', ["\n", 'abcA3l2'], 'l')
475 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']")
476 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
477
478 call setreg('B', ["\n", 'abcB3c2'], 'c')
479 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']")
480 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
481
482 call setreg('C', ["\n", 'abcC3b2'], 'b')
483 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']")
484 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
485
486 call setreg('D', ["\n", 'abcD3b50'],'b50')
487 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']")
488 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
489
490 " Setting lists with NLs with setreg()
491 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
492 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']")
493 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
494
495 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
496 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']")
497 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
498
499 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
500 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']")
501 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
502
503 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
504 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']")
505 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
506
507 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
508 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']")
509 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
510
511 " Search and expressions
512 call setreg('/', ['abc/'])
513 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
514 call Assert_regput('/', ['==', '=abc/='])
515
516 call setreg('/', ["abc/\n"])
517 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
518 call Assert_regput('/', ['==', "=abc/\n="])
519
520 call setreg('=', ['"abc/"'])
521 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
522
523 call setreg('=', ["\"abc/\n\""])
524 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
525
526 " System clipboard
527 if has('clipboard')
528 new | only!
529 call setline(1, ['clipboard contents', 'something else'])
530 " Save and restore system clipboard.
531 " If no connection to X-Server is possible, test should succeed.
532 let _clipreg = ['*', getreg('*'), getregtype('*')]
533 let _clipopt = &cb
534 let &cb='unnamed'
535 1y
536 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
537 tabdo :windo :echo "hi"
538 2y
539 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
540 let &cb=_clipopt
541 call call('setreg', _clipreg)
542 enew!
543 endif
544
Bram Moolenaar08f41572020-04-20 16:50:00 +0200545 " Error cases
546 call assert_fails('call setreg()', 'E119:')
547 call assert_fails('call setreg(1)', 'E119:')
548 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
549 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200550 call assert_fails('call setreg(1, 2, [])', 'E730:')
551 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
552 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
553 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
554endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200555
Bram Moolenaarae95a392020-08-06 16:38:12 +0200556func Test_curly_assignment()
557 let s:svar = 'svar'
558 let g:gvar = 'gvar'
559 let lname = 'gvar'
560 let gname = 'gvar'
561 let {'s:'.lname} = {'g:'.gname}
562 call assert_equal('gvar', s:gvar)
563 let s:gvar = ''
564 let { 's:'.lname } = { 'g:'.gname }
565 call assert_equal('gvar', s:gvar)
566 let s:gvar = ''
567 let { 's:' . lname } = { 'g:' . gname }
568 call assert_equal('gvar', s:gvar)
569 let s:gvar = ''
570 let { 's:' .. lname } = { 'g:' .. gname }
571 call assert_equal('gvar', s:gvar)
572
573 unlet s:svar
574 unlet s:gvar
575 unlet g:gvar
576endfunc
577
Bram Moolenaar8b633132020-03-20 18:20:51 +0100578" vim: shiftwidth=2 sts=2 expandtab