blob: 316fb42f22a44e0990e9947b7b672457e7adc9fe [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)
221 call assert_equal(64, 0b1'00'00'00)
222 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200223 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200224 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200225 call assert_equal("1234", execute("echo 1'234")->trim())
226 call assert_equal('1 234', execute("echo 1''234")->trim())
227 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200228endfunc
229
230scriptversion 1
231func Test_vvar_scriptversion1()
232 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200233 call assert_equal(15, 0o17)
234 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200235 call assert_equal(18, 018)
236endfunc
237
238func Test_scriptversion_fail()
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200239 call writefile(['scriptversion 9'], 'Xversionscript')
240 call assert_fails('source Xversionscript', 'E999:')
241 call delete('Xversionscript')
242endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100243
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200244func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100245 call assert_fails('execute test_null_list()', 'E730:')
246 call assert_fails('execute test_null_dict()', 'E731:')
247 call assert_fails('execute test_null_blob()', 'E976:')
248 execute test_null_string()
249 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200250 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100251 if has('job')
252 call assert_fails('execute test_null_job()', 'E908:')
253 call assert_fails('execute test_null_channel()', 'E908:')
254 endif
255endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100256
257func Test_numbersize()
258 " This will fail on systems without 64 bit int support or when not configured
259 " correctly.
260 call assert_equal(64, v:numbersize)
261endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100262
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200263func Assert_reg(name, type, value, valuestr, expr, exprstr)
264 call assert_equal(a:type, getregtype(a:name))
265 call assert_equal(a:value, getreg(a:name))
266 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
267 call assert_equal(a:expr, getreg(a:name, 1))
268 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
269endfunc
270
271func Test_let_register()
272 let @" = 'abc'
273 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
274 let @" = "abc\n"
275 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
276 let @" = "abc\<C-m>"
277 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
278 let @= = '"abc"'
279 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
280endfunc
281
282func Assert_regput(name, result)
283 new
284 execute "silent normal! o==\n==\e\"" . a:name . "P"
285 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200286 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200287endfunc
288
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200289func Test_setreg_basic()
290 call setreg('a', 'abcA', 'c')
291 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
292 call Assert_regput('a', ['==', '=abcA='])
293
294 call setreg('A', 'abcAc', 'c')
295 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
296 call Assert_regput('a', ['==', '=abcAabcAc='])
297
298 call setreg('A', 'abcAl', 'l')
299 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
300 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
301
302 call setreg('A', 'abcAc2','c')
303 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
304 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
305
306 call setreg('b', 'abcB', 'v')
307 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
308 call Assert_regput('b', ['==', '=abcB='])
309
310 call setreg('b', 'abcBc', 'ca')
311 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
312 call Assert_regput('b', ['==', '=abcBabcBc='])
313
314 call setreg('b', 'abcBb', 'ba')
315 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
316 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
317
318 call setreg('b', 'abcBc2','ca')
319 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
320 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
321
322 call setreg('b', 'abcBb2','b50a')
323 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
324 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
325
326 call setreg('c', 'abcC', 'l')
327 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
328 call Assert_regput('c', ['==', 'abcC', '=='])
329
330 call setreg('C', 'abcCl', 'l')
331 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
332 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
333
334 call setreg('C', 'abcCc', 'c')
335 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
336 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
337
338 call setreg('d', 'abcD', 'V')
339 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
340 call Assert_regput('d', ['==', 'abcD', '=='])
341
342 call setreg('D', 'abcDb', 'b')
343 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
344 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
345
346 call setreg('e', 'abcE', 'b')
347 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
348 call Assert_regput('e', ['==', '=abcE='])
349
350 call setreg('E', 'abcEb', 'b')
351 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
352 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
353
354 call setreg('E', 'abcEl', 'l')
355 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
356 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
357
358 call setreg('f', 'abcF', "\<C-v>")
359 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
360 call Assert_regput('f', ['==', '=abcF='])
361
362 call setreg('F', 'abcFc', 'c')
363 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
364 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
365
366 call setreg('g', 'abcG', 'b10')
367 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
368 call Assert_regput('g', ['==', '=abcG ='])
369
370 call setreg('h', 'abcH', "\<C-v>10")
371 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
372 call Assert_regput('h', ['==', '=abcH ='])
373
374 call setreg('I', 'abcI')
375 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
376 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200377
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200378 " Appending NL with setreg()
379 call setreg('a', 'abcA2', 'c')
380 call setreg('b', 'abcB2', 'v')
381 call setreg('c', 'abcC2', 'l')
382 call setreg('d', 'abcD2', 'V')
383 call setreg('e', 'abcE2', 'b')
384 call setreg('f', 'abcF2', "\<C-v>")
385 call setreg('g', 'abcG2', 'b10')
386 call setreg('h', 'abcH2', "\<C-v>10")
387 call setreg('I', 'abcI2')
388
389 call setreg('A', "\n")
390 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
391 call Assert_regput('A', ['==', 'abcA2', '=='])
392
393 call setreg('B', "\n", 'c')
394 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
395 call Assert_regput('B', ['==', '=abcB2', '='])
396
397 call setreg('C', "\n")
398 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
399 call Assert_regput('C', ['==', 'abcC2', '', '=='])
400
401 call setreg('D', "\n", 'l')
402 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
403 call Assert_regput('D', ['==', 'abcD2', '', '=='])
404
405 call setreg('E', "\n")
406 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
407 call Assert_regput('E', ['==', 'abcE2', '', '=='])
408
409 call setreg('F', "\n", 'b')
410 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
411 call Assert_regput('F', ['==', '=abcF2=', ' '])
412
413 " Setting lists with setreg()
414 call setreg('a', ['abcA3'], 'c')
415 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
416 call Assert_regput('a', ['==', '=abcA3='])
417
418 call setreg('b', ['abcB3'], 'l')
419 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
420 call Assert_regput('b', ['==', 'abcB3', '=='])
421
422 call setreg('c', ['abcC3'], 'b')
423 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
424 call Assert_regput('c', ['==', '=abcC3='])
425
426 call setreg('d', ['abcD3'])
427 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
428 call Assert_regput('d', ['==', 'abcD3', '=='])
429
430 call setreg('e', [1, 2, 'abc', 3])
431 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
432 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
433
434 call setreg('f', [1, 2, 3])
435 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
436 call Assert_regput('f', ['==', '1', '2', '3', '=='])
437
438 " Appending lists with setreg()
439 call setreg('A', ['abcA3c'], 'c')
440 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
441 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
442
443 call setreg('b', ['abcB3l'], 'la')
444 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
445 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
446
447 call setreg('C', ['abcC3b'], 'lb')
448 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
449 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
450
451 call setreg('D', ['abcD32'])
452 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
453 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
454
455 call setreg('A', ['abcA32'])
456 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
457 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
458
459 call setreg('B', ['abcB3c'], 'c')
460 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
461 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
462
463 call setreg('C', ['abcC3l'], 'l')
464 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
465 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
466
467 call setreg('D', ['abcD3b'], 'b')
468 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
469 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
470
471 " Appending lists with NL with setreg()
472 call setreg('A', ["\n", 'abcA3l2'], 'l')
473 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']")
474 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
475
476 call setreg('B', ["\n", 'abcB3c2'], 'c')
477 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']")
478 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
479
480 call setreg('C', ["\n", 'abcC3b2'], 'b')
481 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']")
482 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
483
484 call setreg('D', ["\n", 'abcD3b50'],'b50')
485 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']")
486 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
487
488 " Setting lists with NLs with setreg()
489 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
490 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']")
491 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
492
493 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
494 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']")
495 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
496
497 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
498 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']")
499 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
500
501 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
502 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']")
503 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
504
505 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
506 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']")
507 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
508
509 " Search and expressions
510 call setreg('/', ['abc/'])
511 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
512 call Assert_regput('/', ['==', '=abc/='])
513
514 call setreg('/', ["abc/\n"])
515 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
516 call Assert_regput('/', ['==', "=abc/\n="])
517
518 call setreg('=', ['"abc/"'])
519 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
520
521 call setreg('=', ["\"abc/\n\""])
522 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
523
524 " System clipboard
525 if has('clipboard')
526 new | only!
527 call setline(1, ['clipboard contents', 'something else'])
528 " Save and restore system clipboard.
529 " If no connection to X-Server is possible, test should succeed.
530 let _clipreg = ['*', getreg('*'), getregtype('*')]
531 let _clipopt = &cb
532 let &cb='unnamed'
533 1y
534 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
535 tabdo :windo :echo "hi"
536 2y
537 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
538 let &cb=_clipopt
539 call call('setreg', _clipreg)
540 enew!
541 endif
542
Bram Moolenaar08f41572020-04-20 16:50:00 +0200543 " Error cases
544 call assert_fails('call setreg()', 'E119:')
545 call assert_fails('call setreg(1)', 'E119:')
546 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
547 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200548 call assert_fails('call setreg(1, 2, [])', 'E730:')
549 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
550 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
551 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
552endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200553
Bram Moolenaarae95a392020-08-06 16:38:12 +0200554func Test_curly_assignment()
555 let s:svar = 'svar'
556 let g:gvar = 'gvar'
557 let lname = 'gvar'
558 let gname = 'gvar'
559 let {'s:'.lname} = {'g:'.gname}
560 call assert_equal('gvar', s:gvar)
561 let s:gvar = ''
562 let { 's:'.lname } = { 'g:'.gname }
563 call assert_equal('gvar', s:gvar)
564 let s:gvar = ''
565 let { 's:' . lname } = { 'g:' . gname }
566 call assert_equal('gvar', s:gvar)
567 let s:gvar = ''
568 let { 's:' .. lname } = { 'g:' .. gname }
569 call assert_equal('gvar', s:gvar)
570
571 unlet s:svar
572 unlet s:gvar
573 unlet g:gvar
574endfunc
575
Bram Moolenaar8b633132020-03-20 18:20:51 +0100576" vim: shiftwidth=2 sts=2 expandtab