Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
290 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
local helpers = require('test.functional.helpers')(after_each) | ||
|
||
local clear = helpers.clear | ||
local eq = helpers.eq | ||
local exc_exec = helpers.exc_exec | ||
|
||
describe('Up to MAX_FUNC_ARGS arguments are handled by', function() | ||
local max_func_args = 20 -- from eval.h | ||
local range = helpers.funcs.range | ||
|
||
before_each(clear) | ||
|
||
it('printf()', function() | ||
local printf = helpers.funcs.printf | ||
local rep = helpers.funcs['repeat'] | ||
local expected = '2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,' | ||
eq(expected, printf(rep('%d,', max_func_args-1), unpack(range(2, max_func_args)))) | ||
local ret = exc_exec('call printf("", 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)') | ||
eq('Vim(call):E740: Too many arguments for function printf', ret) | ||
end) | ||
|
||
it('rpcnotify()', function() | ||
local rpcnotify = helpers.funcs.rpcnotify | ||
local ret = rpcnotify(0, 'foo', unpack(range(3, max_func_args))) | ||
eq(1, ret) | ||
ret = exc_exec('call rpcnotify(0, "foo", 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)') | ||
eq('Vim(call):E740: Too many arguments for function rpcnotify', ret) | ||
end) | ||
end) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,221 @@ | ||
local helpers = require('test.functional.helpers')(after_each) | ||
|
||
local clear = helpers.clear | ||
local eq = helpers.eq | ||
local exc_exec = helpers.exc_exec | ||
local clear = helpers.clear | ||
local funcs = helpers.funcs | ||
local dedent = helpers.dedent | ||
local redir_exec = helpers.redir_exec | ||
|
||
describe('Up to MAX_FUNC_ARGS arguments are handled by', function() | ||
local max_func_args = 20 -- from eval.h | ||
local range = helpers.funcs.range | ||
before_each(clear) | ||
|
||
before_each(clear) | ||
local function check_nofunc(fname) | ||
eq(0, funcs.exists('*' .. fname)) | ||
end | ||
|
||
it('printf()', function() | ||
local printf = helpers.funcs.printf | ||
local rep = helpers.funcs['repeat'] | ||
local expected = '2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,' | ||
eq(expected, printf(rep('%d,', max_func_args-1), unpack(range(2, max_func_args)))) | ||
local ret = exc_exec('call printf("", 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)') | ||
eq('Vim(call):E740: Too many arguments for function printf', ret) | ||
end) | ||
local function check_func(fname, body, indent) | ||
if type(body) == 'number' then | ||
body = ('return %i'):format(body) | ||
end | ||
eq(dedent(([[ | ||
it('rpcnotify()', function() | ||
local rpcnotify = helpers.funcs.rpcnotify | ||
local ret = rpcnotify(0, 'foo', unpack(range(3, max_func_args))) | ||
eq(1, ret) | ||
ret = exc_exec('call rpcnotify(0, "foo", 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)') | ||
eq('Vim(call):E740: Too many arguments for function rpcnotify', ret) | ||
function %s()%s | ||
endfunction]] | ||
), 3):format( | ||
fname, | ||
body and ('\n1' .. (' '):rep(2 + (indent or 8)) .. body) or ''), | ||
redir_exec('function ' .. fname)) | ||
end | ||
|
||
describe(':endfunction', function() | ||
it('accepts bang', function() | ||
eq('', redir_exec([[ | ||
function F() | ||
endfunction! | ||
]])) | ||
check_func('F') | ||
eq('', redir_exec([[ | ||
function! F() | ||
return 1 | ||
endfunction! | ||
]])) | ||
check_func('F', 1) | ||
end) | ||
it('accepts comments', function() | ||
eq('', redir_exec([[ | ||
function F1() | ||
endfunction " Comment | ||
]])) | ||
check_func('F1') | ||
eq('', redir_exec([[ | ||
function F2() | ||
endfunction " }}} | ||
]])) | ||
check_func('F2') | ||
eq('', redir_exec([[ | ||
function F3() | ||
endfunction " F3 | ||
]])) | ||
check_func('F3') | ||
eq('', redir_exec([[ | ||
function F4() | ||
endfunction! " F4 | ||
]])) | ||
check_func('F4') | ||
eq('', redir_exec([[ | ||
function! F4() | ||
return 2 | ||
endfunction! " F4 | ||
]])) | ||
check_func('F4', 2) | ||
end) | ||
it('accepts function name', function() | ||
eq('', redir_exec([[ | ||
function F0() | ||
endfunction F0 | ||
]])) | ||
check_func('F0') | ||
eq('', redir_exec([[ | ||
function F1() | ||
endfunction! F1 | ||
]])) | ||
check_func('F1') | ||
eq('', redir_exec([[ | ||
function! F2() | ||
endfunction! F2 | ||
]])) | ||
check_func('F2') | ||
eq('', redir_exec([[ | ||
function! F2() | ||
return 3 | ||
endfunction! F2 | ||
]])) | ||
check_func('F2', 3) | ||
end) | ||
it('accepts weird characters', function() | ||
eq('', redir_exec([[ | ||
function F1() | ||
endfunction: }}} | ||
]])) | ||
check_func('F1') | ||
-- From accurev | ||
eq('', redir_exec([[ | ||
function F2() | ||
endfunction :}}} | ||
]])) | ||
check_func('F2') | ||
-- From cream-vimabbrev | ||
eq('', redir_exec([[ | ||
function F3() | ||
endfunction 1}}} | ||
]])) | ||
check_func('F3') | ||
-- From pyunit | ||
eq('', redir_exec([[ | ||
function F4() | ||
endfunction # }}} | ||
]])) | ||
check_func('F4') | ||
-- From vim-lldb | ||
eq('', redir_exec([[ | ||
function F5() | ||
endfunction() | ||
]])) | ||
check_func('F5') | ||
-- From vim-mail | ||
eq('', redir_exec([[ | ||
function F6() | ||
endfunction; | ||
]])) | ||
check_func('F6') | ||
end) | ||
it('accepts commented bar', function() | ||
eq('', redir_exec([[ | ||
function F1() | ||
endfunction " F1 | echo 42 | ||
]])) | ||
check_func('F1') | ||
eq('', redir_exec([[ | ||
function! F1() | ||
return 42 | ||
endfunction! " F1 | echo 42 | ||
]])) | ||
check_func('F1', 42) | ||
end) | ||
it('errors out on an uncommented bar', function() | ||
eq('\nE488: Trailing characters: | echo 42', redir_exec([[ | ||
function F1() | ||
endfunction | echo 42 | ||
]])) | ||
check_nofunc('F1') | ||
end) | ||
it('allows running multiple commands', function() | ||
eq('\n2', redir_exec([[ | ||
function F1() | ||
echo 2 | ||
endfunction | ||
call F1() | ||
]])) | ||
check_func('F1', 'echo 2') | ||
eq('\n2\n3\n4', redir_exec([[ | ||
function F2() | ||
echo 2 | ||
endfunction F2 | ||
function F3() | ||
echo 3 | ||
endfunction " F3 | ||
function! F4() | ||
echo 4 | ||
endfunction! | ||
call F2() | ||
call F3() | ||
call F4() | ||
]])) | ||
check_func('F2', 'echo 2') | ||
check_func('F3', 'echo 3') | ||
check_func('F4', 'echo 4') | ||
end) | ||
it('allows running multiple commands with only one character in between', | ||
function() | ||
eq('\n3', redir_exec(dedent([[ | ||
function! F1() | ||
echo 3 | ||
endfunction! | ||
call F1()]]))) | ||
check_func('F1', 'echo 3', 2) | ||
eq('\n4', redir_exec(dedent([[ | ||
function F5() | ||
echo 4 | ||
endfunction | ||
call F5()]]))) | ||
check_func('F5', 'echo 4', 2) | ||
eq('\n5', redir_exec(dedent([[ | ||
function F6() | ||
echo 5 | ||
endfunction " TEST | ||
call F6()]]))) | ||
check_func('F6', 'echo 5', 2) | ||
eq('\n6', redir_exec(dedent([[ | ||
function F7() | ||
echo 6 | ||
endfunction F7 | ||
call F7()]]))) | ||
check_func('F7', 'echo 6', 2) | ||
eq('\n2\n3\n4', redir_exec(dedent([[ | ||
function F2() | ||
echo 2 | ||
endfunction F2 | ||
function F3() | ||
echo 3 | ||
endfunction " F3 | ||
function! F4() | ||
echo 4 | ||
endfunction! | ||
call F2() | ||
call F3() | ||
call F4()]]))) | ||
check_func('F2', 'echo 2', 2) | ||
check_func('F3', 'echo 3', 2) | ||
check_func('F4', 'echo 4', 2) | ||
end) | ||
end) | ||
-- vim: foldmarker=▶,▲ |
Oops, something went wrong.