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