blob: bca89f7a77cd73a7510179fa79fb1a47cc005aaa [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')
38 call assert_fails('call mkdir("Xfile", "p")', 'E739')
39 call delete('Xfile')
40 call delete('Xmkdir', 'rf')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +020041 call assert_equal(0, mkdir(test_null_string()))
42 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 Moolenaar60a8de22019-09-15 14:33:22 +020077 silent write XReadfile
Bram Moolenaara0d1fef2019-09-04 22:29:14 +020078 let lines = 'XReadfile'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +010079 call assert_equal(['one', 'two', 'three'], lines)
80 let lines = readfile('XReadfile', '', 2)
81 call assert_equal(['one', 'two'], lines)
82 let lines = readfile('XReadfile', 'b')
83 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
84 let lines = readfile('XReadfile', 'b', 2)
85 call assert_equal(["one\r", "two\r"], lines)
86
87 bwipe!
88 call delete('XReadfile')
89endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +010090
91func Test_let_errmsg()
92 call assert_fails('let v:errmsg = []', 'E730:')
93 let v:errmsg = ''
94 call assert_fails('let v:errmsg = []', 'E730:')
95 let v:errmsg = ''
96endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +020097
98func Test_string_concatenation()
99 call assert_equal('ab', 'a'.'b')
100 call assert_equal('ab', 'a' .'b')
101 call assert_equal('ab', 'a'. 'b')
102 call assert_equal('ab', 'a' . 'b')
103
104 call assert_equal('ab', 'a'..'b')
105 call assert_equal('ab', 'a' ..'b')
106 call assert_equal('ab', 'a'.. 'b')
107 call assert_equal('ab', 'a' .. 'b')
108
109 let a = 'a'
110 let b = 'b'
111 let a .= b
112 call assert_equal('ab', a)
113
114 let a = 'a'
115 let a.=b
116 call assert_equal('ab', a)
117
118 let a = 'a'
119 let a ..= b
120 call assert_equal('ab', a)
121
122 let a = 'a'
123 let a..=b
124 call assert_equal('ab', a)
125endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200126
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200127" Test fix for issue #4507
128func Test_skip_after_throw()
129 try
130 throw 'something'
131 let x = wincol() || &ts
132 catch /something/
133 endtry
134endfunc
135
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200136scriptversion 2
137func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200138 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200139 let a = 'a'
140 let b = 'b'
141
142 call assert_fails('echo a . b', 'E15:')
143 call assert_fails('let a .= b', 'E985:')
144 call assert_fails('let vers = 1.2.3', 'E15:')
145
146 if has('float')
147 let f = .5
148 call assert_equal(0.5, f)
149 endif
150endfunc
151
152scriptversion 1
153func Test_string_concat_scriptversion1()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200154 call assert_true(has('vimscript-1'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200155 let a = 'a'
156 let b = 'b'
157
158 echo a . b
159 let a .= b
160 let vers = 1.2.3
161 call assert_equal('123', vers)
162
163 if has('float')
164 call assert_fails('let f = .5', 'E15:')
165 endif
166endfunc
167
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200168scriptversion 3
169func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200170 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200171 call assert_fails('echo version', 'E121:')
172 call assert_false(exists('version'))
173 let version = 1
174 call assert_equal(1, version)
175endfunc
176
177scriptversion 2
178func Test_vvar_scriptversion2()
179 call assert_true(exists('version'))
180 echo version
181 call assert_fails('let version = 1', 'E46:')
182 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200183
184 call assert_equal(v:version, v:versionlong / 10000)
185 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200186endfunc
187
Bram Moolenaar61343f02019-07-20 21:11:13 +0200188func Test_dict_access_scriptversion2()
189 let l:x = {'foo': 1}
190
191 call assert_false(0 && l:x.foo)
192 call assert_true(1 && l:x.foo)
193endfunc
194
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200195scriptversion 4
196func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200197 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200198 call assert_equal(17, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200199 call assert_equal(15, 0o17)
200 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200201 call assert_equal(18, 018)
202 call assert_equal(64, 0b1'00'00'00)
203 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200204 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200205 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200206 call assert_equal("1234", execute("echo 1'234")->trim())
207 call assert_equal('1 234', execute("echo 1''234")->trim())
208 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200209endfunc
210
211scriptversion 1
212func Test_vvar_scriptversion1()
213 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200214 call assert_equal(15, 0o17)
215 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200216 call assert_equal(18, 018)
217endfunc
218
219func Test_scriptversion_fail()
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200220 call writefile(['scriptversion 9'], 'Xversionscript')
221 call assert_fails('source Xversionscript', 'E999:')
222 call delete('Xversionscript')
223endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100224
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200225func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100226 call assert_fails('execute test_null_list()', 'E730:')
227 call assert_fails('execute test_null_dict()', 'E731:')
228 call assert_fails('execute test_null_blob()', 'E976:')
229 execute test_null_string()
230 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200231 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100232 if has('job')
233 call assert_fails('execute test_null_job()', 'E908:')
234 call assert_fails('execute test_null_channel()', 'E908:')
235 endif
236endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100237
238func Test_numbersize()
239 " This will fail on systems without 64 bit int support or when not configured
240 " correctly.
241 call assert_equal(64, v:numbersize)
242endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100243
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200244func Assert_reg(name, type, value, valuestr, expr, exprstr)
245 call assert_equal(a:type, getregtype(a:name))
246 call assert_equal(a:value, getreg(a:name))
247 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
248 call assert_equal(a:expr, getreg(a:name, 1))
249 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
250endfunc
251
252func Test_let_register()
253 let @" = 'abc'
254 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
255 let @" = "abc\n"
256 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
257 let @" = "abc\<C-m>"
258 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
259 let @= = '"abc"'
260 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
261endfunc
262
263func Assert_regput(name, result)
264 new
265 execute "silent normal! o==\n==\e\"" . a:name . "P"
266 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200267 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200268endfunc
269
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200270func Test_setreg_basic()
271 call setreg('a', 'abcA', 'c')
272 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
273 call Assert_regput('a', ['==', '=abcA='])
274
275 call setreg('A', 'abcAc', 'c')
276 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
277 call Assert_regput('a', ['==', '=abcAabcAc='])
278
279 call setreg('A', 'abcAl', 'l')
280 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
281 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
282
283 call setreg('A', 'abcAc2','c')
284 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
285 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
286
287 call setreg('b', 'abcB', 'v')
288 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
289 call Assert_regput('b', ['==', '=abcB='])
290
291 call setreg('b', 'abcBc', 'ca')
292 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
293 call Assert_regput('b', ['==', '=abcBabcBc='])
294
295 call setreg('b', 'abcBb', 'ba')
296 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
297 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
298
299 call setreg('b', 'abcBc2','ca')
300 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
301 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
302
303 call setreg('b', 'abcBb2','b50a')
304 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
305 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
306
307 call setreg('c', 'abcC', 'l')
308 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
309 call Assert_regput('c', ['==', 'abcC', '=='])
310
311 call setreg('C', 'abcCl', 'l')
312 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
313 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
314
315 call setreg('C', 'abcCc', 'c')
316 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
317 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
318
319 call setreg('d', 'abcD', 'V')
320 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
321 call Assert_regput('d', ['==', 'abcD', '=='])
322
323 call setreg('D', 'abcDb', 'b')
324 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
325 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
326
327 call setreg('e', 'abcE', 'b')
328 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
329 call Assert_regput('e', ['==', '=abcE='])
330
331 call setreg('E', 'abcEb', 'b')
332 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
333 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
334
335 call setreg('E', 'abcEl', 'l')
336 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
337 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
338
339 call setreg('f', 'abcF', "\<C-v>")
340 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
341 call Assert_regput('f', ['==', '=abcF='])
342
343 call setreg('F', 'abcFc', 'c')
344 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
345 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
346
347 call setreg('g', 'abcG', 'b10')
348 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
349 call Assert_regput('g', ['==', '=abcG ='])
350
351 call setreg('h', 'abcH', "\<C-v>10")
352 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
353 call Assert_regput('h', ['==', '=abcH ='])
354
355 call setreg('I', 'abcI')
356 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
357 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200358
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200359 " Appending NL with setreg()
360 call setreg('a', 'abcA2', 'c')
361 call setreg('b', 'abcB2', 'v')
362 call setreg('c', 'abcC2', 'l')
363 call setreg('d', 'abcD2', 'V')
364 call setreg('e', 'abcE2', 'b')
365 call setreg('f', 'abcF2', "\<C-v>")
366 call setreg('g', 'abcG2', 'b10')
367 call setreg('h', 'abcH2', "\<C-v>10")
368 call setreg('I', 'abcI2')
369
370 call setreg('A', "\n")
371 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
372 call Assert_regput('A', ['==', 'abcA2', '=='])
373
374 call setreg('B', "\n", 'c')
375 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
376 call Assert_regput('B', ['==', '=abcB2', '='])
377
378 call setreg('C', "\n")
379 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
380 call Assert_regput('C', ['==', 'abcC2', '', '=='])
381
382 call setreg('D', "\n", 'l')
383 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
384 call Assert_regput('D', ['==', 'abcD2', '', '=='])
385
386 call setreg('E', "\n")
387 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
388 call Assert_regput('E', ['==', 'abcE2', '', '=='])
389
390 call setreg('F', "\n", 'b')
391 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
392 call Assert_regput('F', ['==', '=abcF2=', ' '])
393
394 " Setting lists with setreg()
395 call setreg('a', ['abcA3'], 'c')
396 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
397 call Assert_regput('a', ['==', '=abcA3='])
398
399 call setreg('b', ['abcB3'], 'l')
400 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
401 call Assert_regput('b', ['==', 'abcB3', '=='])
402
403 call setreg('c', ['abcC3'], 'b')
404 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
405 call Assert_regput('c', ['==', '=abcC3='])
406
407 call setreg('d', ['abcD3'])
408 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
409 call Assert_regput('d', ['==', 'abcD3', '=='])
410
411 call setreg('e', [1, 2, 'abc', 3])
412 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
413 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
414
415 call setreg('f', [1, 2, 3])
416 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
417 call Assert_regput('f', ['==', '1', '2', '3', '=='])
418
419 " Appending lists with setreg()
420 call setreg('A', ['abcA3c'], 'c')
421 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
422 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
423
424 call setreg('b', ['abcB3l'], 'la')
425 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
426 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
427
428 call setreg('C', ['abcC3b'], 'lb')
429 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
430 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
431
432 call setreg('D', ['abcD32'])
433 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
434 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
435
436 call setreg('A', ['abcA32'])
437 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
438 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
439
440 call setreg('B', ['abcB3c'], 'c')
441 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
442 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
443
444 call setreg('C', ['abcC3l'], 'l')
445 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
446 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
447
448 call setreg('D', ['abcD3b'], 'b')
449 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
450 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
451
452 " Appending lists with NL with setreg()
453 call setreg('A', ["\n", 'abcA3l2'], 'l')
454 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']")
455 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
456
457 call setreg('B', ["\n", 'abcB3c2'], 'c')
458 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']")
459 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
460
461 call setreg('C', ["\n", 'abcC3b2'], 'b')
462 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']")
463 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
464
465 call setreg('D', ["\n", 'abcD3b50'],'b50')
466 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']")
467 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
468
469 " Setting lists with NLs with setreg()
470 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
471 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']")
472 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
473
474 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
475 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']")
476 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
477
478 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
479 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']")
480 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
481
482 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
483 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']")
484 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
485
486 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
487 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']")
488 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
489
490 " Search and expressions
491 call setreg('/', ['abc/'])
492 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
493 call Assert_regput('/', ['==', '=abc/='])
494
495 call setreg('/', ["abc/\n"])
496 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
497 call Assert_regput('/', ['==', "=abc/\n="])
498
499 call setreg('=', ['"abc/"'])
500 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
501
502 call setreg('=', ["\"abc/\n\""])
503 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
504
505 " System clipboard
506 if has('clipboard')
507 new | only!
508 call setline(1, ['clipboard contents', 'something else'])
509 " Save and restore system clipboard.
510 " If no connection to X-Server is possible, test should succeed.
511 let _clipreg = ['*', getreg('*'), getregtype('*')]
512 let _clipopt = &cb
513 let &cb='unnamed'
514 1y
515 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
516 tabdo :windo :echo "hi"
517 2y
518 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
519 let &cb=_clipopt
520 call call('setreg', _clipreg)
521 enew!
522 endif
523
Bram Moolenaar08f41572020-04-20 16:50:00 +0200524 " Error cases
525 call assert_fails('call setreg()', 'E119:')
526 call assert_fails('call setreg(1)', 'E119:')
527 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
528 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200529 call assert_fails('call setreg(1, 2, [])', 'E730:')
530 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
531 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
532 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
533endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200534
Bram Moolenaarae95a392020-08-06 16:38:12 +0200535func Test_curly_assignment()
536 let s:svar = 'svar'
537 let g:gvar = 'gvar'
538 let lname = 'gvar'
539 let gname = 'gvar'
540 let {'s:'.lname} = {'g:'.gname}
541 call assert_equal('gvar', s:gvar)
542 let s:gvar = ''
543 let { 's:'.lname } = { 'g:'.gname }
544 call assert_equal('gvar', s:gvar)
545 let s:gvar = ''
546 let { 's:' . lname } = { 'g:' . gname }
547 call assert_equal('gvar', s:gvar)
548 let s:gvar = ''
549 let { 's:' .. lname } = { 'g:' .. gname }
550 call assert_equal('gvar', s:gvar)
551
552 unlet s:svar
553 unlet s:gvar
554 unlet g:gvar
555endfunc
556
Bram Moolenaar8b633132020-03-20 18:20:51 +0100557" vim: shiftwidth=2 sts=2 expandtab