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