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