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