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