1" Tests for various eval things.
2
3source view_util.vim
4
5function 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
16
17func Test_nocatch_restore_silent_emsg()
18  silent! try
19    throw 1
20  catch
21  endtry
22  echoerr 'wrong again'
23  call assert_equal('wrong again', ScreenLine(&lines))
24endfunc
25
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')
41  call assert_equal(0, mkdir(test_null_string()))
42  call assert_fails('call mkdir([])', 'E730')
43  call assert_fails('call mkdir("abc", [], [])', 'E745')
44endfunc
45
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
56
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
66
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
72
73func Test_readfile_binary()
74  new
75  call setline(1, ['one', 'two', 'three'])
76  setlocal ff=dos
77  silent write XReadfile_bin
78  let lines = 'XReadfile_bin'->readfile()
79  call assert_equal(['one', 'two', 'three'], lines)
80  let lines = readfile('XReadfile_bin', '', 2)
81  call assert_equal(['one', 'two'], lines)
82  let lines = readfile('XReadfile_bin', 'b')
83  call assert_equal(["one\r", "two\r", "three\r", ""], lines)
84  let lines = readfile('XReadfile_bin', 'b', 2)
85  call assert_equal(["one\r", "two\r"], lines)
86
87  bwipe!
88  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')
102endfunc
103
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
110
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)
138endfunc
139
140" Test fix for issue #4507
141func Test_skip_after_throw()
142  try
143    throw 'something'
144    let x = wincol() || &ts
145  catch /something/
146  endtry
147endfunc
148
149scriptversion 2
150func Test_string_concat_scriptversion2()
151  call assert_true(has('vimscript-2'))
152  let a = 'a'
153  let b = 'b'
154
155  call assert_fails('echo a . b', 'E15:')
156  call assert_fails('let a .= b', 'E985:')
157  call assert_fails('let vers = 1.2.3', 'E15:')
158
159  if has('float')
160    let f = .5
161    call assert_equal(0.5, f)
162  endif
163endfunc
164
165scriptversion 1
166func Test_string_concat_scriptversion1()
167  call assert_true(has('vimscript-1'))
168  let a = 'a'
169  let b = 'b'
170
171  echo a . b
172  let a .= b
173  let vers = 1.2.3
174  call assert_equal('123', vers)
175
176  if has('float')
177    call assert_fails('let f = .5', 'E15:')
178  endif
179endfunc
180
181scriptversion 3
182func Test_vvar_scriptversion3()
183  call assert_true(has('vimscript-3'))
184  call assert_fails('echo version', 'E121:')
185  call assert_false(exists('version'))
186  let version = 1
187  call assert_equal(1, version)
188endfunc
189
190scriptversion 2
191func Test_vvar_scriptversion2()
192  call assert_true(exists('version'))
193  echo version
194  call assert_fails('let version = 1', 'E46:')
195  call assert_equal(v:version, version)
196
197  call assert_equal(v:version, v:versionlong / 10000)
198  call assert_true(v:versionlong > 8011525)
199endfunc
200
201func Test_dict_access_scriptversion2()
202  let l:x = {'foo': 1}
203
204  call assert_false(0 && l:x.foo)
205  call assert_true(1 && l:x.foo)
206endfunc
207
208scriptversion 4
209func Test_vvar_scriptversion4()
210  call assert_true(has('vimscript-4'))
211  call assert_equal(17, 017)
212  call assert_equal(15, 0o17)
213  call assert_equal(15, 0O17)
214  call assert_equal(18, 018)
215  call assert_equal(64, 0b1'00'00'00)
216  call assert_equal(1048576, 0x10'00'00)
217  call assert_equal(32768, 0o10'00'00)
218  call assert_equal(1000000, 1'000'000)
219  call assert_equal("1234", execute("echo 1'234")->trim())
220  call assert_equal('1  234', execute("echo 1''234")->trim())
221  call assert_fails("echo 1'''234", 'E115:')
222endfunc
223
224scriptversion 1
225func Test_vvar_scriptversion1()
226  call assert_equal(15, 017)
227  call assert_equal(15, 0o17)
228  call assert_equal(15, 0O17)
229  call assert_equal(18, 018)
230endfunc
231
232func Test_scriptversion_fail()
233  call writefile(['scriptversion 9'], 'Xversionscript')
234  call assert_fails('source Xversionscript', 'E999:')
235  call delete('Xversionscript')
236endfunc
237
238func Test_execute_cmd_with_null()
239  call assert_fails('execute test_null_list()', 'E730:')
240  call assert_fails('execute test_null_dict()', 'E731:')
241  call assert_fails('execute test_null_blob()', 'E976:')
242  execute test_null_string()
243  call assert_fails('execute test_null_partial()', 'E729:')
244  call assert_fails('execute test_unknown()', 'E908:')
245  if has('job')
246    call assert_fails('execute test_null_job()', 'E908:')
247    call assert_fails('execute test_null_channel()', 'E908:')
248  endif
249endfunc
250
251func Test_numbersize()
252  " This will fail on systems without 64 bit int support or when not configured
253  " correctly.
254  call assert_equal(64, v:numbersize)
255endfunc
256
257func Assert_reg(name, type, value, valuestr, expr, exprstr)
258  call assert_equal(a:type, getregtype(a:name))
259  call assert_equal(a:value, getreg(a:name))
260  call assert_equal(a:valuestr, string(getreg(a:name, 0, 1)))
261  call assert_equal(a:expr, getreg(a:name, 1))
262  call assert_equal(a:exprstr, string(getreg(a:name, 1, 1)))
263endfunc
264
265func Test_let_register()
266  let @" = 'abc'
267  call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']")
268  let @" = "abc\n"
269  call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']")
270  let @" = "abc\<C-m>"
271  call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']")
272  let @= = '"abc"'
273  call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']")
274endfunc
275
276func Assert_regput(name, result)
277  new
278  execute "silent normal! o==\n==\e\"" . a:name . "P"
279  call assert_equal(a:result, getline(2, line('$')))
280  bwipe!
281endfunc
282
283func Test_setreg_basic()
284  call setreg('a', 'abcA', 'c')
285  call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']")
286  call Assert_regput('a', ['==', '=abcA='])
287
288  call setreg('A', 'abcAc', 'c')
289  call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']")
290  call Assert_regput('a', ['==', '=abcAabcAc='])
291
292  call setreg('A', 'abcAl', 'l')
293  call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']")
294  call Assert_regput('a', ['==', 'abcAabcAcabcAl', '=='])
295
296  call setreg('A', 'abcAc2','c')
297  call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']")
298  call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2='])
299
300  call setreg('b', 'abcB', 'v')
301  call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']")
302  call Assert_regput('b', ['==', '=abcB='])
303
304  call setreg('b', 'abcBc', 'ca')
305  call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']")
306  call Assert_regput('b', ['==', '=abcBabcBc='])
307
308  call setreg('b', 'abcBb', 'ba')
309  call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']")
310  call Assert_regput('b', ['==', '=abcBabcBcabcBb='])
311
312  call setreg('b', 'abcBc2','ca')
313  call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']")
314  call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2='])
315
316  call setreg('b', 'abcBb2','b50a')
317  call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']")
318  call Assert_regput('b', ['==', '=abcBabcBcabcBb                                    =', ' abcBc2abcBb2'])
319
320  call setreg('c', 'abcC', 'l')
321  call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']")
322  call Assert_regput('c', ['==', 'abcC', '=='])
323
324  call setreg('C', 'abcCl', 'l')
325  call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']")
326  call Assert_regput('c', ['==', 'abcC', 'abcCl', '=='])
327
328  call setreg('C', 'abcCc', 'c')
329  call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']")
330  call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc='])
331
332  call setreg('d', 'abcD', 'V')
333  call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']")
334  call Assert_regput('d', ['==', 'abcD', '=='])
335
336  call setreg('D', 'abcDb', 'b')
337  call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']")
338  call Assert_regput('d', ['==', '=abcD =', ' abcDb'])
339
340  call setreg('e', 'abcE', 'b')
341  call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']")
342  call Assert_regput('e', ['==', '=abcE='])
343
344  call setreg('E', 'abcEb', 'b')
345  call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']")
346  call Assert_regput('e', ['==', '=abcE =', ' abcEb'])
347
348  call setreg('E', 'abcEl', 'l')
349  call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']")
350  call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '=='])
351
352  call setreg('f', 'abcF', "\<C-v>")
353  call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']")
354  call Assert_regput('f', ['==', '=abcF='])
355
356  call setreg('F', 'abcFc', 'c')
357  call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']")
358  call Assert_regput('f', ['==', '=abcF', 'abcFc='])
359
360  call setreg('g', 'abcG', 'b10')
361  call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']")
362  call Assert_regput('g', ['==', '=abcG      ='])
363
364  call setreg('h', 'abcH', "\<C-v>10")
365  call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']")
366  call Assert_regput('h', ['==', '=abcH      ='])
367
368  call setreg('I', 'abcI')
369  call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']")
370  call Assert_regput('I', ['==', '=abcI='])
371
372  " Appending NL with setreg()
373  call setreg('a', 'abcA2', 'c')
374  call setreg('b', 'abcB2', 'v')
375  call setreg('c', 'abcC2', 'l')
376  call setreg('d', 'abcD2', 'V')
377  call setreg('e', 'abcE2', 'b')
378  call setreg('f', 'abcF2', "\<C-v>")
379  call setreg('g', 'abcG2', 'b10')
380  call setreg('h', 'abcH2', "\<C-v>10")
381  call setreg('I', 'abcI2')
382
383  call setreg('A', "\n")
384  call Assert_reg('A', 'V', "abcA2\n", "['abcA2']", "abcA2\n", "['abcA2']")
385  call Assert_regput('A', ['==', 'abcA2', '=='])
386
387  call setreg('B', "\n", 'c')
388  call Assert_reg('B', 'v', "abcB2\n", "['abcB2', '']", "abcB2\n", "['abcB2', '']")
389  call Assert_regput('B', ['==', '=abcB2', '='])
390
391  call setreg('C', "\n")
392  call Assert_reg('C', 'V', "abcC2\n\n", "['abcC2', '']", "abcC2\n\n", "['abcC2', '']")
393  call Assert_regput('C', ['==', 'abcC2', '', '=='])
394
395  call setreg('D', "\n", 'l')
396  call Assert_reg('D', 'V', "abcD2\n\n", "['abcD2', '']", "abcD2\n\n", "['abcD2', '']")
397  call Assert_regput('D', ['==', 'abcD2', '', '=='])
398
399  call setreg('E', "\n")
400  call Assert_reg('E', 'V', "abcE2\n\n", "['abcE2', '']", "abcE2\n\n", "['abcE2', '']")
401  call Assert_regput('E', ['==', 'abcE2', '', '=='])
402
403  call setreg('F', "\n", 'b')
404  call Assert_reg('F', "\<C-V>0", "abcF2\n", "['abcF2', '']", "abcF2\n", "['abcF2', '']")
405  call Assert_regput('F', ['==', '=abcF2=', ' '])
406
407  " Setting lists with setreg()
408  call setreg('a', ['abcA3'], 'c')
409  call Assert_reg('a', 'v', "abcA3", "['abcA3']", "abcA3", "['abcA3']")
410  call Assert_regput('a', ['==', '=abcA3='])
411
412  call setreg('b', ['abcB3'], 'l')
413  call Assert_reg('b', 'V', "abcB3\n", "['abcB3']", "abcB3\n", "['abcB3']")
414  call Assert_regput('b', ['==', 'abcB3', '=='])
415
416  call setreg('c', ['abcC3'], 'b')
417  call Assert_reg('c', "\<C-V>5", "abcC3", "['abcC3']", "abcC3", "['abcC3']")
418  call Assert_regput('c', ['==', '=abcC3='])
419
420  call setreg('d', ['abcD3'])
421  call Assert_reg('d', 'V', "abcD3\n", "['abcD3']", "abcD3\n", "['abcD3']")
422  call Assert_regput('d', ['==', 'abcD3', '=='])
423
424  call setreg('e', [1, 2, 'abc', 3])
425  call Assert_reg('e', 'V', "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']", "1\n2\nabc\n3\n", "['1', '2', 'abc', '3']")
426  call Assert_regput('e', ['==', '1', '2', 'abc', '3', '=='])
427
428  call setreg('f', [1, 2, 3])
429  call Assert_reg('f', 'V', "1\n2\n3\n", "['1', '2', '3']", "1\n2\n3\n", "['1', '2', '3']")
430  call Assert_regput('f', ['==', '1', '2', '3', '=='])
431
432  " Appending lists with setreg()
433  call setreg('A', ['abcA3c'], 'c')
434  call Assert_reg('A', 'v', "abcA3\nabcA3c", "['abcA3', 'abcA3c']", "abcA3\nabcA3c", "['abcA3', 'abcA3c']")
435  call Assert_regput('A', ['==', '=abcA3', 'abcA3c='])
436
437  call setreg('b', ['abcB3l'], 'la')
438  call Assert_reg('b', 'V', "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']", "abcB3\nabcB3l\n", "['abcB3', 'abcB3l']")
439  call Assert_regput('b', ['==', 'abcB3', 'abcB3l', '=='])
440
441  call setreg('C', ['abcC3b'], 'lb')
442  call Assert_reg('C', "\<C-V>6", "abcC3\nabcC3b", "['abcC3', 'abcC3b']", "abcC3\nabcC3b", "['abcC3', 'abcC3b']")
443  call Assert_regput('C', ['==', '=abcC3 =', ' abcC3b'])
444
445  call setreg('D', ['abcD32'])
446  call Assert_reg('D', 'V', "abcD3\nabcD32\n", "['abcD3', 'abcD32']", "abcD3\nabcD32\n", "['abcD3', 'abcD32']")
447  call Assert_regput('D', ['==', 'abcD3', 'abcD32', '=='])
448
449  call setreg('A', ['abcA32'])
450  call Assert_reg('A', 'V', "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']", "abcA3\nabcA3c\nabcA32\n", "['abcA3', 'abcA3c', 'abcA32']")
451  call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', '=='])
452
453  call setreg('B', ['abcB3c'], 'c')
454  call Assert_reg('B', 'v', "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']", "abcB3\nabcB3l\nabcB3c", "['abcB3', 'abcB3l', 'abcB3c']")
455  call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c='])
456
457  call setreg('C', ['abcC3l'], 'l')
458  call Assert_reg('C', 'V', "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']", "abcC3\nabcC3b\nabcC3l\n", "['abcC3', 'abcC3b', 'abcC3l']")
459  call Assert_regput('C', ['==', 'abcC3', 'abcC3b', 'abcC3l', '=='])
460
461  call setreg('D', ['abcD3b'], 'b')
462  call Assert_reg('D', "\<C-V>6", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']", "abcD3\nabcD32\nabcD3b", "['abcD3', 'abcD32', 'abcD3b']")
463  call Assert_regput('D', ['==', '=abcD3 =', ' abcD32', ' abcD3b'])
464
465  " Appending lists with NL with setreg()
466  call setreg('A', ["\n", 'abcA3l2'], 'l')
467  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']")
468  call Assert_regput('A', ['==', 'abcA3', 'abcA3c', 'abcA32', "\n", 'abcA3l2', '=='])
469
470  call setreg('B', ["\n", 'abcB3c2'], 'c')
471  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']")
472  call Assert_regput('B', ['==', '=abcB3', 'abcB3l', 'abcB3c', "\n", 'abcB3c2='])
473
474  call setreg('C', ["\n", 'abcC3b2'], 'b')
475  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']")
476  call Assert_regput('C', ['==', '=abcC3  =', ' abcC3b', ' abcC3l', " \n", ' abcC3b2'])
477
478  call setreg('D', ["\n", 'abcD3b50'],'b50')
479  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']")
480  call Assert_regput('D', ['==', '=abcD3                                             =', ' abcD32', ' abcD3b', " \n", ' abcD3b50'])
481
482  " Setting lists with NLs with setreg()
483  call setreg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])
484  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']")
485  call Assert_regput('a', ['==', 'abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2", '=='])
486
487  call setreg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')
488  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']")
489  call Assert_regput('b', ['==', '=abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2="])
490
491  call setreg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')
492  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']")
493  call Assert_regput('c', ['==', 'abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2", '=='])
494
495  call setreg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')
496  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']")
497  call Assert_regput('d', ['==', '=abcD4b-0           =', " \n", " abcD4b-2\n", " \nabcD4b-3", " abcD4b-4\nabcD4b-4-2"])
498
499  call setreg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')
500  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']")
501  call Assert_regput('e', ['==', '=abcE4b10-0=', " \n", " abcE4b10-2\n", " \nabcE4b10-3", " abcE4b10-4\nabcE4b10-4-2"])
502
503  " Search and expressions
504  call setreg('/', ['abc/'])
505  call Assert_reg('/', 'v', "abc/", "['abc/']", "abc/", "['abc/']")
506  call Assert_regput('/', ['==', '=abc/='])
507
508  call setreg('/', ["abc/\n"])
509  call Assert_reg('/', 'v', "abc/\n", "['abc/\n']", "abc/\n", "['abc/\n']")
510  call Assert_regput('/', ['==', "=abc/\n="])
511
512  call setreg('=', ['"abc/"'])
513  call Assert_reg('=', 'v', "abc/", "['abc/']", '"abc/"', "['\"abc/\"']")
514
515  call setreg('=', ["\"abc/\n\""])
516  call Assert_reg('=', 'v', "abc/\n", "['abc/\n']", "\"abc/\n\"", "['\"abc/\n\"']")
517
518  " System clipboard
519  if has('clipboard')
520    new | only!
521    call setline(1, ['clipboard contents', 'something else'])
522    " Save and restore system clipboard.
523    " If no connection to X-Server is possible, test should succeed.
524    let _clipreg = ['*', getreg('*'), getregtype('*')]
525    let _clipopt = &cb
526    let &cb='unnamed'
527    1y
528    call Assert_reg('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']")
529    tabdo :windo :echo "hi"
530    2y
531    call Assert_reg('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']")
532    let &cb=_clipopt
533    call call('setreg', _clipreg)
534    enew!
535  endif
536
537  " Error cases
538  call assert_fails('call setreg()', 'E119:')
539  call assert_fails('call setreg(1)', 'E119:')
540  call assert_fails('call setreg(1, 2, 3, 4)', 'E118:')
541  call assert_fails('call setreg([], 2)', 'E730:')
542  call assert_fails('call setreg(1, 2, [])', 'E730:')
543  call assert_fails('call setreg("/", ["1", "2"])', 'E883:')
544  call assert_fails('call setreg("=", ["1", "2"])', 'E883:')
545  call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
546endfunc
547
548func Test_curly_assignment()
549  let s:svar = 'svar'
550  let g:gvar = 'gvar'
551  let lname = 'gvar'
552  let gname = 'gvar'
553  let {'s:'.lname} = {'g:'.gname}
554  call assert_equal('gvar', s:gvar)
555  let s:gvar = ''
556  let { 's:'.lname } = { 'g:'.gname }
557  call assert_equal('gvar', s:gvar)
558  let s: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
565  unlet s:svar
566  unlet s:gvar
567  unlet g:gvar
568endfunc
569
570" vim: shiftwidth=2 sts=2 expandtab
571