aboutsummaryrefslogtreecommitdiff
path: root/test/functional
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional')
-rw-r--r--test/functional/eval/printf_spec.lua60
-rw-r--r--test/functional/job/job_spec.lua29
-rw-r--r--test/functional/legacy/035_increment_and_decrement_spec.lua26
-rw-r--r--test/functional/legacy/039_visual_block_mode_commands_spec.lua234
-rw-r--r--test/functional/legacy/057_sort_spec.lua35
-rw-r--r--test/functional/legacy/083_tag_search_with_file_encoding_spec.lua110
-rw-r--r--test/functional/legacy/erasebackword_spec.lua24
-rw-r--r--test/functional/legacy/eval_spec.lua696
-rw-r--r--test/functional/legacy/glob2regpat_spec.lua22
-rw-r--r--test/functional/legacy/listlbr_utf8_spec.lua104
-rw-r--r--test/functional/legacy/quickfix_spec.lua18
-rw-r--r--test/functional/ui/mouse_spec.lua1
12 files changed, 1348 insertions, 11 deletions
diff --git a/test/functional/eval/printf_spec.lua b/test/functional/eval/printf_spec.lua
new file mode 100644
index 0000000000..6180f4156a
--- /dev/null
+++ b/test/functional/eval/printf_spec.lua
@@ -0,0 +1,60 @@
+local helpers = require('test.functional.helpers')
+local clear = helpers.clear
+local eq = helpers.eq
+local funcs = helpers.funcs
+local exc_exec = helpers.exc_exec
+
+describe('printf()', function()
+ before_each(clear)
+
+ it('works with zero and %b', function()
+ eq('0', funcs.printf('%lb', 0))
+ eq('0', funcs.printf('%llb', 0))
+ eq('0', funcs.printf('%zb', 0))
+ end)
+ it('works with one and %b', function()
+ eq('1', funcs.printf('%b', 1))
+ eq('1', funcs.printf('%lb', 1))
+ eq('1', funcs.printf('%llb', 1))
+ eq('1', funcs.printf('%zb', 1))
+ end)
+ it('works with 0xff and %b', function()
+ eq('11111111', funcs.printf('%b', 0xff))
+ eq('11111111', funcs.printf('%lb', 0xff))
+ eq('11111111', funcs.printf('%llb', 0xff))
+ eq('11111111', funcs.printf('%zb', 0xff))
+ end)
+ it('accepts width modifier with %b', function()
+ eq(' 1', funcs.printf('%3b', 1))
+ end)
+ it('accepts prefix modifier with %b', function()
+ eq('0b1', funcs.printf('%#b', 1))
+ end)
+ it('writes capital B with %B', function()
+ eq('0B1', funcs.printf('%#B', 1))
+ end)
+ it('accepts prefix, zero-fill and width modifiers with %b', function()
+ eq('0b001', funcs.printf('%#05b', 1))
+ end)
+ it('accepts prefix and width modifiers with %b', function()
+ eq(' 0b1', funcs.printf('%#5b', 1))
+ end)
+ it('does not write prefix for zero with prefix and width modifier used with %b', function()
+ eq(' 0', funcs.printf('%#5b', 0))
+ end)
+ it('accepts precision modifier with %b', function()
+ eq('00000', funcs.printf('%.5b', 0))
+ end)
+ it('accepts all modifiers with %b at once', function()
+ -- zero-fill modifier is ignored when used with left-align
+ -- force-sign and add-blank are ignored
+ -- use-grouping-characters modifier is ignored always
+ eq('0b00011 ', funcs.printf('% \'+#0-10.5b', 3))
+ end)
+ it('errors out when %b modifier is used for a list', function()
+ eq('Vim(call):E745: Using a List as a Number', exc_exec('call printf("%b", [])'))
+ end)
+ it('errors out when %b modifier is used for a float', function()
+ eq('Vim(call):E805: Using a Float as a Number', exc_exec('call printf("%b", 3.1415926535)'))
+ end)
+end)
diff --git a/test/functional/job/job_spec.lua b/test/functional/job/job_spec.lua
index 0915ab0955..d21b9051e2 100644
--- a/test/functional/job/job_spec.lua
+++ b/test/functional/job/job_spec.lua
@@ -142,6 +142,35 @@ describe('jobs', function()
nvim('command', "call jobstart(['cat', '-'], g:job_opts)")
end)
+ it('can get the pid value using getpid', function()
+ nvim('command', "let j = jobstart(['cat', '-'], g:job_opts)")
+ local pid = eval('jobpid(j)')
+ eq(0,os.execute('ps -p '..pid..' > /dev/null'))
+ nvim('command', 'call jobstop(j)')
+ eq({'notification', 'exit', {0, 0}}, next_msg())
+ neq(0,os.execute('ps -p '..pid..' > /dev/null'))
+ end)
+
+ it("doesn't survive the exit of nvim", function()
+ -- use sleep, which doesn't die on stdin close
+ nvim('command', "let j = jobstart(['sleep', '1000'], g:job_opts)")
+ local pid = eval('jobpid(j)')
+ eq(0,os.execute('ps -p '..pid..' > /dev/null'))
+ clear()
+ neq(0,os.execute('ps -p '..pid..' > /dev/null'))
+ end)
+
+ it('can survive the exit of nvim with "detach"', function()
+ nvim('command', 'let g:job_opts.detach = 1')
+ nvim('command', "let j = jobstart(['sleep', '1000'], g:job_opts)")
+ local pid = eval('jobpid(j)')
+ eq(0,os.execute('ps -p '..pid..' > /dev/null'))
+ clear()
+ eq(0,os.execute('ps -p '..pid..' > /dev/null'))
+ -- clean up after ourselves
+ os.execute('kill -9 '..pid..' > /dev/null')
+ end)
+
it('can pass user data to the callback', function()
nvim('command', 'let g:job_opts.user = {"n": 5, "s": "str", "l": [1]}')
nvim('command', "call jobstart(['echo'], g:job_opts)")
diff --git a/test/functional/legacy/035_increment_and_decrement_spec.lua b/test/functional/legacy/035_increment_and_decrement_spec.lua
index 20c0cc4206..e6252c384b 100644
--- a/test/functional/legacy/035_increment_and_decrement_spec.lua
+++ b/test/functional/legacy/035_increment_and_decrement_spec.lua
@@ -11,34 +11,40 @@ describe('increment and decrement commands', function()
it('should work', function()
-- Insert some numbers in various bases.
insert([[
- 100 0x100 077 0
- 100 0x100 077
+ 0b101 100 0x100 077 0
+ 0b101 100 0x100 077
100 0x100 077 0xfF 0xFf
- 100 0x100 077]])
+ 100 0x100 077
+ 0x0b101 0b1101]])
-- Increment and decrement numbers in the first row, interpreting the
-- numbers as decimal, octal or hexadecimal.
- execute('set nrformats=octal,hex', '1')
- feed('102ll64128$')
+ execute('set nrformats=bin,octal,hex', '1')
+ feed('63l102ll64128$')
-- For the second row, treat the numbers as decimal or octal.
-- 0x100 should be interpreted as decimal 0, the character x, and decimal 100.
execute('set nrformats=octal', '2')
- feed('0102l2w65129blx6lD')
+ feed('0w102l2w65129blx6lD')
-- For the third row, treat the numbers as decimal or hexadecimal.
-- 077 should be interpreted as decimal 77.
execute('set nrformats=hex', '3')
feed('0101l257Txldt   ')
- -- For the last row, interpret all numbers as decimal.
+ -- For the fourth row, interpret all numbers as decimal.
execute('set nrformats=', '4')
feed('0200l100w78')
+ -- For the last row, interpret as binary and hexadecimal.
+ execute('set nrformats=bin,hex', '5')
+ feed('010065l6432')
+
expect([[
- 0 0x0ff 0000 -1
- 0 1x100 0777777
+ 0b011 0 0x0ff 0000 -1
+ 1b101 0 1x100 0777777
-1 0x0 078 0xFE 0xfe
- -100 -100x100 000]])
+ -100 -100x100 000
+ 0x0b0de 0b0101101]])
end)
end)
diff --git a/test/functional/legacy/039_visual_block_mode_commands_spec.lua b/test/functional/legacy/039_visual_block_mode_commands_spec.lua
new file mode 100644
index 0000000000..55db9169fa
--- /dev/null
+++ b/test/functional/legacy/039_visual_block_mode_commands_spec.lua
@@ -0,0 +1,234 @@
+-- Test Visual block mode commands
+-- And test "U" in Visual mode, also on German sharp S.
+
+local helpers = require('test.functional.helpers')
+local nvim, eq = helpers.meths, helpers.eq
+local insert, feed = helpers.insert, helpers.feed
+local clear, expect = helpers.clear, helpers.expect
+local source, execute = helpers.source, helpers.execute
+
+describe('Visual block mode', function()
+
+ before_each(function()
+ clear()
+
+ execute('set ts&vi sw&vi sts&vi noet') -- Vim compatible
+ end)
+
+ it('should shift, insert, replace and change a block', function()
+ insert([[
+ abcdefghijklm
+ abcdefghijklm
+ abcdefghijklm
+ abcdefghijklm
+ abcdefghijklm]])
+
+ feed('gg')
+ -- Test shift-right of a block
+ feed('jllll<C-v>jj>wll<C-v>jlll><CR>')
+ -- Test shift-left of a block
+ feed('G$hhhh<C-v>kk<lt>')
+ -- Test block-insert
+ feed('Gkl<C-v>kkkIxyz<ESC>')
+ -- Test block-replace
+ feed('Gllll<C-v>kkklllrq')
+ -- Test block-change
+ feed('G$khhh<C-v>hhkkcmno<ESC>')
+
+ expect([[
+ axyzbcdefghijklm
+ axyzqqqq mno ghijklm
+ axyzqqqqef mno ghijklm
+ axyzqqqqefgmnoklm
+ abcdqqqqijklm]])
+ end)
+
+ it('should insert a block using cursor keys for movement', function()
+ insert([[
+ aaaaaa
+ bbbbbb
+ cccccc
+ dddddd
+
+ xaaa
+ bbbb
+ cccc
+ dddd]])
+
+ execute('/^aa')
+ feed('l<C-v>jjjlllI<Right><Right> <ESC>')
+ execute('/xaaa$')
+ feed('<C-v>jjjI<lt>><Left>p<ESC>')
+
+ expect([[
+ aaa aaa
+ bbb bbb
+ ccc ccc
+ ddd ddd
+
+ <p>xaaa
+ <p>bbbb
+ <p>cccc
+ <p>dddd]])
+ end)
+
+ it('should create a block', function()
+ insert([[
+ A23
+ 4567
+
+ B23
+ 4567
+
+ C23
+ 4567]])
+
+ -- Test for Visual block was created with the last <C-v>$.
+ execute('/^A23$/')
+ feed('l<C-v>j$Aab<ESC>')
+ -- Test for Visual block was created with the middle <C-v>$ (1).
+ execute('/^B23$/')
+ feed('l<C-v>j$hAab<ESC>')
+ -- Test for Visual block was created with the middle <C-v>$ (2).
+ execute('/^C23$/')
+ feed('l<C-v>j$hhAab<ESC>')
+
+ expect([[
+ A23ab
+ 4567ab
+
+ B23 ab
+ 4567ab
+
+ C23ab
+ 456ab7]])
+ end)
+
+ it('should insert and append a block when virtualedit=all', function()
+ insert([[
+ line1
+ line2
+ line3
+ ]])
+
+ -- Test for Visual block insert when virtualedit=all and utf-8 encoding.
+ execute('set ve=all')
+ execute('/\t\tline')
+ feed('07l<C-v>jjIx<ESC>')
+
+ expect([[
+ x line1
+ x line2
+ x line3
+ ]])
+
+ -- Test for Visual block append when virtualedit=all.
+ feed('012l<C-v>jjAx<ESC>')
+
+ expect([[
+ x x line1
+ x x line2
+ x x line3
+ ]])
+ end)
+
+ it('should make a selected part uppercase', function()
+ -- GUe must uppercase a whole word, also when ß changes to SS.
+ feed('Gothe youtußeuu end<ESC>Ypk0wgUe<CR>')
+ -- GUfx must uppercase until x, inclusive.
+ feed('O- youßtußexu -<ESC>0fogUfx<CR>')
+ -- VU must uppercase a whole line.
+ feed('YpkVU<CR>')
+ -- Same, when it's the last line in the buffer.
+ feed('YPGi111<ESC>VUddP<CR>')
+ -- Uppercase two lines.
+ feed('Oblah di<CR>')
+ feed('doh dut<ESC>VkUj<CR>')
+ -- Uppercase part of two lines.
+ feed('ddppi333<ESC>k0i222<esc>fyllvjfuUk<CR>')
+
+ expect([[
+
+ the YOUTUSSEUU end
+ - yOUSSTUSSEXu -
+ THE YOUTUSSEUU END
+ 111THE YOUTUSSEUU END
+ BLAH DI
+ DOH DUT
+ 222the yoUTUSSEUU END
+ 333THE YOUTUßeuu end]])
+ end)
+
+ it('should replace using Enter or NL', function()
+ -- Visual replace using Enter or NL.
+ feed('G3o123456789<ESC>2k05l<C-v>2jr<CR>')
+ feed('G3o98765<ESC>2k02l<C-v>2jr<C-v><CR>')
+ feed('G3o123456789<ESC>2k05l<C-v>2jr<CR>')
+ feed('G3o98765<ESC>2k02l<C-v>2jr<C-v><Nul>')
+
+ local expected = [[
+
+ 12345
+ 789
+ 12345
+ 789
+ 12345
+ 789
+ 98<CR>65
+ 98<CR>65
+ 98<CR>65
+ 12345
+ 789
+ 12345
+ 789
+ 12345
+ 789
+ 98<Nul>65
+ 98<Nul>65
+ 98<Nul>65]]
+ expected = expected:gsub('<CR>', '\r')
+ expected = expected:gsub('<Nul>', '\x00')
+
+ expect(expected)
+ end)
+
+ it('should treat cursor position correctly when virtualedit=block', function()
+ insert([[
+ 12345
+ 789
+ 98765]])
+
+ -- Test cursor position. When virtualedit=block and Visual block mode and $gj.
+ execute('set ve=block')
+ feed('G2l')
+ feed('2k<C-v>$gj<ESC>')
+ execute([[let cpos=getpos("'>")]])
+ local cpos = nvim.get_var('cpos')
+ local expected = {
+ col = 4,
+ off = 0
+ }
+ local actual = {
+ col = cpos[3],
+ off = cpos[4]
+ }
+
+ eq(expected, actual)
+ end)
+
+ it('should replace spaces in front of the block with tabs', function()
+ insert([[
+ #define BO_ALL 0x0001
+ #define BO_BS 0x0002
+ #define BO_CRSR 0x0004]])
+
+ -- Block_insert when replacing spaces in front of the block with tabs.
+ execute('set ts=8 sts=4 sw=4')
+ feed('ggf0<C-v>2jI<TAB><ESC>')
+
+ expect([[
+ #define BO_ALL 0x0001
+ #define BO_BS 0x0002
+ #define BO_CRSR 0x0004]])
+ end)
+end)
diff --git a/test/functional/legacy/057_sort_spec.lua b/test/functional/legacy/057_sort_spec.lua
index 585b391198..65defbae96 100644
--- a/test/functional/legacy/057_sort_spec.lua
+++ b/test/functional/legacy/057_sort_spec.lua
@@ -600,4 +600,39 @@ describe(':sort', function()
eq('Vim(sort):E474: Invalid argument', eval('tmpvar'))
expect(text)
end)
+
+ it('binary', function()
+ insert([[
+ 0b111000
+ 0b101100
+ 0b101001
+ 0b101001
+ 0b101000
+ 0b000000
+ 0b001000
+ 0b010000
+ 0b101000
+ 0b100000
+ 0b101010
+ 0b100010
+ 0b100100
+ 0b100010]])
+ execute([[sort b]])
+ expect([[
+ 0b000000
+ 0b001000
+ 0b010000
+ 0b100000
+ 0b100010
+ 0b100010
+ 0b100100
+ 0b101000
+ 0b101000
+ 0b101001
+ 0b101001
+ 0b101010
+ 0b101100
+ 0b111000]])
+ end)
+
end)
diff --git a/test/functional/legacy/083_tag_search_with_file_encoding_spec.lua b/test/functional/legacy/083_tag_search_with_file_encoding_spec.lua
new file mode 100644
index 0000000000..dc6df007e6
--- /dev/null
+++ b/test/functional/legacy/083_tag_search_with_file_encoding_spec.lua
@@ -0,0 +1,110 @@
+-- Tests for tag search with !_TAG_FILE_ENCODING.
+
+local helpers = require('test.functional.helpers')
+local insert, source, clear, expect, write_file = helpers.insert,
+ helpers.source, helpers.clear, helpers.expect, helpers.write_file
+
+local function has_iconv()
+ clear() -- ensures session
+ return 1 == helpers.eval('has("iconv")')
+end
+
+describe('tag search with !_TAG_FILE_ENCODING', function()
+ setup(function()
+ clear()
+ -- Create some temp files that are needed for the test run. In the old
+ -- test suite this was done by putting the text inside the file test83.in
+ -- and executing some "/first/,/last/w! tmpfile" commands.
+ write_file('Xtags1.txt', 'text for tags1\nabcdefghijklmnopqrs\n')
+ write_file('Xtags2.txt', 'text for tags2\nABC\n')
+ write_file('Xtags3.txt', 'text for tags3\nABC\n')
+ write_file('Xtags1', [[
+ !_TAG_FILE_ENCODING utf-8 //
+ abcdefghijklmnopqrs Xtags1.txt /abcdefghijklmnopqrs
+ ]])
+ write_file('test83-tags2',
+ '!_TAG_FILE_ENCODING cp932 //\n' ..
+ '\x82`\x82a\x82b Xtags2.txt /\x82`\x82a\x82b\n'
+ )
+ -- The last file is very long but repetetive and can be generated on the
+ -- fly.
+ local text = helpers.dedent([[
+ !_TAG_FILE_SORTED 1 //
+ !_TAG_FILE_ENCODING cp932 //
+ ]])
+ local line = ' Xtags3.txt /\x82`\x82a\x82b\n'
+ for i = 1, 100 do
+ text = text .. 'abc' .. i .. line
+ end
+ write_file('test83-tags3', text)
+ end)
+ teardown(function()
+ os.remove('Xtags1')
+ os.remove('Xtags1.txt')
+ os.remove('Xtags2.txt')
+ os.remove('Xtags3.txt')
+ os.remove('test83-tags2')
+ os.remove('test83-tags3')
+ end)
+
+ if not has_iconv() then
+ pending('skipped (missing iconv)', function() end)
+ else
+ it('is working', function()
+
+ insert('Results of test83')
+
+ -- Case1:
+ source([[
+ new
+ set tags=Xtags1
+ let v:errmsg = ''
+ tag abcdefghijklmnopqrs
+ if v:errmsg =~ 'E426:' || getline('.') != 'abcdefghijklmnopqrs'
+ close
+ put ='case1: failed'
+ else
+ close
+ put ='case1: ok'
+ endif
+ ]])
+
+ -- Case2:
+ source([[
+ new
+ set tags=test83-tags2
+ let v:errmsg = ''
+ tag /.BC
+ if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
+ close
+ put ='case2: failed'
+ else
+ close
+ put ='case2: ok'
+ endif
+ ]])
+
+ -- Case3:
+ source([[
+ new
+ set tags=test83-tags3
+ let v:errmsg = ''
+ tag abc50
+ if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
+ close
+ put ='case3: failed'
+ else
+ close
+ put ='case3: ok'
+ endif
+ ]])
+
+ -- Assert buffer contents.
+ expect([[
+ Results of test83
+ case1: ok
+ case2: ok
+ case3: ok]])
+ end)
+ end
+end)
diff --git a/test/functional/legacy/erasebackword_spec.lua b/test/functional/legacy/erasebackword_spec.lua
new file mode 100644
index 0000000000..cb3967b763
--- /dev/null
+++ b/test/functional/legacy/erasebackword_spec.lua
@@ -0,0 +1,24 @@
+-- Test for CTRL-W in Insert mode
+
+local helpers = require('test.functional.helpers')
+local clear, feed, expect = helpers.clear, helpers.feed, helpers.expect
+
+describe('CTRL-W in Insert mode', function()
+ setup(clear)
+
+ it('works for multi-byte characters', function()
+
+ for i = 1, 6 do
+ feed('o wwwこんにちわ世界ワールドvim ' .. string.rep('<C-w>', i) .. '<esc>')
+ end
+
+ expect([[
+
+ wwwこんにちわ世界ワールド
+ wwwこんにちわ世界
+ wwwこんにちわ
+ www
+
+ ]])
+ end)
+end)
diff --git a/test/functional/legacy/eval_spec.lua b/test/functional/legacy/eval_spec.lua
new file mode 100644
index 0000000000..05cd73dbd4
--- /dev/null
+++ b/test/functional/legacy/eval_spec.lua
@@ -0,0 +1,696 @@
+-- Test for various eval features.
+
+local helpers = require('test.functional.helpers')
+local feed, insert, source = helpers.feed, helpers.insert, helpers.source
+local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect
+local eq, eval, wait, write_file = helpers.eq, helpers.eval, helpers.wait, helpers.write_file
+
+local function has_clipboard()
+ clear()
+ return 1 == eval("has('clipboard')")
+end
+
+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()
+ execute('so test_eval_setup.vim')
+ execute([[let @" = 'abc']])
+ execute('AR "')
+ execute([[let @" = "abc\n"]])
+ source('AR "')
+ execute([[let @" = "abc\<C-m>"]])
+ execute('AR "')
+ execute([[let @= = '"abc"']])
+ execute('AR =')
+ expect([[
+
+ ": type v; value: abc (['abc']), expr: abc (['abc'])
+ ": type V; value: abc]].."\x00 (['abc']), expr: abc\x00"..[[ (['abc'])
+ ": type V; value: abc]].."\r\x00 (['abc\r']), expr: abc\r\x00 (['abc\r"..[['])
+ =: type v; value: abc (['abc']), expr: "abc" (['"abc"'])]])
+ end)
+
+ it('basic setreg() tests', function()
+ execute('so test_eval_setup.vim')
+ insert('{{{1 Basic setreg tests')
+ execute([[call SetReg('a', 'abcA', 'c')]])
+ execute([[call SetReg('b', 'abcB', 'v')]])
+ execute([[call SetReg('c', 'abcC', 'l')]])
+ execute([[call SetReg('d', 'abcD', 'V')]])
+ execute([[call SetReg('e', 'abcE', 'b')]])
+ execute([[call SetReg('f', 'abcF', "\<C-v>")]])
+ execute([[call SetReg('g', 'abcG', 'b10')]])
+ execute([[call SetReg('h', 'abcH', "\<C-v>10")]])
+ execute([[call SetReg('I', 'abcI')]])
+
+ feed('Go{{{1 Appending single lines with setreg()<esc>')
+ execute([[call SetReg('A', 'abcAc', 'c')]])
+ execute([[call SetReg('A', 'abcAl', 'l')]])
+ execute([[call SetReg('A', 'abcAc2','c')]])
+ execute([[call SetReg('b', 'abcBc', 'ca')]])
+ execute([[call SetReg('b', 'abcBb', 'ba')]])
+ execute([[call SetReg('b', 'abcBc2','ca')]])
+ execute([[call SetReg('b', 'abcBb2','b50a')]])
+ execute([[call SetReg('C', 'abcCl', 'l')]])
+ execute([[call SetReg('C', 'abcCc', 'c')]])
+ execute([[call SetReg('D', 'abcDb', 'b')]])
+ execute([[call SetReg('E', 'abcEb', 'b')]])
+ execute([[call SetReg('E', 'abcEl', 'l')]])
+ execute([[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]].."\x00 (['abcC']), expr: abcC\x00"..[[ (['abcC'])
+ ==
+ abcC
+ ==
+ {{{2 setreg('d', 'abcD', 'V')
+ d: type V; value: abcD]].."\x00 (['abcD']), expr: abcD\x00"..[[ (['abcD'])
+ ==
+ abcD
+ ==
+ {{{2 setreg('e', 'abcE', 'b')
+ e: type ]]..'\x16'..[[4; value: abcE (['abcE']), expr: abcE (['abcE'])
+ ==
+ =abcE=
+ {{{2 setreg('f', 'abcF', ']]..'\x16'..[[')
+ f: type ]]..'\x16'..[[4; value: abcF (['abcF']), expr: abcF (['abcF'])
+ ==
+ =abcF=
+ {{{2 setreg('g', 'abcG', 'b10')
+ g: type ]]..'\x16'..[[10; value: abcG (['abcG']), expr: abcG (['abcG'])
+ ==
+ =abcG =
+ {{{2 setreg('h', 'abcH', ']]..'\x16'..[[10')
+ h: type ]]..'\x16'..[[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]].."\x00 (['abcAabcAcabcAl']), expr: abcAabcAcabcAl\x00"..[[ (['abcAabcAcabcAl'])
+ ==
+ abcAabcAcabcAl
+ ==
+ {{{2 setreg('A', 'abcAc2', 'c')
+ A: type v; value: abcAabcAcabcAl]].."\x00abcAc2 (['abcAabcAcabcAl', 'abcAc2']), expr: abcAabcAcabcAl\x00"..[[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 ]]..'\x16'..[[5; value: abcBabcBcabcBb (['abcBabcBcabcBb']), expr: abcBabcBcabcBb (['abcBabcBcabcBb'])
+ ==
+ =abcBabcBcabcBb=
+ {{{2 setreg('b', 'abcBc2', 'ca')
+ b: type v; value: abcBabcBcabcBb]].."\x00abcBc2 (['abcBabcBcabcBb', 'abcBc2']), expr: abcBabcBcabcBb\x00"..[[abcBc2 (['abcBabcBcabcBb', 'abcBc2'])
+ ==
+ =abcBabcBcabcBb
+ abcBc2=
+ {{{2 setreg('b', 'abcBb2', 'b50a')
+ b: type ]].."\x1650; value: abcBabcBcabcBb\x00abcBc2abcBb2 (['abcBabcBcabcBb', 'abcBc2abcBb2']), expr: abcBabcBcabcBb\x00"..[[abcBc2abcBb2 (['abcBabcBcabcBb', 'abcBc2abcBb2'])
+ ==
+ =abcBabcBcabcBb =
+ abcBc2abcBb2
+ {{{2 setreg('C', 'abcCl', 'l')
+ C: type V; value: abcC]].."\x00abcCl\x00 (['abcC', 'abcCl']), expr: abcC\x00abcCl\x00"..[[ (['abcC', 'abcCl'])
+ ==
+ abcC
+ abcCl
+ ==
+ {{{2 setreg('C', 'abcCc', 'c')
+ C: type v; value: abcC]].."\x00abcCl\x00abcCc (['abcC', 'abcCl', 'abcCc']), expr: abcC\x00abcCl\x00"..[[abcCc (['abcC', 'abcCl', 'abcCc'])
+ ==
+ =abcC
+ abcCl
+ abcCc=
+ {{{2 setreg('D', 'abcDb', 'b')
+ D: type ]].."\x165; value: abcD\x00abcDb (['abcD', 'abcDb']), expr: abcD\x00"..[[abcDb (['abcD', 'abcDb'])
+ ==
+ =abcD =
+ abcDb
+ {{{2 setreg('E', 'abcEb', 'b')
+ E: type ]].."\x165; value: abcE\x00abcEb (['abcE', 'abcEb']), expr: abcE\x00"..[[abcEb (['abcE', 'abcEb'])
+ ==
+ =abcE =
+ abcEb
+ {{{2 setreg('E', 'abcEl', 'l')
+ E: type V; value: abcE]].."\x00abcEb\x00abcEl\x00 (['abcE', 'abcEb', 'abcEl']), expr: abcE\x00abcEb\x00abcEl\x00"..[[ (['abcE', 'abcEb', 'abcEl'])
+ ==
+ abcE
+ abcEb
+ abcEl
+ ==
+ {{{2 setreg('F', 'abcFc', 'c')
+ F: type v; value: abcF]].."\x00abcFc (['abcF', 'abcFc']), expr: abcF\x00"..[[abcFc (['abcF', 'abcFc'])
+ ==
+ =abcF
+ abcFc=]])
+ end)
+
+ it('appending NL with setreg()', function()
+ execute('so test_eval_setup.vim')
+
+ execute([[call setreg('a', 'abcA2', 'c')]])
+ execute([[call setreg('b', 'abcB2', 'v')]])
+ execute([[call setreg('c', 'abcC2', 'l')]])
+ execute([[call setreg('d', 'abcD2', 'V')]])
+ execute([[call setreg('e', 'abcE2', 'b')]])
+ execute([[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')]])
+
+ execute([[call SetReg('A', "\n")]])
+ execute([[call SetReg('B', "\n", 'c')]])
+ execute([[call SetReg('C', "\n")]])
+ execute([[call SetReg('D', "\n", 'l')]])
+ execute([[call SetReg('E', "\n")]])
+ execute([[call SetReg('F', "\n", 'b')]])
+ expect([[
+
+ {{{2 setreg('A', ']]..'\x00'..[[')
+ A: type V; value: abcA2]].."\x00 (['abcA2']), expr: abcA2\x00"..[[ (['abcA2'])
+ ==
+ abcA2
+ ==
+ {{{2 setreg('B', ']]..'\x00'..[[', 'c')
+ B: type v; value: abcB2]].."\x00 (['abcB2', '']), expr: abcB2\x00"..[[ (['abcB2', ''])
+ ==
+ =abcB2
+ =
+ {{{2 setreg('C', ']]..'\x00'..[[')
+ C: type V; value: abcC2]].."\x00\x00 (['abcC2', '']), expr: abcC2\x00\x00"..[[ (['abcC2', ''])
+ ==
+ abcC2
+
+ ==
+ {{{2 setreg('D', ']]..'\x00'..[[', 'l')
+ D: type V; value: abcD2]].."\x00\x00 (['abcD2', '']), expr: abcD2\x00\x00"..[[ (['abcD2', ''])
+ ==
+ abcD2
+
+ ==
+ {{{2 setreg('E', ']]..'\x00'..[[')
+ E: type V; value: abcE2]].."\x00\x00 (['abcE2', '']), expr: abcE2\x00\x00"..[[ (['abcE2', ''])
+ ==
+ abcE2
+
+ ==
+ {{{2 setreg('F', ']]..'\x00'..[[', 'b')
+ F: type ]].."\x160; value: abcF2\x00 (['abcF2', '']), expr: abcF2\x00"..[[ (['abcF2', ''])
+ ==
+ =abcF2=
+ ]])
+ end)
+
+ it('setting and appending list with setreg()', function()
+ execute('so test_eval_setup.vim')
+
+ execute([[$put ='{{{1 Setting lists with setreg()']])
+ execute([=[call SetReg('a', ['abcA3'], 'c')]=])
+ execute([=[call SetReg('b', ['abcB3'], 'l')]=])
+ execute([=[call SetReg('c', ['abcC3'], 'b')]=])
+ execute([=[call SetReg('d', ['abcD3'])]=])
+ execute([=[call SetReg('e', [1, 2, 'abc', 3])]=])
+ execute([=[call SetReg('f', [1, 2, 3])]=])
+
+ execute([[$put ='{{{1 Appending lists with setreg()']])
+ execute([=[call SetReg('A', ['abcA3c'], 'c')]=])
+ execute([=[call SetReg('b', ['abcB3l'], 'la')]=])
+ execute([=[call SetReg('C', ['abcC3b'], 'lb')]=])
+ execute([=[call SetReg('D', ['abcD32'])]=])
+ execute([=[call SetReg('A', ['abcA32'])]=])
+ execute([=[call SetReg('B', ['abcB3c'], 'c')]=])
+ execute([=[call SetReg('C', ['abcC3l'], 'l')]=])
+ execute([=[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]].."\x00 (['abcB3']), expr: abcB3\x00"..[[ (['abcB3'])
+ ==
+ abcB3
+ ==
+ {{{2 setreg('c', ['abcC3'], 'b')
+ c: type ]]..'\x16'..[[5; value: abcC3 (['abcC3']), expr: abcC3 (['abcC3'])
+ ==
+ =abcC3=
+ {{{2 setreg('d', ['abcD3'])
+ d: type V; value: abcD3]].."\x00 (['abcD3']), expr: abcD3\x00"..[[ (['abcD3'])
+ ==
+ abcD3
+ ==
+ {{{2 setreg('e', [1, 2, 'abc', 3])
+ e: type V; value: 1]].."\x002\x00abc\x003\x00 (['1', '2', 'abc', '3']), expr: 1\x002\x00abc\x003\x00"..[[ (['1', '2', 'abc', '3'])
+ ==
+ 1
+ 2
+ abc
+ 3
+ ==
+ {{{2 setreg('f', [1, 2, 3])
+ f: type V; value: 1]].."\x002\x003\x00 (['1', '2', '3']), expr: 1\x002\x003\x00"..[[ (['1', '2', '3'])
+ ==
+ 1
+ 2
+ 3
+ ==
+ {{{1 Appending lists with setreg()
+ {{{2 setreg('A', ['abcA3c'], 'c')
+ A: type v; value: abcA3]].."\x00abcA3c (['abcA3', 'abcA3c']), expr: abcA3\x00"..[[abcA3c (['abcA3', 'abcA3c'])
+ ==
+ =abcA3
+ abcA3c=
+ {{{2 setreg('b', ['abcB3l'], 'la')
+ b: type V; value: abcB3]].."\x00abcB3l\x00 (['abcB3', 'abcB3l']), expr: abcB3\x00abcB3l\x00"..[[ (['abcB3', 'abcB3l'])
+ ==
+ abcB3
+ abcB3l
+ ==
+ {{{2 setreg('C', ['abcC3b'], 'lb')
+ C: type ]].."\x166; value: abcC3\x00abcC3b (['abcC3', 'abcC3b']), expr: abcC3\x00"..[[abcC3b (['abcC3', 'abcC3b'])
+ ==
+ =abcC3 =
+ abcC3b
+ {{{2 setreg('D', ['abcD32'])
+ D: type V; value: abcD3]].."\x00abcD32\x00 (['abcD3', 'abcD32']), expr: abcD3\x00abcD32\x00"..[[ (['abcD3', 'abcD32'])
+ ==
+ abcD3
+ abcD32
+ ==
+ {{{2 setreg('A', ['abcA32'])
+ A: type V; value: abcA3]].."\x00abcA3c\x00abcA32\x00 (['abcA3', 'abcA3c', 'abcA32']), expr: abcA3\x00abcA3c\x00abcA32\x00"..[[ (['abcA3', 'abcA3c', 'abcA32'])
+ ==
+ abcA3
+ abcA3c
+ abcA32
+ ==
+ {{{2 setreg('B', ['abcB3c'], 'c')
+ B: type v; value: abcB3]].."\x00abcB3l\x00abcB3c (['abcB3', 'abcB3l', 'abcB3c']), expr: abcB3\x00abcB3l\x00"..[[abcB3c (['abcB3', 'abcB3l', 'abcB3c'])
+ ==
+ =abcB3
+ abcB3l
+ abcB3c=
+ {{{2 setreg('C', ['abcC3l'], 'l')
+ C: type V; value: abcC3]].."\x00abcC3b\x00abcC3l\x00 (['abcC3', 'abcC3b', 'abcC3l']), expr: abcC3\x00abcC3b\x00abcC3l\x00"..[[ (['abcC3', 'abcC3b', 'abcC3l'])
+ ==
+ abcC3
+ abcC3b
+ abcC3l
+ ==
+ {{{2 setreg('D', ['abcD3b'], 'b')
+ D: type ]].."\x166; value: abcD3\x00abcD32\x00abcD3b (['abcD3', 'abcD32', 'abcD3b']), expr: abcD3\x00abcD32\x00"..[[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 neccessary because null
+ -- bytes on a line by itself don't play well together with the dedent
+ -- function used in expect().
+ execute('%delete')
+ execute([[$put ='{{{1 Appending lists with NL with setreg()']])
+ execute([=[call SetReg('A', ["\n", 'abcA3l2'], 'l')]=])
+ expect(
+ '\n'..
+ '{{{1 Appending lists with NL with setreg()\n'..
+ "{{{2 setreg('A', ['\x00', 'abcA3l2'], 'l')\n"..
+ "A: type V; value: abcA3\x00abcA3c\x00abcA32\x00\x00\x00abcA3l2\x00 (['abcA3', 'abcA3c', 'abcA32', '\x00', 'abcA3l2']), expr: abcA3\x00abcA3c\x00abcA32\x00\x00\x00abcA3l2\x00 (['abcA3', 'abcA3c', 'abcA32', '\x00', 'abcA3l2'])\n"..
+ '==\n'..
+ 'abcA3\n'..
+ 'abcA3c\n'..
+ 'abcA32\n'..
+ '\x00\n'..
+ 'abcA3l2\n'..
+ '==')
+ execute('%delete')
+ execute([=[call SetReg('B', ["\n", 'abcB3c2'], 'c')]=])
+ expect(
+ '\n'..
+ "{{{2 setreg('B', ['\x00', 'abcB3c2'], 'c')\n"..
+ "B: type v; value: abcB3\x00abcB3l\x00abcB3c\x00\x00\x00abcB3c2 (['abcB3', 'abcB3l', 'abcB3c', '\x00', 'abcB3c2']), expr: abcB3\x00abcB3l\x00abcB3c\x00\x00\x00abcB3c2 (['abcB3', 'abcB3l', 'abcB3c', '\x00', 'abcB3c2'])\n"..
+ '==\n'..
+ '=abcB3\n'..
+ 'abcB3l\n'..
+ 'abcB3c\n'..
+ '\x00\n'..
+ 'abcB3c2=')
+ execute('%delete')
+ execute([=[call SetReg('C', ["\n", 'abcC3b2'], 'b')]=])
+ expect(
+ '\n'..
+ "{{{2 setreg('C', ['\x00', 'abcC3b2'], 'b')\n"..
+ "C: type \x167; value: abcC3\x00abcC3b\x00abcC3l\x00\x00\x00abcC3b2 (['abcC3', 'abcC3b', 'abcC3l', '\x00', 'abcC3b2']), expr: abcC3\x00abcC3b\x00abcC3l\x00\x00\x00abcC3b2 (['abcC3', 'abcC3b', 'abcC3l', '\x00', 'abcC3b2'])\n"..
+ '==\n'..
+ '=abcC3 =\n'..
+ ' abcC3b\n'..
+ ' abcC3l\n'..
+ ' \x00\n'..
+ ' abcC3b2')
+ execute('%delete')
+ execute([=[call SetReg('D', ["\n", 'abcD3b50'],'b50')]=])
+ expect(
+ '\n'..
+ "{{{2 setreg('D', ['\x00', 'abcD3b50'], 'b50')\n"..
+ "D: type \x1650; value: abcD3\x00abcD32\x00abcD3b\x00\x00\x00abcD3b50 (['abcD3', 'abcD32', 'abcD3b', '\x00', 'abcD3b50']), expr: abcD3\x00abcD32\x00abcD3b\x00\x00\x00abcD3b50 (['abcD3', 'abcD32', 'abcD3b', '\x00', 'abcD3b50'])\n"..
+ '==\n'..
+ '=abcD3 =\n'..
+ ' abcD32\n'..
+ ' abcD3b\n'..
+ ' \x00\n'..
+ ' abcD3b50')
+ end)
+
+ -- The tests for setting lists with NLs are split into seperate 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()
+ execute('so test_eval_setup.vim')
+ execute([=[call SetReg('a', ['abcA4-0', "\n", "abcA4-2\n", "\nabcA4-3", "abcA4-4\nabcA4-4-2"])]=])
+ expect(
+ '\n'..
+ "{{{2 setreg('a', ['abcA4-0', '\x00', 'abcA4-2\x00', '\x00abcA4-3', 'abcA4-4\x00abcA4-4-2'])\n"..
+ "a: type V; value: abcA4-0\x00\x00\x00abcA4-2\x00\x00\x00abcA4-3\x00abcA4-4\x00abcA4-4-2\x00 (['abcA4-0', '\x00', 'abcA4-2\x00', '\x00abcA4-3', 'abcA4-4\x00abcA4-4-2']), expr: abcA4-0\x00\x00\x00abcA4-2\x00\x00\x00abcA4-3\x00abcA4-4\x00abcA4-4-2\x00 (['abcA4-0', '\x00', 'abcA4-2\x00', '\x00abcA4-3', 'abcA4-4\x00abcA4-4-2'])\n"..
+ '==\n'..
+ 'abcA4-0\n'..
+ '\x00\n'..
+ 'abcA4-2\x00\n'..
+ '\x00abcA4-3\n'..
+ 'abcA4-4\x00abcA4-4-2\n'..
+ '==')
+ end)
+
+ it('setting lists with NLs with setreg(), part 2', function()
+ execute('so test_eval_setup.vim')
+ execute([=[call SetReg('b', ['abcB4c-0', "\n", "abcB4c-2\n", "\nabcB4c-3", "abcB4c-4\nabcB4c-4-2"], 'c')]=])
+ expect(
+ '\n'..
+ "{{{2 setreg('b', ['abcB4c-0', '\x00', 'abcB4c-2\x00', '\x00abcB4c-3', 'abcB4c-4\x00abcB4c-4-2'], 'c')\n"..
+ "b: type v; value: abcB4c-0\x00\x00\x00abcB4c-2\x00\x00\x00abcB4c-3\x00abcB4c-4\x00abcB4c-4-2 (['abcB4c-0', '\x00', 'abcB4c-2\x00', '\x00abcB4c-3', 'abcB4c-4\x00abcB4c-4-2']), expr: abcB4c-0\x00\x00\x00abcB4c-2\x00\x00\x00abcB4c-3\x00abcB4c-4\x00abcB4c-4-2 (['abcB4c-0', '\x00', 'abcB4c-2\x00', '\x00abcB4c-3', 'abcB4c-4\x00abcB4c-4-2'])\n"..
+ '==\n'..
+ '=abcB4c-0\n'..
+ '\x00\n'..
+ 'abcB4c-2\x00\n'..
+ '\x00abcB4c-3\n'..
+ 'abcB4c-4\x00abcB4c-4-2=')
+ end)
+
+ it('setting lists with NLs with setreg(), part 3', function()
+ execute('so test_eval_setup.vim')
+ execute([=[call SetReg('c', ['abcC4l-0', "\n", "abcC4l-2\n", "\nabcC4l-3", "abcC4l-4\nabcC4l-4-2"], 'l')]=])
+ expect(
+ '\n'..
+ "{{{2 setreg('c', ['abcC4l-0', '\x00', 'abcC4l-2\x00', '\x00abcC4l-3', 'abcC4l-4\x00abcC4l-4-2'], 'l')\n"..
+ "c: type V; value: abcC4l-0\x00\x00\x00abcC4l-2\x00\x00\x00abcC4l-3\x00abcC4l-4\x00abcC4l-4-2\x00 (['abcC4l-0', '\x00', 'abcC4l-2\x00', '\x00abcC4l-3', 'abcC4l-4\x00abcC4l-4-2']), expr: abcC4l-0\x00\x00\x00abcC4l-2\x00\x00\x00abcC4l-3\x00abcC4l-4\x00abcC4l-4-2\x00 (['abcC4l-0', '\x00', 'abcC4l-2\x00', '\x00abcC4l-3', 'abcC4l-4\x00abcC4l-4-2'])\n"..
+ '==\n'..
+ 'abcC4l-0\n'..
+ '\x00\n'..
+ 'abcC4l-2\x00\n'..
+ '\x00abcC4l-3\n'..
+ 'abcC4l-4\x00abcC4l-4-2\n'..
+ '==')
+ end)
+ it('setting lists with NLs with setreg(), part 4', function()
+ execute('so test_eval_setup.vim')
+ execute([=[call SetReg('d', ['abcD4b-0', "\n", "abcD4b-2\n", "\nabcD4b-3", "abcD4b-4\nabcD4b-4-2"], 'b')]=])
+ expect(
+ '\n'..
+ "{{{2 setreg('d', ['abcD4b-0', '\x00', 'abcD4b-2\x00', '\x00abcD4b-3', 'abcD4b-4\x00abcD4b-4-2'], 'b')\n"..
+ "d: type \x1619; value: abcD4b-0\x00\x00\x00abcD4b-2\x00\x00\x00abcD4b-3\x00abcD4b-4\x00abcD4b-4-2 (['abcD4b-0', '\x00', 'abcD4b-2\x00', '\x00abcD4b-3', 'abcD4b-4\x00abcD4b-4-2']), expr: abcD4b-0\x00\x00\x00abcD4b-2\x00\x00\x00abcD4b-3\x00abcD4b-4\x00abcD4b-4-2 (['abcD4b-0', '\x00', 'abcD4b-2\x00', '\x00abcD4b-3', 'abcD4b-4\x00abcD4b-4-2'])\n"..
+ '==\n'..
+ '=abcD4b-0 =\n'..
+ ' \x00\n'..
+ ' abcD4b-2\x00\n'..
+ ' \x00abcD4b-3\n'..
+ ' abcD4b-4\x00abcD4b-4-2')
+ end)
+ it('setting lists with NLs with setreg(), part 5', function()
+ execute('so test_eval_setup.vim')
+ execute([=[call SetReg('e', ['abcE4b10-0', "\n", "abcE4b10-2\n", "\nabcE4b10-3", "abcE4b10-4\nabcE4b10-4-2"], 'b10')]=])
+ expect(
+ '\n'..
+ "{{{2 setreg('e', ['abcE4b10-0', '\x00', 'abcE4b10-2\x00', '\x00abcE4b10-3', 'abcE4b10-4\x00abcE4b10-4-2'], 'b10')\n"..
+ "e: type \x1610; value: abcE4b10-0\x00\x00\x00abcE4b10-2\x00\x00\x00abcE4b10-3\x00abcE4b10-4\x00abcE4b10-4-2 (['abcE4b10-0', '\x00', 'abcE4b10-2\x00', '\x00abcE4b10-3', 'abcE4b10-4\x00abcE4b10-4-2']), expr: abcE4b10-0\x00\x00\x00abcE4b10-2\x00\x00\x00abcE4b10-3\x00abcE4b10-4\x00abcE4b10-4-2 (['abcE4b10-0', '\x00', 'abcE4b10-2\x00', '\x00abcE4b10-3', 'abcE4b10-4\x00abcE4b10-4-2'])\n"..
+ '==\n'..
+ '=abcE4b10-0=\n'..
+ ' \x00\n'..
+ ' abcE4b10-2\x00\n'..
+ ' \x00abcE4b10-3\n'..
+ ' abcE4b10-4\x00abcE4b10-4-2')
+ end)
+
+ it('search and expressions', function()
+ execute('so test_eval_setup.vim')
+ execute([=[call SetReg('/', ['abc/'])]=])
+ execute([=[call SetReg('/', ["abc/\n"])]=])
+ execute([=[call SetReg('=', ['"abc/"'])]=])
+ execute([=[call SetReg('=', ["\"abc/\n\""])]=])
+ expect([[
+
+ {{{2 setreg('/', ['abc/'])
+ /: type v; value: abc/ (['abc/']), expr: abc/ (['abc/'])
+ ==
+ =abc/=
+ {{{2 setreg('/', ['abc/]]..'\x00'..[['])
+ /: type v; value: abc/]].."\x00 (['abc/\x00']), expr: abc/\x00 (['abc/\x00"..[['])
+ ==
+ =abc/]]..'\x00'..[[=
+ {{{2 setreg('=', ['"abc/"'])
+ =: type v; value: abc/ (['abc/']), expr: "abc/" (['"abc/"'])
+ {{{2 setreg('=', ['"abc/]]..'\x00'..[["'])
+ =: type v; value: abc/]].."\x00 (['abc/\x00"..[[']), expr: "abc/]]..'\x00'..[[" (['"abc/]]..'\x00'..[["'])]])
+ end)
+
+ if has_clipboard() then
+ it('system clipboard', 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]])
+ execute('so test_eval_setup.vim')
+ -- Save and restore system clipboard.
+ execute("let _clipreg = ['*', getreg('*'), getregtype('*')]")
+ execute('let _clipopt = &cb')
+ execute("let &cb='unnamed'")
+ execute('5y')
+ execute('AR *')
+ execute('tabdo :windo :echo "hi"')
+ execute('6y')
+ execute('AR *')
+ execute('let &cb=_clipopt')
+ execute("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)
+ else
+ pending('system clipboard not available', function() end)
+ end
+
+ it('errors', function()
+ source([[
+ fun ErrExe(str)
+ call append('$', 'Executing '.a:str)
+ try
+ execute a:str
+ catch
+ $put =v:exception
+ endtry
+ endfun]])
+ execute([[call ErrExe('call setreg()')]])
+ execute([[call ErrExe('call setreg(1)')]])
+ execute([[call ErrExe('call setreg(1, 2, 3, 4)')]])
+ execute([=[call ErrExe('call setreg([], 2)')]=])
+ execute([[call ErrExe('call setreg(1, {})')]])
+ execute([=[call ErrExe('call setreg(1, 2, [])')]=])
+ execute([=[call ErrExe('call setreg("/", ["1", "2"])')]=])
+ execute([=[call ErrExe('call setreg("=", ["1", "2"])')]=])
+ execute([=[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()
+ execute('try')
+ execute(' func! g:test()')
+ execute(' echo "test"')
+ execute(' endfunc')
+ execute('catch')
+ execute(' let tmp = v:exception')
+ execute('endtry')
+ eq('Vim(function):E128: Function name must start with a capital or "s:": g:test()', eval('tmp'))
+ end)
+
+ it('Function name followed by #', function()
+ execute('try')
+ execute(' func! test2() "#')
+ execute(' echo "test2"')
+ execute(' endfunc')
+ execute('catch')
+ execute(' let tmp = v:exception')
+ execute('endtry')
+ eq('Vim(function):E128: Function name must start with a capital or "s:": test2() "#', eval('tmp'))
+ end)
+
+ it('function name includes a colon', function()
+ execute('try')
+ execute(' func! b:test()')
+ execute(' echo "test"')
+ execute(' endfunc')
+ execute('catch')
+ execute(' let tmp = v:exception')
+ execute('endtry')
+ eq('Vim(function):E128: Function name must start with a capital or "s:": b:test()', eval('tmp'))
+ end)
+
+ it('function name starting with/without "g:", buffer-local funcref', function()
+ execute('function! g:Foo(n)')
+ execute(" $put ='called Foo(' . a:n . ')'")
+ execute('endfunction')
+ execute("let b:my_func = function('Foo')")
+ execute('call b:my_func(1)')
+ execute('echo g:Foo(2)')
+ execute('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()
+ execute('try')
+ execute(" call append($, 'foobar')")
+ execute('catch')
+ execute(' let tmp = v:exception')
+ execute('endtry')
+ eq('Vim(call):E116: Invalid arguments for function append', eval('tmp'))
+ end)
+
+ it('getcurpos/setpos', function()
+ insert([[
+ 012345678
+ 012345678
+
+ start:]])
+ execute('/^012345678')
+ feed('6l')
+ execute('let sp = getcurpos()')
+ feed('0')
+ execute("call setpos('.', sp)")
+ feed('jyl')
+ execute('$put')
+ expect([[
+ 012345678
+ 012345678
+
+ start:
+ 6]])
+ end)
+end)
diff --git a/test/functional/legacy/glob2regpat_spec.lua b/test/functional/legacy/glob2regpat_spec.lua
new file mode 100644
index 0000000000..357128bcb6
--- /dev/null
+++ b/test/functional/legacy/glob2regpat_spec.lua
@@ -0,0 +1,22 @@
+-- Tests for signs
+
+local helpers = require('test.functional.helpers')
+local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect
+local eq, neq, eval = helpers.eq, helpers.neq, helpers.eval
+
+describe('glob2regpat()', function()
+ before_each(clear)
+
+ it('handles invalid input', function()
+ execute('call glob2regpat(1.33)')
+ helpers.feed('<cr>')
+ neq(nil, string.find(eval('v:errmsg'), '^E806:'))
+ end)
+ it('returns ^$ for empty input', function()
+ eq('^$', eval("glob2regpat('')"))
+ end)
+ it('handles valid input', function()
+ eq('^foo\\.', eval("glob2regpat('foo.*')"))
+ eq('\\.vim$', eval("glob2regpat('*.vim')"))
+ end)
+end)
diff --git a/test/functional/legacy/listlbr_utf8_spec.lua b/test/functional/legacy/listlbr_utf8_spec.lua
index 69e7b87a21..df0e817533 100644
--- a/test/functional/legacy/listlbr_utf8_spec.lua
+++ b/test/functional/legacy/listlbr_utf8_spec.lua
@@ -2,6 +2,7 @@
local helpers = require('test.functional.helpers')
local source = helpers.source
+local feed = helpers.feed
local clear, expect = helpers.clear, helpers.expect
describe('linebreak', function()
@@ -32,16 +33,19 @@ describe('linebreak', function()
$put =g:line
wincmd p
endfu
+ "
let g:test ="Test 1: set linebreak + set list + fancy listchars"
exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
redraw!
let line=ScreenChar(winwidth(0),4)
call DoRecordScreen()
+ "
let g:test ="Test 2: set nolinebreak list"
set list nolinebreak
redraw!
let line=ScreenChar(winwidth(0),4)
call DoRecordScreen()
+ "
let g:test ="Test 3: set linebreak nolist"
$put =\"\t*mask = nil;\"
$
@@ -50,6 +54,7 @@ describe('linebreak', function()
redraw!
let line=ScreenChar(winwidth(0),4)
call DoRecordScreen()
+ "
let g:test ="Test 4: set linebreak list listchars and concealing"
let c_defines=['#define ABCDE 1','#define ABCDEF 1','#define ABCDEFG 1','#define ABCDEFGH 1', '#define MSG_MODE_FILE 1','#define MSG_MODE_CONSOLE 2','#define MSG_MODE_FILE_AND_CONSOLE 3','#define MSG_MODE_FILE_THEN_CONSOLE 4']
call append('$', c_defines)
@@ -61,6 +66,84 @@ describe('linebreak', function()
redraw!
let line=ScreenChar(winwidth(0),7)
call DoRecordScreen()
+ "
+ let g:test ="Test 5: set linebreak list listchars and concealing part2"
+ let c_defines=['bbeeeeee ; some text']
+ call append('$', c_defines)
+ $
+ norm! zt
+ set nowrap ts=2 list linebreak listchars=tab:>- cole=2 concealcursor=n
+ syn clear
+ syn match meaning /;\s*\zs.*/
+ syn match hasword /^\x\{8}/ contains=word
+ syn match word /\<\x\{8}\>/ contains=beginword,endword contained
+ syn match beginword /\<\x\x/ contained conceal
+ syn match endword /\x\{6}\>/ contained
+ hi meaning guibg=blue
+ hi beginword guibg=green
+ hi endword guibg=red
+ redraw!
+ let line=ScreenChar(winwidth(0),1)
+ call DoRecordScreen()
+ "
+ let g:test ="Test 6: Screenattributes for comment"
+ $put =g:test
+ call append('$', ' /* and some more */')
+ exe "set ft=c ts=7 linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
+ syntax on
+ hi SpecialKey term=underline ctermfg=red guifg=red
+ let attr=[]
+ nnoremap <expr> GG ":let attr += ['".screenattr(screenrow(),screencol())."']\n"
+ $
+ norm! zt0
+ ]])
+ feed('GGlGGlGGlGGlGGlGGlGGlGGlGGlGGl')
+ source([[
+ call append('$', ['ScreenAttributes for test6:'])
+ if attr[0] != attr[1] && attr[1] != attr[3] && attr[3] != attr[5]
+ call append('$', "Attribut 0 and 1 and 3 and 5 are different!")
+ else
+ call append('$', "Not all attributes are different")
+ endif
+ set cpo&vim linebreak selection=exclusive
+ let g:test ="Test 8: set linebreak with visual block mode and v_b_A and selection=exclusive and multibyte char"
+ $put =g:test
+ ]])
+ feed("Golong line: <Esc>40afoobar <Esc>aTARGETÃ' at end<Esc>")
+ source([[
+ exe "norm! $3B\<C-v>eAx\<Esc>"
+ "
+ let g:test ="Test 9: a multibyte sign and colorcolumn"
+ let attr=[]
+ let attr2=[]
+ $put =''
+ $put ='a b c'
+ $put ='a b c'
+ set list nolinebreak cc=3
+ ]])
+ feed(':sign define foo text=<C-v>uff0b<CR>')
+ source([[
+ sign place 1 name=foo line=50 buffer=2
+ norm! 2kztj
+ let line1=line('.')
+ ]])
+ feed('0GGlGGlGGlGGl')
+ source([[
+ let line2=line('.')
+ let attr2=attr
+ let attr=[]
+ ]])
+ feed('0GGlGGlGGlGGl')
+ source([[
+ redraw!
+ let line=ScreenChar(winwidth(0),3)
+ call DoRecordScreen()
+ " expected: attr[2] is different because of colorcolumn
+ if attr[0] != attr2[0] || attr[1] != attr2[1] || attr[2] != attr2[2]
+ call append('$', "Screen attributes are different!")
+ else
+ call append('$', "Screen attributes are the same!")
+ endif
]])
-- Assert buffer contents.
@@ -102,6 +185,25 @@ describe('linebreak', function()
#define >CDEFGH>----1
#define >_FILE>--------->--->---1
#define >_CONSOLE>---------->---2
- #define >_FILE_AND_CONSOLE>---------3 ]])
+ #define >_FILE_AND_CONSOLE>---------3
+ bbeeeeee ; some text
+
+ Test 5: set linebreak list listchars and concealing part2
+ eeeeee>--->-;>some text
+ Test 6: Screenattributes for comment
+ /* and some more */
+ ScreenAttributes for test6:
+ Attribut 0 and 1 and 3 and 5 are different!
+ Test 8: set linebreak with visual block mode and v_b_A and selection=exclusive and multibyte char
+ long line: foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar TARGETÃx' at end
+
+ a b c
+ a b c
+
+ Test 9: a multibyte sign and colorcolumn
+ ¶
+ +a b c¶
+ a b c¶
+ Screen attributes are the same!]])
end)
end)
diff --git a/test/functional/legacy/quickfix_spec.lua b/test/functional/legacy/quickfix_spec.lua
new file mode 100644
index 0000000000..7a9958b949
--- /dev/null
+++ b/test/functional/legacy/quickfix_spec.lua
@@ -0,0 +1,18 @@
+-- Test for the quickfix commands.
+
+local helpers = require('test.functional.helpers')
+local insert, source = helpers.insert, helpers.source
+local clear, expect = helpers.clear, helpers.expect
+
+describe('helpgrep', function()
+ before_each(clear)
+
+ it('works', function()
+ source([[
+ helpgrep quickfix
+ copen
+ " This wipes out the buffer, make sure that doesn't cause trouble.
+ cclose
+ ]])
+ end)
+end)
diff --git a/test/functional/ui/mouse_spec.lua b/test/functional/ui/mouse_spec.lua
index 30f37a7463..b3992c4a89 100644
--- a/test/functional/ui/mouse_spec.lua
+++ b/test/functional/ui/mouse_spec.lua
@@ -14,6 +14,7 @@ describe('Mouse input', function()
before_each(function()
clear()
nvim('set_option', 'mouse', 'a')
+ nvim('set_option', 'listchars', 'eol:$')
-- set mouset to very high value to ensure that even in valgrind/travis,
-- nvim will still pick multiple clicks
nvim('set_option', 'mouset', 5000)