123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737 |
- -- Test for various eval features.
- local helpers = require('test.functional.helpers')(after_each)
- local feed, insert, source = helpers.feed, helpers.insert, helpers.source
- local clear, command, expect = helpers.clear, helpers.command, helpers.expect
- local eq, eval, write_file = helpers.eq, helpers.eval, helpers.write_file
- local poke_eventloop = helpers.poke_eventloop
- local exc_exec = helpers.exc_exec
- local dedent = helpers.dedent
- describe('eval', function()
- setup(function()
- write_file('test_eval_setup.vim', [[
- set noswapfile
- lang C
- fun AppendRegContents(reg)
- call AppendRegParts(a:reg, getregtype(a:reg), getreg(a:reg), string(getreg(a:reg, 0, 1)), getreg(a:reg, 1), string(getreg(a:reg, 1, 1)))
- endfun
- fun AppendRegParts(reg, type, cont, strcont, cont1, strcont1)
- call append('$', printf('%s: type %s; value: %s (%s), expr: %s (%s)', a:reg, a:type, a:cont, a:strcont, a:cont1, a:strcont1))
- endfun
- command -nargs=? AR :call AppendRegContents(<q-args>)
- fun SetReg(...)
- call call('setreg', a:000)
- call append('$', printf('{{{2 setreg(%s)', string(a:000)[1:-2]))
- call AppendRegContents(a:1)
- if a:1 isnot# '='
- execute "silent normal! Go==\n==\e\"".a:1."P"
- endif
- endfun
- ]])
- end)
- before_each(clear)
- teardown(function()
- os.remove('test_eval_setup.vim')
- end)
- it(':let', function()
- command('so test_eval_setup.vim')
- command([[let @" = 'abc']])
- command('AR "')
- command([[let @" = "abc\n"]])
- source('AR "')
- command([[let @" = "abc\<C-m>"]])
- command('AR "')
- command([[let @= = '"abc"']])
- command('AR =')
- expect([[
- ": type v; value: abc (['abc']), expr: abc (['abc'])
- ": type V; value: abc]].."\000 (['abc']), expr: abc\000"..[[ (['abc'])
- ": type V; value: abc]].."\r\000 (['abc\r']), expr: abc\r\000 (['abc\r"..[['])
- =: type v; value: abc (['abc']), expr: "abc" (['"abc"'])]])
- end)
- it('basic setreg() tests', function()
- command('so test_eval_setup.vim')
- insert('{{{1 Basic setreg tests')
- command([[call SetReg('a', 'abcA', 'c')]])
- command([[call SetReg('b', 'abcB', 'v')]])
- command([[call SetReg('c', 'abcC', 'l')]])
- command([[call SetReg('d', 'abcD', 'V')]])
- command([[call SetReg('e', 'abcE', 'b')]])
- command([[call SetReg('f', 'abcF', "\<C-v>")]])
- command([[call SetReg('g', 'abcG', 'b10')]])
- command([[call SetReg('h', 'abcH', "\<C-v>10")]])
- command([[call SetReg('I', 'abcI')]])
- feed('Go{{{1 Appending single lines with setreg()<esc>')
- poke_eventloop()
- command([[call SetReg('A', 'abcAc', 'c')]])
- command([[call SetReg('A', 'abcAl', 'l')]])
- command([[call SetReg('A', 'abcAc2','c')]])
- command([[call SetReg('b', 'abcBc', 'ca')]])
- command([[call SetReg('b', 'abcBb', 'ba')]])
- command([[call SetReg('b', 'abcBc2','ca')]])
- command([[call SetReg('b', 'abcBb2','b50a')]])
- command([[call SetReg('C', 'abcCl', 'l')]])
- command([[call SetReg('C', 'abcCc', 'c')]])
- command([[call SetReg('D', 'abcDb', 'b')]])
- command([[call SetReg('E', 'abcEb', 'b')]])
- command([[call SetReg('E', 'abcEl', 'l')]])
- command([[call SetReg('F', 'abcFc', 'c')]])
- expect([[
- {{{1 Basic setreg tests
- {{{2 setreg('a', 'abcA', 'c')
- a: type v; value: abcA (['abcA']), expr: abcA (['abcA'])
- ==
- =abcA=
- {{{2 setreg('b', 'abcB', 'v')
- b: type v; value: abcB (['abcB']), expr: abcB (['abcB'])
- ==
- =abcB=
- {{{2 setreg('c', 'abcC', 'l')
- c: type V; value: abcC]].."\000 (['abcC']), expr: abcC\000"..[[ (['abcC'])
- ==
- abcC
- ==
- {{{2 setreg('d', 'abcD', 'V')
- d: type V; value: abcD]].."\000 (['abcD']), expr: abcD\000"..[[ (['abcD'])
- ==
- abcD
- ==
- {{{2 setreg('e', 'abcE', 'b')
- e: type ]]..'\022'..[[4; value: abcE (['abcE']), expr: abcE (['abcE'])
- ==
- =abcE=
- {{{2 setreg('f', 'abcF', ']]..'\022'..[[')
- f: type ]]..'\022'..[[4; value: abcF (['abcF']), expr: abcF (['abcF'])
- ==
- =abcF=
- {{{2 setreg('g', 'abcG', 'b10')
- g: type ]]..'\022'..[[10; value: abcG (['abcG']), expr: abcG (['abcG'])
- ==
- =abcG =
- {{{2 setreg('h', 'abcH', ']]..'\022'..[[10')
- h: type ]]..'\022'..[[10; value: abcH (['abcH']), expr: abcH (['abcH'])
- ==
- =abcH =
- {{{2 setreg('I', 'abcI')
- I: type v; value: abcI (['abcI']), expr: abcI (['abcI'])
- ==
- =abcI=
- {{{1 Appending single lines with setreg()
- {{{2 setreg('A', 'abcAc', 'c')
- A: type v; value: abcAabcAc (['abcAabcAc']), expr: abcAabcAc (['abcAabcAc'])
- ==
- =abcAabcAc=
- {{{2 setreg('A', 'abcAl', 'l')
- A: type V; value: abcAabcAcabcAl]].."\000 (['abcAabcAcabcAl']), expr: abcAabcAcabcAl\000"..[[ (['abcAabcAcabcAl'])
- ==
- abcAabcAcabcAl
- ==
- {{{2 setreg('A', 'abcAc2', 'c')
- A: type v; value: abcAabcAcabcAl]].."\000abcAc2 (['abcAabcAcabcAl', 'abcAc2']), expr: abcAabcAcabcAl\000"..[[abcAc2 (['abcAabcAcabcAl', 'abcAc2'])
- ==
- =abcAabcAcabcAl
- abcAc2=
- {{{2 setreg('b', 'abcBc', 'ca')
- b: type v; value: abcBabcBc (['abcBabcBc']), expr: abcBabcBc (['abcBabcBc'])
- ==
- =abcBabcBc=
- {{{2 setreg('b', 'abcBb', 'ba')
- b: type ]]..'\022'..[[5; value: abcBabcBcabcBb (['abcBabcBcabcBb']), expr: abcBabcBcabcBb (['abcBabcBcabcBb'])
- ==
- =abcBabcBcabcBb=
- {{{2 setreg('b', 'abcBc2', 'ca')
- b: type v; value: abcBabcBcabcBb]].."\000abcBc2 (['abcBabcBcabcBb', 'abcBc2']), expr: abcBabcBcabcBb\000"..[[abcBc2 (['abcBabcBcabcBb', 'abcBc2'])
- ==
- =abcBabcBcabcBb
- abcBc2=
- {{{2 setreg('b', 'abcBb2', 'b50a')
- b: type ]].."\02250; value: abcBabcBcabcBb\000abcBc2abcBb2 (['abcBabcBcabcBb', 'abcBc2abcBb2']), expr: abcBabcBcabcBb\000"..[[abcBc2abcBb2 (['abcBabcBcabcBb', 'abcBc2abcBb2'])
- ==
- =abcBabcBcabcBb =
- abcBc2abcBb2
- {{{2 setreg('C', 'abcCl', 'l')
- C: type V; value: abcC]].."\000abcCl\000 (['abcC', 'abcCl']), expr: abcC\000abcCl\000"..[[ (['abcC', 'abcCl'])
- ==
- abcC
- abcCl
- ==
- {{{2 setreg('C', 'abcCc', 'c')
- C: type v; value: abcC]].."\000abcCl\000abcCc (['abcC', 'abcCl', 'abcCc']), expr: abcC\000abcCl\000"..[[abcCc (['abcC', 'abcCl', 'abcCc'])
- ==
- =abcC
- abcCl
- abcCc=
- {{{2 setreg('D', 'abcDb', 'b')
- D: type ]].."\0225; value: abcD\000abcDb (['abcD', 'abcDb']), expr: abcD\000"..[[abcDb (['abcD', 'abcDb'])
- ==
- =abcD =
- abcDb
- {{{2 setreg('E', 'abcEb', 'b')
- E: type ]].."\0225; value: abcE\000abcEb (['abcE', 'abcEb']), expr: abcE\000"..[[abcEb (['abcE', 'abcEb'])
- ==
- =abcE =
- abcEb
- {{{2 setreg('E', 'abcEl', 'l')
- E: type V; value: abcE]].."\000abcEb\000abcEl\000 (['abcE', 'abcEb', 'abcEl']), expr: abcE\000abcEb\000abcEl\000"..[[ (['abcE', 'abcEb', 'abcEl'])
- ==
- abcE
- abcEb
- abcEl
- ==
- {{{2 setreg('F', 'abcFc', 'c')
- F: type v; value: abcF]].."\000abcFc (['abcF', 'abcFc']), expr: abcF\000"..[[abcFc (['abcF', 'abcFc'])
- ==
- =abcF
- abcFc=]])
- end)
- it('appending NL with setreg()', function()
- command('so test_eval_setup.vim')
- command([[call setreg('a', 'abcA2', 'c')]])
- command([[call setreg('b', 'abcB2', 'v')]])
- command([[call setreg('c', 'abcC2', 'l')]])
- command([[call setreg('d', 'abcD2', 'V')]])
- command([[call setreg('e', 'abcE2', 'b')]])
- command([[call setreg('f', 'abcF2', "\<C-v>")]])
- -- These registers where set like this in the old test_eval.in but never
- -- copied to the output buffer with SetReg(). They do not appear in
- -- test_eval.ok. Therefore they are commented out.
- --execute([[call setreg('g', 'abcG2', 'b10')]])
- --execute([[call setreg('h', 'abcH2', "\<C-v>10")]])
- --execute([[call setreg('I', 'abcI2')]])
- command([[call SetReg('A', "\n")]])
- command([[call SetReg('B', "\n", 'c')]])
- command([[call SetReg('C', "\n")]])
- command([[call SetReg('D', "\n", 'l')]])
- command([[call SetReg('E', "\n")]])
- command([[call SetReg('F', "\n", 'b')]])
- expect([[
- {{{2 setreg('A', ']]..'\000'..[[')
- A: type V; value: abcA2]].."\000 (['abcA2']), expr: abcA2\000"..[[ (['abcA2'])
- ==
- abcA2
- ==
- {{{2 setreg('B', ']]..'\000'..[[', 'c')
- B: type v; value: abcB2]].."\000 (['abcB2', '']), expr: abcB2\000"..[[ (['abcB2', ''])
- ==
- =abcB2
- =
- {{{2 setreg('C', ']]..'\000'..[[')
- C: type V; value: abcC2]].."\000\000 (['abcC2', '']), expr: abcC2\000\000"..[[ (['abcC2', ''])
- ==
- abcC2
- ==
- {{{2 setreg('D', ']]..'\000'..[[', 'l')
- D: type V; value: abcD2]].."\000\000 (['abcD2', '']), expr: abcD2\000\000"..[[ (['abcD2', ''])
- ==
- abcD2
- ==
- {{{2 setreg('E', ']]..'\000'..[[')
- E: type V; value: abcE2]].."\000\000 (['abcE2', '']), expr: abcE2\000\000"..[[ (['abcE2', ''])
- ==
- abcE2
- ==
- {{{2 setreg('F', ']]..'\000'..[[', 'b')
- F: type ]].."\0220; value: abcF2\000 (['abcF2', '']), expr: abcF2\000"..[[ (['abcF2', ''])
- ==
- =abcF2=
- ]])
- end)
- it('setting and appending list with setreg()', function()
- command('so test_eval_setup.vim')
- command([[$put ='{{{1 Setting lists with setreg()']])
- command([=[call SetReg('a', ['abcA3'], 'c')]=])
- command([=[call SetReg('b', ['abcB3'], 'l')]=])
- command([=[call SetReg('c', ['abcC3'], 'b')]=])
- command([=[call SetReg('d', ['abcD3'])]=])
- command([=[call SetReg('e', [1, 2, 'abc', 3])]=])
- command([=[call SetReg('f', [1, 2, 3])]=])
- command([[$put ='{{{1 Appending lists with setreg()']])
- command([=[call SetReg('A', ['abcA3c'], 'c')]=])
- command([=[call SetReg('b', ['abcB3l'], 'la')]=])
- command([=[call SetReg('C', ['abcC3b'], 'lb')]=])
- command([=[call SetReg('D', ['abcD32'])]=])
- command([=[call SetReg('A', ['abcA32'])]=])
- command([=[call SetReg('B', ['abcB3c'], 'c')]=])
- command([=[call SetReg('C', ['abcC3l'], 'l')]=])
- command([=[call SetReg('D', ['abcD3b'], 'b')]=])
- expect([[
- {{{1 Setting lists with setreg()
- {{{2 setreg('a', ['abcA3'], 'c')
- a: type v; value: abcA3 (['abcA3']), expr: abcA3 (['abcA3'])
- ==
- =abcA3=
- {{{2 setreg('b', ['abcB3'], 'l')
- b: type V; value: abcB3]].."\000 (['abcB3']), expr: abcB3\000"..[[ (['abcB3'])
- ==
- abcB3
- ==
- {{{2 setreg('c', ['abcC3'], 'b')
- c: type ]]..'\022'..[[5; value: abcC3 (['abcC3']), expr: abcC3 (['abcC3'])
- ==
- =abcC3=
- {{{2 setreg('d', ['abcD3'])
- d: type V; value: abcD3]].."\000 (['abcD3']), expr: abcD3\000"..[[ (['abcD3'])
- ==
- abcD3
- ==
- {{{2 setreg('e', [1, 2, 'abc', 3])
- e: type V; value: 1]].."\0002\000abc\0003\000 (['1', '2', 'abc', '3']), expr: 1\0002\000abc\0003\000"..[[ (['1', '2', 'abc', '3'])
- ==
- 1
- 2
- abc
- 3
- ==
- {{{2 setreg('f', [1, 2, 3])
- f: type V; value: 1]].."\0002\0003\000 (['1', '2', '3']), expr: 1\0002\0003\000"..[[ (['1', '2', '3'])
- ==
- 1
- 2
- 3
- ==
- {{{1 Appending lists with setreg()
- {{{2 setreg('A', ['abcA3c'], 'c')
- A: type v; value: abcA3]].."\000abcA3c (['abcA3', 'abcA3c']), expr: abcA3\000"..[[abcA3c (['abcA3', 'abcA3c'])
- ==
- =abcA3
- abcA3c=
- {{{2 setreg('b', ['abcB3l'], 'la')
- b: type V; value: abcB3]].."\000abcB3l\000 (['abcB3', 'abcB3l']), expr: abcB3\000abcB3l\000"..[[ (['abcB3', 'abcB3l'])
- ==
- abcB3
- abcB3l
- ==
- {{{2 setreg('C', ['abcC3b'], 'lb')
- C: type ]].."\0226; value: abcC3\000abcC3b (['abcC3', 'abcC3b']), expr: abcC3\000"..[[abcC3b (['abcC3', 'abcC3b'])
- ==
- =abcC3 =
- abcC3b
- {{{2 setreg('D', ['abcD32'])
- D: type V; value: abcD3]].."\000abcD32\000 (['abcD3', 'abcD32']), expr: abcD3\000abcD32\000"..[[ (['abcD3', 'abcD32'])
- ==
- abcD3
- abcD32
- ==
- {{{2 setreg('A', ['abcA32'])
- A: type V; value: abcA3]].."\000abcA3c\000abcA32\000 (['abcA3', 'abcA3c', 'abcA32']), expr: abcA3\000abcA3c\000abcA32\000"..[[ (['abcA3', 'abcA3c', 'abcA32'])
- ==
- abcA3
- abcA3c
- abcA32
- ==
- {{{2 setreg('B', ['abcB3c'], 'c')
- B: type v; value: abcB3]].."\000abcB3l\000abcB3c (['abcB3', 'abcB3l', 'abcB3c']), expr: abcB3\000abcB3l\000"..[[abcB3c (['abcB3', 'abcB3l', 'abcB3c'])
- ==
- =abcB3
- abcB3l
- abcB3c=
- {{{2 setreg('C', ['abcC3l'], 'l')
- C: type V; value: abcC3]].."\000abcC3b\000abcC3l\000 (['abcC3', 'abcC3b', 'abcC3l']), expr: abcC3\000abcC3b\000abcC3l\000"..[[ (['abcC3', 'abcC3b', 'abcC3l'])
- ==
- abcC3
- abcC3b
- abcC3l
- ==
- {{{2 setreg('D', ['abcD3b'], 'b')
- D: type ]].."\0226; value: abcD3\000abcD32\000abcD3b (['abcD3', 'abcD32', 'abcD3b']), expr: abcD3\000abcD32\000"..[[abcD3b (['abcD3', 'abcD32', 'abcD3b'])
- ==
- =abcD3 =
- abcD32
- abcD3b]])
- -- From now on we delete the buffer contents after each expect() to make
- -- the next expect() easier to write. This is necessary because null
- -- bytes on a line by itself don't play well together with the dedent
- -- function used in expect().
- command('%delete')
- command([[$put ='{{{1 Appending lists with NL with setreg()']])
- command([=[call SetReg('A', ["\n", 'abcA3l2'], 'l')]=])
- expect(
- '\n'..
- '{{{1 Appending lists with NL with setreg()\n'..
- "{{{2 setreg('A', ['\000', 'abcA3l2'], 'l')\n"..
- "A: type V; value: abcA3\000abcA3c\000abcA32\000\000\000abcA3l2\000 (['abcA3', 'abcA3c', 'abcA32', '\000', 'abcA3l2']), expr: abcA3\000abcA3c\000abcA32\000\000\000abcA3l2\000 (['abcA3', 'abcA3c', 'abcA32', '\000', 'abcA3l2'])\n"..
- '==\n'..
- 'abcA3\n'..
- 'abcA3c\n'..
- 'abcA32\n'..
- '\000\n'..
- 'abcA3l2\n'..
- '==')
- command('%delete')
- command([=[call SetReg('B', ["\n", 'abcB3c2'], 'c')]=])
- expect(
- '\n'..
- "{{{2 setreg('B', ['\000', 'abcB3c2'], 'c')\n"..
- "B: type v; value: abcB3\000abcB3l\000abcB3c\000\000\000abcB3c2 (['abcB3', 'abcB3l', 'abcB3c', '\000', 'abcB3c2']), expr: abcB3\000abcB3l\000abcB3c\000\000\000abcB3c2 (['abcB3', 'abcB3l', 'abcB3c', '\000', 'abcB3c2'])\n"..
- '==\n'..
- '=abcB3\n'..
- 'abcB3l\n'..
- 'abcB3c\n'..
- '\000\n'..
- 'abcB3c2=')
- command('%delete')
- command([=[call SetReg('C', ["\n", 'abcC3b2'], 'b')]=])
- expect(
- '\n'..
- "{{{2 setreg('C', ['\000', 'abcC3b2'], 'b')\n"..
- "C: type \0227; value: abcC3\000abcC3b\000abcC3l\000\000\000abcC3b2 (['abcC3', 'abcC3b', 'abcC3l', '\000', 'abcC3b2']), expr: abcC3\000abcC3b\000abcC3l\000\000\000abcC3b2 (['abcC3', 'abcC3b', 'abcC3l', '\000', 'abcC3b2'])\n"..
- '==\n'..
- '=abcC3 =\n'..
- ' abcC3b\n'..
- ' abcC3l\n'..
- ' \000\n'..
- ' abcC3b2')
- command('%delete')
- command([=[call SetReg('D', ["\n", 'abcD3b50'],'b50')]=])
- expect(
- '\n'..
- "{{{2 setreg('D', ['\000', 'abcD3b50'], 'b50')\n"..
- "D: type \02250; value: abcD3\000abcD32\000abcD3b\000\000\000abcD3b50 (['abcD3', 'abcD32', 'abcD3b', '\000', 'abcD3b50']), expr: abcD3\000abcD32\000abcD3b\000\000\000abcD3b50 (['abcD3', 'abcD32', 'abcD3b', '\000', 'abcD3b50'])\n"..
- '==\n'..
- '=abcD3 =\n'..
- ' abcD32\n'..
- ' abcD3b\n'..
- ' \000\n'..
- ' abcD3b50')
- end)
- -- The tests for setting lists with NLs are split into separate it() blocks
- -- to make the expect() calls easier to write. Otherwise the null byte can
- -- make trouble on a line on its own.
- it('setting lists with NLs with setreg(), part 1', function()
- command('so test_eval_setup.vim')
- command([=[call SetReg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])]=])
- expect(
- '\n'..
- "{{{2 setreg('a', ['abcA4-0', '\000', 'abcA4-2\000', '\000abcA4-3', 'abcA4-4\000abcA4-4-2'])\n"..
- "a: type V; value: abcA4-0\000\000\000abcA4-2\000\000\000abcA4-3\000abcA4-4\000abcA4-4-2\000 (['abcA4-0', '\000', 'abcA4-2\000', '\000abcA4-3', 'abcA4-4\000abcA4-4-2']), expr: abcA4-0\000\000\000abcA4-2\000\000\000abcA4-3\000abcA4-4\000abcA4-4-2\000 (['abcA4-0', '\000', 'abcA4-2\000', '\000abcA4-3', 'abcA4-4\000abcA4-4-2'])\n"..
- '==\n'..
- 'abcA4-0\n'..
- '\000\n'..
- 'abcA4-2\000\n'..
- '\000abcA4-3\n'..
- 'abcA4-4\000abcA4-4-2\n'..
- '==')
- end)
- it('setting lists with NLs with setreg(), part 2', function()
- command('so test_eval_setup.vim')
- command([=[call SetReg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')]=])
- expect(
- '\n'..
- "{{{2 setreg('b', ['abcB4c-0', '\000', 'abcB4c-2\000', '\000abcB4c-3', 'abcB4c-4\000abcB4c-4-2'], 'c')\n"..
- "b: type v; value: abcB4c-0\000\000\000abcB4c-2\000\000\000abcB4c-3\000abcB4c-4\000abcB4c-4-2 (['abcB4c-0', '\000', 'abcB4c-2\000', '\000abcB4c-3', 'abcB4c-4\000abcB4c-4-2']), expr: abcB4c-0\000\000\000abcB4c-2\000\000\000abcB4c-3\000abcB4c-4\000abcB4c-4-2 (['abcB4c-0', '\000', 'abcB4c-2\000', '\000abcB4c-3', 'abcB4c-4\000abcB4c-4-2'])\n"..
- '==\n'..
- '=abcB4c-0\n'..
- '\000\n'..
- 'abcB4c-2\000\n'..
- '\000abcB4c-3\n'..
- 'abcB4c-4\000abcB4c-4-2=')
- end)
- it('setting lists with NLs with setreg(), part 3', function()
- command('so test_eval_setup.vim')
- command([=[call SetReg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')]=])
- expect(
- '\n'..
- "{{{2 setreg('c', ['abcC4l-0', '\000', 'abcC4l-2\000', '\000abcC4l-3', 'abcC4l-4\000abcC4l-4-2'], 'l')\n"..
- "c: type V; value: abcC4l-0\000\000\000abcC4l-2\000\000\000abcC4l-3\000abcC4l-4\000abcC4l-4-2\000 (['abcC4l-0', '\000', 'abcC4l-2\000', '\000abcC4l-3', 'abcC4l-4\000abcC4l-4-2']), expr: abcC4l-0\000\000\000abcC4l-2\000\000\000abcC4l-3\000abcC4l-4\000abcC4l-4-2\000 (['abcC4l-0', '\000', 'abcC4l-2\000', '\000abcC4l-3', 'abcC4l-4\000abcC4l-4-2'])\n"..
- '==\n'..
- 'abcC4l-0\n'..
- '\000\n'..
- 'abcC4l-2\000\n'..
- '\000abcC4l-3\n'..
- 'abcC4l-4\000abcC4l-4-2\n'..
- '==')
- end)
- it('setting lists with NLs with setreg(), part 4', function()
- command('so test_eval_setup.vim')
- command([=[call SetReg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')]=])
- expect(
- '\n'..
- "{{{2 setreg('d', ['abcD4b-0', '\000', 'abcD4b-2\000', '\000abcD4b-3', 'abcD4b-4\000abcD4b-4-2'], 'b')\n"..
- "d: type \02219; value: abcD4b-0\000\000\000abcD4b-2\000\000\000abcD4b-3\000abcD4b-4\000abcD4b-4-2 (['abcD4b-0', '\000', 'abcD4b-2\000', '\000abcD4b-3', 'abcD4b-4\000abcD4b-4-2']), expr: abcD4b-0\000\000\000abcD4b-2\000\000\000abcD4b-3\000abcD4b-4\000abcD4b-4-2 (['abcD4b-0', '\000', 'abcD4b-2\000', '\000abcD4b-3', 'abcD4b-4\000abcD4b-4-2'])\n"..
- '==\n'..
- '=abcD4b-0 =\n'..
- ' \000\n'..
- ' abcD4b-2\000\n'..
- ' \000abcD4b-3\n'..
- ' abcD4b-4\000abcD4b-4-2')
- end)
- it('setting lists with NLs with setreg(), part 5', function()
- command('so test_eval_setup.vim')
- command([=[call SetReg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')]=])
- expect(
- '\n'..
- "{{{2 setreg('e', ['abcE4b10-0', '\000', 'abcE4b10-2\000', '\000abcE4b10-3', 'abcE4b10-4\000abcE4b10-4-2'], 'b10')\n"..
- "e: type \02210; value: abcE4b10-0\000\000\000abcE4b10-2\000\000\000abcE4b10-3\000abcE4b10-4\000abcE4b10-4-2 (['abcE4b10-0', '\000', 'abcE4b10-2\000', '\000abcE4b10-3', 'abcE4b10-4\000abcE4b10-4-2']), expr: abcE4b10-0\000\000\000abcE4b10-2\000\000\000abcE4b10-3\000abcE4b10-4\000abcE4b10-4-2 (['abcE4b10-0', '\000', 'abcE4b10-2\000', '\000abcE4b10-3', 'abcE4b10-4\000abcE4b10-4-2'])\n"..
- '==\n'..
- '=abcE4b10-0=\n'..
- ' \000\n'..
- ' abcE4b10-2\000\n'..
- ' \000abcE4b10-3\n'..
- ' abcE4b10-4\000abcE4b10-4-2')
- end)
- it('getreg("a",1,1) returns a valid list when "a is unset', function()
- -- Precondition: "a is actually unset and "0 is nonempty
- eq('', eval("getregtype('a')"))
- eq('', eval("getreg('a')"))
- command("call setreg('0','text')")
- -- This used to return a NULL list
- -- which setreg didn't handle
- command("let x = getreg('a',1,1)")
- command("call setreg('0',x)")
- -- nvim didn't crash and "0 was emptied
- eq(2, eval("1+1"))
- eq({}, eval("getreg('0',1,1)"))
- -- x is a mutable list
- command("let y = x")
- eq({}, eval("y"))
- command("call add(x, 'item')")
- eq({'item'}, eval("y"))
- end)
- it('sets the unnamed register when the "u" option is passed to setreg', function()
- command("call setreg('a','a reg', 'cu')")
- eq("a reg", eval('@"'))
- command("call setreg('b','b reg', 'cu')")
- eq("b reg", eval('@"'))
- command("call setreg('c','c reg', 'c')")
- eq("b reg", eval('@"'))
- end)
- it('search and expressions', function()
- command('so test_eval_setup.vim')
- command([=[call SetReg('/', ['abc/'])]=])
- command([=[call SetReg('/', ["abc/\n"])]=])
- command([=[call SetReg('=', ['"abc/"'])]=])
- command([=[call SetReg('=', ["\"abc/\n\""])]=])
- expect([[
- {{{2 setreg('/', ['abc/'])
- /: type v; value: abc/ (['abc/']), expr: abc/ (['abc/'])
- ==
- =abc/=
- {{{2 setreg('/', ['abc/]]..'\000'..[['])
- /: type v; value: abc/]].."\000 (['abc/\000']), expr: abc/\000 (['abc/\000"..[['])
- ==
- =abc/]]..'\000'..[[=
- {{{2 setreg('=', ['"abc/"'])
- =: type v; value: abc/ (['abc/']), expr: "abc/" (['"abc/"'])
- {{{2 setreg('=', ['"abc/]]..'\000'..[["'])
- =: type v; value: abc/]].."\000 (['abc/\000"..[[']), expr: "abc/]]..'\000'..[[" (['"abc/]]..'\000'..[["'])]])
- end)
- describe('system clipboard', function()
- before_each(function()
- command('let &runtimepath = "test/functional/fixtures,".&runtimepath')
- command('call getreg("*")') -- force load of provider
- end)
- it('works', function()
- insert([[
- Some first line (this text was at the top of the old test_eval.in).
- Note: system clipboard is saved, changed and restored.
- clipboard contents
- something else]])
- command('so test_eval_setup.vim')
- -- Save and restore system clipboard.
- command("let _clipreg = ['*', getreg('*'), getregtype('*')]")
- command('let _clipopt = &cb')
- command("let &cb='unnamed'")
- command('5y')
- command('AR *')
- command('tabdo :windo :echo "hi"')
- command('6y')
- command('AR *')
- command('let &cb=_clipopt')
- command("call call('setreg', _clipreg)")
- expect([[
- Some first line (this text was at the top of the old test_eval.in).
- Note: system clipboard is saved, changed and restored.
- clipboard contents
- something else
- *: type V; value: clipboard contents]]..'\00'..[[ (['clipboard contents']), expr: clipboard contents]]..'\00'..[[ (['clipboard contents'])
- *: type V; value: something else]]..'\00'..[[ (['something else']), expr: something else]]..'\00'..[[ (['something else'])]])
- end)
- end)
- it('errors', function()
- source([[
- fun ErrExe(str)
- call append('$', 'Executing '.a:str)
- try
- execute a:str
- catch
- $put =v:exception
- endtry
- endfun]])
- command([[call ErrExe('call setreg()')]])
- command([[call ErrExe('call setreg(1)')]])
- command([[call ErrExe('call setreg(1, 2, 3, 4)')]])
- command([=[call ErrExe('call setreg([], 2)')]=])
- command([[call ErrExe('call setreg(1, {})')]])
- command([=[call ErrExe('call setreg(1, 2, [])')]=])
- command([=[call ErrExe('call setreg("/", ["1", "2"])')]=])
- command([=[call ErrExe('call setreg("=", ["1", "2"])')]=])
- command([=[call ErrExe('call setreg(1, ["", "", [], ""])')]=])
- expect([[
- Executing call setreg()
- Vim(call):E119: Not enough arguments for function: setreg
- Executing call setreg(1)
- Vim(call):E119: Not enough arguments for function: setreg
- Executing call setreg(1, 2, 3, 4)
- Vim(call):E118: Too many arguments for function: setreg
- Executing call setreg([], 2)
- Vim(call):E730: using List as a String
- Executing call setreg(1, {})
- Vim(call):E731: using Dictionary as a String
- Executing call setreg(1, 2, [])
- Vim(call):E730: using List as a String
- Executing call setreg("/", ["1", "2"])
- Vim(call):E883: search pattern and expression register may not contain two or more lines
- Executing call setreg("=", ["1", "2"])
- Vim(call):E883: search pattern and expression register may not contain two or more lines
- Executing call setreg(1, ["", "", [], ""])
- Vim(call):E730: using List as a String]])
- end)
- it('function name not starting with a capital', function()
- eq('Vim(function):E128: Function name must start with a capital or "s:": g:test()\\nendfunction',
- exc_exec(dedent([[
- function! g:test()
- endfunction]])))
- end)
- it('Function name followed by #', function()
- eq('Vim(function):E128: Function name must start with a capital or "s:": test2() "#\\nendfunction',
- exc_exec(dedent([[
- function! test2() "#
- endfunction]])))
- end)
- it('function name includes a colon', function()
- eq('Vim(function):E128: Function name must start with a capital or "s:": b:test()\\nendfunction',
- exc_exec(dedent([[
- function! b:test()
- endfunction]])))
- end)
- it('function name starting with/without "g:", buffer-local funcref', function()
- command([[
- function! g:Foo(n)
- $put ='called Foo(' . a:n . ')'
- endfunction
- ]])
- command("let b:my_func = function('Foo')")
- command('call b:my_func(1)')
- command('echo g:Foo(2)')
- command('echo Foo(3)')
- expect([[
- called Foo(1)
- called Foo(2)
- called Foo(3)]])
- end)
- it('script-local function used in Funcref must exist', function()
- source([[
- " Vim script used in test_eval.in. Needed for script-local function.
- func! s:Testje()
- return "foo"
- endfunc
- let Bar = function('s:Testje')
- $put ='s:Testje exists: ' . exists('s:Testje')
- $put ='func s:Testje exists: ' . exists('*s:Testje')
- $put ='Bar exists: ' . exists('Bar')
- $put ='func Bar exists: ' . exists('*Bar')
- ]])
- expect([[
- s:Testje exists: 0
- func s:Testje exists: 1
- Bar exists: 1
- func Bar exists: 1]])
- end)
- it("using $ instead of '$' must give an error", function()
- eq('Vim(call):E116: Invalid arguments for function append',
- exc_exec('call append($, "foobar")'))
- end)
- it('getcurpos/setpos', function()
- insert([[
- 012345678
- 012345678
- start:]])
- command('/^012345678')
- feed('6l')
- poke_eventloop()
- command('let sp = getcurpos()')
- feed('0')
- poke_eventloop()
- command("call setpos('.', sp)")
- feed('jyl')
- poke_eventloop()
- command('$put')
- expect([[
- 012345678
- 012345678
- start:
- 6]])
- end)
- it('substring and variable name', function()
- command("let str = 'abcdef'")
- command('let n = 3')
- eq('def', eval('str[n:]'))
- eq('abcd', eval('str[:n]'))
- eq('d', eval('str[n:n]'))
- command('unlet n')
- command('let nn = 3')
- eq('def', eval('str[nn:]'))
- eq('abcd', eval('str[:nn]'))
- eq('d', eval('str[nn:nn]'))
- command('unlet nn')
- command('let b:nn = 4')
- eq('ef', eval('str[b:nn:]'))
- eq('abcde', eval('str[:b:nn]'))
- eq('e', eval('str[b:nn:b:nn]'))
- end)
- end)
|