blob: 325f8e2a49291cd670af587018a77ff9cf644f5e [file] [log] [blame]
Bram Moolenaarfabaf752017-12-23 17:26:11 +01001" Tests for various eval things.
2
3function s:foo() abort
4 try
5 return [] == 0
6 catch
7 return 1
8 endtry
9endfunction
10
11func Test_catch_return_with_error()
12 call assert_equal(1, s:foo())
13endfunc
Bram Moolenaar2be57332018-02-13 18:05:18 +010014
15func Test_nocatch_restore_silent_emsg()
16 silent! try
17 throw 1
18 catch
19 endtry
20 echoerr 'wrong'
21 let c1 = nr2char(screenchar(&lines, 1))
22 let c2 = nr2char(screenchar(&lines, 2))
23 let c3 = nr2char(screenchar(&lines, 3))
24 let c4 = nr2char(screenchar(&lines, 4))
25 let c5 = nr2char(screenchar(&lines, 5))
26 call assert_equal('wrong', c1 . c2 . c3 . c4 . c5)
27endfunc
Bram Moolenaar78a16b02018-04-14 13:51:55 +020028
29func Test_mkdir_p()
30 call mkdir('Xmkdir/nested', 'p')
31 call assert_true(isdirectory('Xmkdir/nested'))
32 try
33 " Trying to make existing directories doesn't error
34 call mkdir('Xmkdir', 'p')
35 call mkdir('Xmkdir/nested', 'p')
36 catch /E739:/
37 call assert_report('mkdir(..., "p") failed for an existing directory')
38 endtry
39 " 'p' doesn't suppress real errors
40 call writefile([], 'Xfile')
41 call assert_fails('call mkdir("Xfile", "p")', 'E739')
42 call delete('Xfile')
43 call delete('Xmkdir', 'rf')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +020044 call assert_equal(0, mkdir(test_null_string()))
45 call assert_fails('call mkdir([])', 'E730')
46 call assert_fails('call mkdir("abc", [], [])', 'E745')
Bram Moolenaar78a16b02018-04-14 13:51:55 +020047endfunc
Bram Moolenaar67f8ab82018-09-11 22:37:29 +020048
49func Test_line_continuation()
50 let array = [5,
51 "\ ignore this
52 \ 6,
53 "\ more to ignore
54 "\ more moreto ignore
55 \ ]
56 "\ and some more
57 call assert_equal([5, 6], array)
58endfunc
Bram Moolenaar88b53fd2018-12-05 18:43:28 +010059
60func Test_E963()
61 " These commands used to cause an internal error prior to vim 8.1.0563
62 let v_e = v:errors
63 let v_o = v:oldfiles
64 call assert_fails("let v:errors=''", 'E963:')
65 call assert_equal(v_e, v:errors)
66 call assert_fails("let v:oldfiles=''", 'E963:')
67 call assert_equal(v_o, v:oldfiles)
68endfunc
Bram Moolenaarc0f5a782019-01-13 15:16:13 +010069
70func Test_for_invalid()
71 call assert_fails("for x in 99", 'E714:')
72 call assert_fails("for x in 'asdf'", 'E714:')
73 call assert_fails("for x in {'a': 9}", 'E714:')
74endfunc
Bram Moolenaar05500ec2019-01-13 19:10:33 +010075
76func Test_readfile_binary()
77 new
78 call setline(1, ['one', 'two', 'three'])
79 setlocal ff=dos
Bram Moolenaar60a8de22019-09-15 14:33:22 +020080 silent write XReadfile
Bram Moolenaara0d1fef2019-09-04 22:29:14 +020081 let lines = 'XReadfile'->readfile()
Bram Moolenaar05500ec2019-01-13 19:10:33 +010082 call assert_equal(['one', 'two', 'three'], lines)
83 let lines = readfile('XReadfile', '', 2)
84 call assert_equal(['one', 'two'], lines)
85 let lines = readfile('XReadfile', 'b')
86 call assert_equal(["one\r", "two\r", "three\r", ""], lines)
87 let lines = readfile('XReadfile', 'b', 2)
88 call assert_equal(["one\r", "two\r"], lines)
89
90 bwipe!
91 call delete('XReadfile')
92endfunc
Bram Moolenaar4b9e91f2019-01-24 13:58:11 +010093
94func Test_let_errmsg()
95 call assert_fails('let v:errmsg = []', 'E730:')
96 let v:errmsg = ''
97 call assert_fails('let v:errmsg = []', 'E730:')
98 let v:errmsg = ''
99endfunc
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200100
101func Test_string_concatenation()
102 call assert_equal('ab', 'a'.'b')
103 call assert_equal('ab', 'a' .'b')
104 call assert_equal('ab', 'a'. 'b')
105 call assert_equal('ab', 'a' . 'b')
106
107 call assert_equal('ab', 'a'..'b')
108 call assert_equal('ab', 'a' ..'b')
109 call assert_equal('ab', 'a'.. 'b')
110 call assert_equal('ab', 'a' .. 'b')
111
112 let a = 'a'
113 let b = 'b'
114 let a .= b
115 call assert_equal('ab', a)
116
117 let a = 'a'
118 let a.=b
119 call assert_equal('ab', a)
120
121 let a = 'a'
122 let a ..= b
123 call assert_equal('ab', a)
124
125 let a = 'a'
126 let a..=b
127 call assert_equal('ab', a)
128endfunc
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200129
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200130" Test fix for issue #4507
131func Test_skip_after_throw()
132 try
133 throw 'something'
134 let x = wincol() || &ts
135 catch /something/
136 endtry
137endfunc
138
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200139scriptversion 2
140func Test_string_concat_scriptversion2()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200141 call assert_true(has('vimscript-2'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200142 let a = 'a'
143 let b = 'b'
144
145 call assert_fails('echo a . b', 'E15:')
146 call assert_fails('let a .= b', 'E985:')
147 call assert_fails('let vers = 1.2.3', 'E15:')
148
149 if has('float')
150 let f = .5
151 call assert_equal(0.5, f)
152 endif
153endfunc
154
155scriptversion 1
156func Test_string_concat_scriptversion1()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200157 call assert_true(has('vimscript-1'))
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200158 let a = 'a'
159 let b = 'b'
160
161 echo a . b
162 let a .= b
163 let vers = 1.2.3
164 call assert_equal('123', vers)
165
166 if has('float')
167 call assert_fails('let f = .5', 'E15:')
168 endif
169endfunc
170
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200171scriptversion 3
172func Test_vvar_scriptversion3()
Bram Moolenaar93a48792019-04-20 21:54:28 +0200173 call assert_true(has('vimscript-3'))
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200174 call assert_fails('echo version', 'E121:')
175 call assert_false(exists('version'))
176 let version = 1
177 call assert_equal(1, version)
178endfunc
179
180scriptversion 2
181func Test_vvar_scriptversion2()
182 call assert_true(exists('version'))
183 echo version
184 call assert_fails('let version = 1', 'E46:')
185 call assert_equal(v:version, version)
Bram Moolenaar37df9a42019-06-14 14:39:51 +0200186
187 call assert_equal(v:version, v:versionlong / 10000)
188 call assert_true(v:versionlong > 8011525)
Bram Moolenaard2e716e2019-04-20 14:39:52 +0200189endfunc
190
Bram Moolenaar61343f02019-07-20 21:11:13 +0200191func Test_dict_access_scriptversion2()
192 let l:x = {'foo': 1}
193
194 call assert_false(0 && l:x.foo)
195 call assert_true(1 && l:x.foo)
196endfunc
197
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200198scriptversion 4
199func Test_vvar_scriptversion4()
Bram Moolenaaraf914382019-09-15 17:49:10 +0200200 call assert_true(has('vimscript-4'))
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200201 call assert_equal(17, 017)
202 call assert_equal(18, 018)
203 call assert_equal(64, 0b1'00'00'00)
204 call assert_equal(1048576, 0x10'00'00)
205 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)
214 call assert_equal(18, 018)
215endfunc
216
217func Test_scriptversion_fail()
Bram Moolenaar558ca4a2019-04-04 18:15:38 +0200218 call writefile(['scriptversion 9'], 'Xversionscript')
219 call assert_fails('source Xversionscript', 'E999:')
220 call delete('Xversionscript')
221endfunc
Bram Moolenaarb6625912020-01-08 20:09:01 +0100222
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200223func Test_execute_cmd_with_null()
Bram Moolenaarb6625912020-01-08 20:09:01 +0100224 call assert_fails('execute test_null_list()', 'E730:')
225 call assert_fails('execute test_null_dict()', 'E731:')
226 call assert_fails('execute test_null_blob()', 'E976:')
227 execute test_null_string()
228 call assert_fails('execute test_null_partial()', 'E729:')
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200229 call assert_fails('execute test_unknown()', 'E908:')
Bram Moolenaarb6625912020-01-08 20:09:01 +0100230 if has('job')
231 call assert_fails('execute test_null_job()', 'E908:')
232 call assert_fails('execute test_null_channel()', 'E908:')
233 endif
234endfunc
Bram Moolenaarf9706e92020-02-22 14:27:04 +0100235
236func Test_numbersize()
237 " This will fail on systems without 64 bit int support or when not configured
238 " correctly.
239 call assert_equal(64, v:numbersize)
240endfunc
Bram Moolenaar8b633132020-03-20 18:20:51 +0100241
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200242func Assert_reg(name, type, value, valuestr, expr, exprstr)
243 call assert_equal(a:type, getregtype(a:name))
244 call assert_equal(a:value, getreg(a:name))
245 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
246 call assert_equal(a:expr, getreg(a:name, 1))
247 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
248endfunc
249
250func Test_let_register()
251 let @" = 'abc'
252 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
253 let @" = "abc\n"
254 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
255 let @" = "abc\<C-m>"
256 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
257 let @= = '"abc"'
258 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
259endfunc
260
261func Assert_regput(name, result)
262 new
263 execute "silent normal! o==\n==\e\"" . a:name . "P"
264 call assert_equal(a:result, getline(2, line('$')))
Bram Moolenaar61fbb332020-04-18 23:20:37 +0200265 bwipe!
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200266endfunc
267
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200268func Test_setreg_basic()
269 call setreg('a', 'abcA', 'c')
270 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
271 call Assert_regput('a', ['==', '=abcA='])
272
273 call setreg('A', 'abcAc', 'c')
274 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
275 call Assert_regput('a', ['==', '=abcAabcAc='])
276
277 call setreg('A', 'abcAl', 'l')
278 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
279 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
280
281 call setreg('A', 'abcAc2','c')
282 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
283 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
284
285 call setreg('b', 'abcB', 'v')
286 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
287 call Assert_regput('b', ['==', '=abcB='])
288
289 call setreg('b', 'abcBc', 'ca')
290 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
291 call Assert_regput('b', ['==', '=abcBabcBc='])
292
293 call setreg('b', 'abcBb', 'ba')
294 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
295 call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
296
297 call setreg('b', 'abcBc2','ca')
298 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
299 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
300
301 call setreg('b', 'abcBb2','b50a')
302 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
303 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2'])
304
305 call setreg('c', 'abcC', 'l')
306 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
307 call Assert_regput('c', ['==', 'abcC', '=='])
308
309 call setreg('C', 'abcCl', 'l')
310 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
311 call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
312
313 call setreg('C', 'abcCc', 'c')
314 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
315 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
316
317 call setreg('d', 'abcD', 'V')
318 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
319 call Assert_regput('d', ['==', 'abcD', '=='])
320
321 call setreg('D', 'abcDb', 'b')
322 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
323 call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
324
325 call setreg('e', 'abcE', 'b')
326 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
327 call Assert_regput('e', ['==', '=abcE='])
328
329 call setreg('E', 'abcEb', 'b')
330 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
331 call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
332
333 call setreg('E', 'abcEl', 'l')
334 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
335 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
336
337 call setreg('f', 'abcF', "\<C-v>")
338 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
339 call Assert_regput('f', ['==', '=abcF='])
340
341 call setreg('F', 'abcFc', 'c')
342 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
343 call Assert_regput('f', ['==', '=abcF', 'abcFc='])
344
345 call setreg('g', 'abcG', 'b10')
346 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
347 call Assert_regput('g', ['==', '=abcG ='])
348
349 call setreg('h', 'abcH', "\<C-v>10")
350 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
351 call Assert_regput('h', ['==', '=abcH ='])
352
353 call setreg('I', 'abcI')
354 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
355 call Assert_regput('I', ['==', '=abcI='])
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200356
Bram Moolenaar339d60c2020-04-29 22:01:21 +0200357 " Appending NL with setreg()
358 call setreg('a', 'abcA2', 'c')
359 call setreg('b', 'abcB2', 'v')
360 call setreg('c', 'abcC2', 'l')
361 call setreg('d', 'abcD2', 'V')
362 call setreg('e', 'abcE2', 'b')
363 call setreg('f', 'abcF2', "\<C-v>")
364 call setreg('g', 'abcG2', 'b10')
365 call setreg('h', 'abcH2', "\<C-v>10")
366 call setreg('I', 'abcI2')
367
368 call setreg('A', "\n")
369 call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
370 call Assert_regput('A', ['==', 'abcA2', '=='])
371
372 call setreg('B', "\n", 'c')
373 call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
374 call Assert_regput('B', ['==', '=abcB2', '='])
375
376 call setreg('C', "\n")
377 call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
378 call Assert_regput('C', ['==', 'abcC2', '', '=='])
379
380 call setreg('D', "\n", 'l')
381 call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
382 call Assert_regput('D', ['==', 'abcD2', '', '=='])
383
384 call setreg('E', "\n")
385 call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
386 call Assert_regput('E', ['==', 'abcE2', '', '=='])
387
388 call setreg('F', "\n", 'b')
389 call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
390 call Assert_regput('F', ['==', '=abcF2=', ' '])
391
392 " Setting lists with setreg()
393 call setreg('a', ['abcA3'], 'c')
394 call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
395 call Assert_regput('a', ['==', '=abcA3='])
396
397 call setreg('b', ['abcB3'], 'l')
398 call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
399 call Assert_regput('b', ['==', 'abcB3', '=='])
400
401 call setreg('c', ['abcC3'], 'b')
402 call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
403 call Assert_regput('c', ['==', '=abcC3='])
404
405 call setreg('d', ['abcD3'])
406 call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
407 call Assert_regput('d', ['==', 'abcD3', '=='])
408
409 call setreg('e', [1, 2, 'abc', 3])
410 call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
411 call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
412
413 call setreg('f', [1, 2, 3])
414 call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
415 call Assert_regput('f', ['==', '1', '2', '3', '=='])
416
417 " Appending lists with setreg()
418 call setreg('A', ['abcA3c'], 'c')
419 call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
420 call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
421
422 call setreg('b', ['abcB3l'], 'la')
423 call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
424 call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
425
426 call setreg('C', ['abcC3b'], 'lb')
427 call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
428 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
429
430 call setreg('D', ['abcD32'])
431 call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
432 call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
433
434 call setreg('A', ['abcA32'])
435 call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
436 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
437
438 call setreg('B', ['abcB3c'], 'c')
439 call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
440 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
441
442 call setreg('C', ['abcC3l'], 'l')
443 call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
444 call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
445
446 call setreg('D', ['abcD3b'], 'b')
447 call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
448 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
449
450 " Appending lists with NL with setreg()
451 call setreg('A', ["\n", 'abcA3l2'], 'l')
452 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']")
453 call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
454
455 call setreg('B', ["\n", 'abcB3c2'], 'c')
456 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']")
457 call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
458
459 call setreg('C', ["\n", 'abcC3b2'], 'b')
460 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']")
461 call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
462
463 call setreg('D', ["\n", 'abcD3b50'],'b50')
464 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']")
465 call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
466
467 " Setting lists with NLs with setreg()
468 call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
469 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']")
470 call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
471
472 call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
473 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']")
474 call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
475
476 call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
477 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']")
478 call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
479
480 call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
481 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']")
482 call Assert_regput('d', ['==', '=abcD4b-0 =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
483
484 call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
485 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']")
486 call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
487
488 " Search and expressions
489 call setreg('/', ['abc/'])
490 call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
491 call Assert_regput('/', ['==', '=abc/='])
492
493 call setreg('/', ["abc/\n"])
494 call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
495 call Assert_regput('/', ['==', "=abc/\n="])
496
497 call setreg('=', ['"abc/"'])
498 call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
499
500 call setreg('=', ["\"abc/\n\""])
501 call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
502
503 " System clipboard
504 if has('clipboard')
505 new | only!
506 call setline(1, ['clipboard contents', 'something else'])
507 " Save and restore system clipboard.
508 " If no connection to X-Server is possible, test should succeed.
509 let _clipreg = ['*', getreg('*'), getregtype('*')]
510 let _clipopt = &cb
511 let &cb='unnamed'
512 1y
513 call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
514 tabdo :windo :echo "hi"
515 2y
516 call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
517 let &cb=_clipopt
518 call call('setreg', _clipreg)
519 enew!
520 endif
521
Bram Moolenaar08f41572020-04-20 16:50:00 +0200522 " Error cases
523 call assert_fails('call setreg()', 'E119:')
524 call assert_fails('call setreg(1)', 'E119:')
525 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
526 call assert_fails('call setreg([], 2)', 'E730:')
527 call assert_fails('call setreg(1, {})', 'E731:')
528 call assert_fails('call setreg(1, 2, [])', 'E730:')
529 call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
530 call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
531 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
532endfunc
Bram Moolenaar90455cf2020-04-18 21:56:38 +0200533
Bram Moolenaar8b633132020-03-20 18:20:51 +0100534" vim: shiftwidth=2 sts=2 expandtab