blob: ac9589d24caa5dee3c44a373134e14ce266c9193 [file] [log] [blame]
Bram Moolenaarfabaf752017-12-23 17:26:11 +01001" Tests for various eval things.
2
Bram Moolenaar2b6ef852020-07-11 22:25:57 +02003source view_util.vim
4
Bram Moolenaarfabaf752017-12-23 17:26:11 +01005function s:foo() abort
6 try
7 return [] == 0
8 catch
9 return 1
10 endtry
11endfunction
12
13func Test_catch_return_with_error()
14 call assert_equal(1, s:foo())
15endfunc
Bram Moolenaar2be57332018-02-13 18:05:18 +010016
17func Test_nocatch_restore_silent_emsg()
18 silent! try
19 throw 1
20 catch
21 endtry
Bram Moolenaar2b6ef852020-07-11 22:25:57 +020022 echoerr 'wrong again'
23 call assert_equal('wrong again', ScreenLine(&lines))
Bram Moolenaar2be57332018-02-13 18:05:18 +010024endfunc
Bram Moolenaar78a16b02018-04-14 13:51:55 +020025
26func Test_mkdir_p()
27 call mkdir('Xmkdir/nested', 'p')
28 call assert_true(isdirectory('Xmkdir/nested'))
29 try
30 " Trying to make existing directories doesn't error
31 call mkdir('Xmkdir', 'p')
32 call mkdir('Xmkdir/nested', 'p')
33 catch /E739:/
34 call assert_report('mkdir(..., "p") failed for an existing directory')
35 endtry
36 " 'p' doesn't suppress real errors
37 call writefile([], 'Xfile')
Bram Moolenaare2e40752020-09-04 21:18:46 +020038 call assert_fails('call mkdir("Xfile", "p")', 'E739:')
Bram Moolenaar78a16b02018-04-14 13:51:55 +020039 call delete('Xfile')
40 call delete('Xmkdir', 'rf')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +020041 call assert_equal(0, mkdir(test_null_string()))
Bram Moolenaare2e40752020-09-04 21:18:46 +020042 call assert_fails('call mkdir([])', 'E730:')
43 call assert_fails('call mkdir("abc", [], [])', 'E745:')
Bram Moolenaar78a16b02018-04-14 13:51:55 +020044endfunc
Bram Moolenaar67f8ab82018-09-11 22:37:29 +020045
46func Test_line_continuation()
47 let array = [5,
48 "\ ignore this
49 \ 6,
50 "\ more to ignore
51 "\ more moreto ignore
52 \ ]
53 "\ and some more
54 call assert_equal([5, 6], array)
55endfunc
Bram Moolenaar88b53fd2018-12-05 18:43:28 +010056
57func Test_E963()
58 " These commands used to cause an internal error prior to vim 8.1.0563
59 let v_e = v:errors
60 let v_o = v:oldfiles
61 call assert_fails("let v:errors=''", 'E963:')
62 call assert_equal(v_e, v:errors)
63 call assert_fails("let v:oldfiles=''", 'E963:')
64 call assert_equal(v_o, v:oldfiles)
65endfunc
Bram Moolenaarc0f5a782019-01-13 15:16:13 +010066
67func Test_for_invalid()
Sean Dewar80d73952021-08-04 19:25:54 +020068 call assert_fails("for x in 99", 'E1098:')
69 call assert_fails("for x in function('winnr')", 'E1098:')
70 call assert_fails("for x in {'a': 9}", 'E1098:')
Bram Moolenaardf2c2982021-01-28 20:18:08 +010071
72 if 0
73 /1/5/2/s/\n
74 endif
75 redraw
Bram Moolenaarc0f5a782019-01-13 15:16:13 +010076endfunc
Bram Moolenaar05500ec2019-01-13 19:10:33 +010077
78func Test_readfile_binary()
79 new
80 call setline(1, ['one', 'two', 'three'])
81 setlocal ff=dos
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020082 silent write XReadfile_bin
83 let lines = 'XReadfile_bin'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +010084 call assert_equal(['one', 'two', 'three'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020085 let lines = readfile('XReadfile_bin', '', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +010086 call assert_equal(['one', 'two'], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020087 let lines = readfile('XReadfile_bin', 'b')
Bram Moolenaar05500ec2019-01-13 19:10:33 +010088 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020089 let lines = readfile('XReadfile_bin', 'b', 2)
Bram Moolenaar05500ec2019-01-13 19:10:33 +010090 call assert_equal(["one\r", "two\r"], lines)
91
92 bwipe!
Bram Moolenaar1b04ce22020-08-21 22:46:11 +020093 call delete('XReadfile_bin')
94endfunc
95
96func Test_readfile_bom()
97 call writefile(["\ufeffFOO", "FOO\ufeffBAR"], 'XReadfile_bom')
98 call assert_equal(['FOO', 'FOOBAR'], readfile('XReadfile_bom'))
99 call delete('XReadfile_bom')
100endfunc
101
102func Test_readfile_max()
103 call writefile(range(1, 4), 'XReadfile_max')
104 call assert_equal(['1', '2'], readfile('XReadfile_max', '', 2))
105 call assert_equal(['3', '4'], readfile('XReadfile_max', '', -2))
106 call delete('XReadfile_max')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100107endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +0100108
109func Test_let_errmsg()
110 call assert_fails('let v:errmsg = []', 'E730:')
111 let v:errmsg = ''
112 call assert_fails('let v:errmsg = []', 'E730:')
113 let v:errmsg = ''
114endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200115
116func Test_string_concatenation()
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 call assert_equal('ab', 'a'..'b')
123 call assert_equal('ab', 'a' ..'b')
124 call assert_equal('ab', 'a'.. 'b')
125 call assert_equal('ab', 'a' .. 'b')
126
127 let a = 'a'
128 let b = 'b'
129 let a .= b
130 call assert_equal('ab', a)
131
132 let a = 'a'
133 let a.=b
134 call assert_equal('ab', a)
135
136 let a = 'a'
137 let a ..= b
138 call assert_equal('ab', a)
139
140 let a = 'a'
141 let a..=b
142 call assert_equal('ab', a)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200143
144 if has('float')
145 let a = 'A'
146 let b = 1.234
Bram Moolenaar3cfa5b12021-06-06 14:14:39 +0200147 call assert_equal('A1.234', a .. b)
Bram Moolenaar2e086612020-08-25 22:37:48 +0200148 endif
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200149endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200150
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200151" Test fix for issue #4507
152func Test_skip_after_throw()
153 try
154 throw 'something'
155 let x = wincol() || &ts
156 catch /something/
157 endtry
158endfunc
159
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200160scriptversion 2
161func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200162 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200163 let a = 'a'
164 let b = 'b'
165
166 call assert_fails('echo a . b', 'E15:')
167 call assert_fails('let a .= b', 'E985:')
Bram Moolenaarfae55a92021-06-17 22:08:30 +0200168 call assert_fails('let vers = 1.2.3', 'E488:')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200169
170 if has('float')
171 let f = .5
172 call assert_equal(0.5, f)
173 endif
174endfunc
175
176scriptversion 1
177func Test_string_concat_scriptversion1()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200178 call assert_true(has('vimscript-1'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200179 let a = 'a'
180 let b = 'b'
181
182 echo a . b
183 let a .= b
184 let vers = 1.2.3
185 call assert_equal('123', vers)
186
187 if has('float')
188 call assert_fails('let f = .5', 'E15:')
189 endif
190endfunc
191
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200192scriptversion 3
193func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200194 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200195 call assert_fails('echo version', 'E121:')
196 call assert_false(exists('version'))
197 let version = 1
198 call assert_equal(1, version)
199endfunc
200
201scriptversion 2
202func Test_vvar_scriptversion2()
203 call assert_true(exists('version'))
204 echo version
205 call assert_fails('let version = 1', 'E46:')
206 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200207
208 call assert_equal(v:version, v:versionlong / 10000)
209 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200210endfunc
211
Bram Moolenaar61343f02019-07-20 21:11:13 +0200212func Test_dict_access_scriptversion2()
213 let l:x = {'foo': 1}
214
215 call assert_false(0 && l:x.foo)
216 call assert_true(1 && l:x.foo)
217endfunc
218
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200219scriptversion 4
220func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200221 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200222 call assert_equal(17, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200223 call assert_equal(15, 0o17)
224 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200225 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100226 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200227 call assert_equal(64, 0b1'00'00'00)
228 call assert_equal(1048576, 0x10'00'00)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200229 call assert_equal(32768, 0o10'00'00)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200230 call assert_equal(1000000, 1'000'000)
Bram Moolenaarea8dcf82019-09-15 21:12:22 +0200231 call assert_equal("1234", execute("echo 1'234")->trim())
232 call assert_equal('1 234', execute("echo 1''234")->trim())
233 call assert_fails("echo 1'''234", 'E115:')
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200234endfunc
235
236scriptversion 1
237func Test_vvar_scriptversion1()
238 call assert_equal(15, 017)
Bram Moolenaarc17e66c2020-06-02 21:38:22 +0200239 call assert_equal(15, 0o17)
240 call assert_equal(15, 0O17)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200241 call assert_equal(18, 018)
Bram Moolenaarc37b6552021-01-07 19:36:30 +0100242 call assert_equal(511, 0o777)
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200243endfunc
244
245func Test_scriptversion_fail()
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200246 call writefile(['scriptversion 9'], 'Xversionscript')
247 call assert_fails('source Xversionscript', 'E999:')
248 call delete('Xversionscript')
249endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100250
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200251func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100252 call assert_fails('execute test_null_list()', 'E730:')
253 call assert_fails('execute test_null_dict()', 'E731:')
254 call assert_fails('execute test_null_blob()', 'E976:')
255 execute test_null_string()
256 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200257 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100258 if has('job')
259 call assert_fails('execute test_null_job()', 'E908:')
260 call assert_fails('execute test_null_channel()', 'E908:')
261 endif
262endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100263
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100264func Test_number_max_min_size()
265 " This will fail on systems without 64 bit number support or when not
266 " configured correctly.
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100267 call assert_equal(64, v:numbersize)
Bram Moolenaar57d5a012021-01-21 21:42:31 +0100268
269 call assert_true(v:numbermin < -9999999)
270 call assert_true(v:numbermax > 9999999)
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100271endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100272
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200273func Assert_reg(name, type, value, valuestr, expr, exprstr)
274 call assert_equal(a:type, getregtype(a:name))
275 call assert_equal(a:value, getreg(a:name))
276 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
277 call assert_equal(a:expr, getreg(a:name, 1))
278 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
279endfunc
280
281func Test_let_register()
282 let @" = 'abc'
283 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
284 let @" = "abc\n"
285 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
286 let @" = "abc\<C-m>"
287 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
288 let @= = '"abc"'
289 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
290endfunc
291
292func Assert_regput(name, result)
293 new
294 execute "silent normal! o==\n==\e\"" . a:name . "P"
295 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200296 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200297endfunc
298
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200299func Test_setreg_basic()
300 call setreg('a', 'abcA', 'c')
301 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
302 call Assert_regput('a', ['==', '=abcA='])
303
304 call setreg('A', 'abcAc', 'c')
305 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
306 call Assert_regput('a', ['==', '=abcAabcAc='])
307
308 call setreg('A', 'abcAl', 'l')
309 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
310 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
311
312 call setreg('A', 'abcAc2','c')
313 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
314 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
315
316 call setreg('b', 'abcB', 'v')
317 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
318 call Assert_regput('b', ['==', '=abcB='])
319
320 call setreg('b', 'abcBc', 'ca')
321 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
322 call Assert_regput('b', ['==', '=abcBabcBc='])
323
324 call setreg('b', 'abcBb', 'ba')
325 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
326 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
327
328 call setreg('b', 'abcBc2','ca')
329 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
330 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
331
332 call setreg('b', 'abcBb2','b50a')
333 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
334 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
335
336 call setreg('c', 'abcC', 'l')
337 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
338 call Assert_regput('c', ['==', 'abcC', '=='])
339
340 call setreg('C', 'abcCl', 'l')
341 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
342 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
343
344 call setreg('C', 'abcCc', 'c')
345 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
346 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
347
348 call setreg('d', 'abcD', 'V')
349 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
350 call Assert_regput('d', ['==', 'abcD', '=='])
351
352 call setreg('D', 'abcDb', 'b')
353 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
354 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
355
356 call setreg('e', 'abcE', 'b')
357 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
358 call Assert_regput('e', ['==', '=abcE='])
359
360 call setreg('E', 'abcEb', 'b')
361 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
362 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
363
364 call setreg('E', 'abcEl', 'l')
365 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
366 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
367
368 call setreg('f', 'abcF', "\<C-v>")
369 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
370 call Assert_regput('f', ['==', '=abcF='])
371
372 call setreg('F', 'abcFc', 'c')
373 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
374 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
375
376 call setreg('g', 'abcG', 'b10')
377 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
378 call Assert_regput('g', ['==', '=abcG ='])
379
380 call setreg('h', 'abcH', "\<C-v>10")
381 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
382 call Assert_regput('h', ['==', '=abcH ='])
383
384 call setreg('I', 'abcI')
385 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
386 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200387
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200388 " Appending NL with setreg()
389 call setreg('a', 'abcA2', 'c')
390 call setreg('b', 'abcB2', 'v')
391 call setreg('c', 'abcC2', 'l')
392 call setreg('d', 'abcD2', 'V')
393 call setreg('e', 'abcE2', 'b')
394 call setreg('f', 'abcF2', "\<C-v>")
395 call setreg('g', 'abcG2', 'b10')
396 call setreg('h', 'abcH2', "\<C-v>10")
397 call setreg('I', 'abcI2')
398
399 call setreg('A', "\n")
400 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
401 call Assert_regput('A', ['==', 'abcA2', '=='])
402
403 call setreg('B', "\n", 'c')
404 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
405 call Assert_regput('B', ['==', '=abcB2', '='])
406
407 call setreg('C', "\n")
408 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
409 call Assert_regput('C', ['==', 'abcC2', '', '=='])
410
411 call setreg('D', "\n", 'l')
412 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
413 call Assert_regput('D', ['==', 'abcD2', '', '=='])
414
415 call setreg('E', "\n")
416 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
417 call Assert_regput('E', ['==', 'abcE2', '', '=='])
418
419 call setreg('F', "\n", 'b')
420 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
421 call Assert_regput('F', ['==', '=abcF2=', ' '])
422
423 " Setting lists with setreg()
424 call setreg('a', ['abcA3'], 'c')
425 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
426 call Assert_regput('a', ['==', '=abcA3='])
427
428 call setreg('b', ['abcB3'], 'l')
429 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
430 call Assert_regput('b', ['==', 'abcB3', '=='])
431
432 call setreg('c', ['abcC3'], 'b')
433 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
434 call Assert_regput('c', ['==', '=abcC3='])
435
436 call setreg('d', ['abcD3'])
437 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
438 call Assert_regput('d', ['==', 'abcD3', '=='])
439
440 call setreg('e', [1, 2, 'abc', 3])
441 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
442 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
443
444 call setreg('f', [1, 2, 3])
445 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
446 call Assert_regput('f', ['==', '1', '2', '3', '=='])
447
448 " Appending lists with setreg()
449 call setreg('A', ['abcA3c'], 'c')
450 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
451 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
452
453 call setreg('b', ['abcB3l'], 'la')
454 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
455 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
456
457 call setreg('C', ['abcC3b'], 'lb')
458 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
459 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
460
461 call setreg('D', ['abcD32'])
462 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
463 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
464
465 call setreg('A', ['abcA32'])
466 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
467 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
468
469 call setreg('B', ['abcB3c'], 'c')
470 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
471 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
472
473 call setreg('C', ['abcC3l'], 'l')
474 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
475 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
476
477 call setreg('D', ['abcD3b'], 'b')
478 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
479 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
480
481 " Appending lists with NL with setreg()
482 call setreg('A', ["\n", 'abcA3l2'], 'l')
483 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']")
484 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
485
486 call setreg('B', ["\n", 'abcB3c2'], 'c')
487 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']")
488 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
489
490 call setreg('C', ["\n", 'abcC3b2'], 'b')
491 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']")
492 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
493
494 call setreg('D', ["\n", 'abcD3b50'],'b50')
495 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']")
496 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
497
498 " Setting lists with NLs with setreg()
499 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
500 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']")
501 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
502
503 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
504 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']")
505 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
506
507 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
508 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']")
509 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
510
511 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
512 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']")
513 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
514
515 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
516 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']")
517 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
518
519 " Search and expressions
520 call setreg('/', ['abc/'])
521 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
522 call Assert_regput('/', ['==', '=abc/='])
523
524 call setreg('/', ["abc/\n"])
525 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
526 call Assert_regput('/', ['==', "=abc/\n="])
527
528 call setreg('=', ['"abc/"'])
529 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
530
531 call setreg('=', ["\"abc/\n\""])
532 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
533
534 " System clipboard
535 if has('clipboard')
536 new | only!
537 call setline(1, ['clipboard contents', 'something else'])
538 " Save and restore system clipboard.
539 " If no connection to X-Server is possible, test should succeed.
540 let _clipreg = ['*', getreg('*'), getregtype('*')]
541 let _clipopt = &cb
542 let &cb='unnamed'
543 1y
544 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
545 tabdo :windo :echo "hi"
546 2y
547 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
548 let &cb=_clipopt
549 call call('setreg', _clipreg)
550 enew!
551 endif
552
Bram Moolenaar08f41572020-04-20 16:50:00 +0200553 " Error cases
554 call assert_fails('call setreg()', 'E119:')
555 call assert_fails('call setreg(1)', 'E119:')
556 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
557 call assert_fails('call setreg([], 2)', 'E730:')
Bram Moolenaar08f41572020-04-20 16:50:00 +0200558 call assert_fails('call setreg(1, 2, [])', 'E730:')
559 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
560 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
561 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
562endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200563
Bram Moolenaarae95a392020-08-06 16:38:12 +0200564func Test_curly_assignment()
565 let s:svar = 'svar'
566 let g:gvar = 'gvar'
567 let lname = 'gvar'
568 let gname = 'gvar'
569 let {'s:'.lname} = {'g:'.gname}
570 call assert_equal('gvar', s:gvar)
571 let s:gvar = ''
572 let { 's:'.lname } = { 'g:'.gname }
573 call assert_equal('gvar', s:gvar)
574 let s:gvar = ''
575 let { 's:' . lname } = { 'g:' . gname }
576 call assert_equal('gvar', s:gvar)
577 let s:gvar = ''
578 let { 's:' .. lname } = { 'g:' .. gname }
579 call assert_equal('gvar', s:gvar)
580
581 unlet s:svar
582 unlet s:gvar
583 unlet g:gvar
584endfunc
585
Bram Moolenaar8b633132020-03-20 18:20:51 +0100586" vim: shiftwidth=2 sts=2 expandtab