neovim/test/functional/legacy/arglist_spec.lua
2016-08-26 08:21:41 +01:00

271 lines
6.5 KiB
Lua

-- Test argument list commands
local helpers = require('test.functional.helpers')(after_each)
local clear, execute, eq = helpers.clear, helpers.execute, helpers.eq
local eval, exc_exec, neq = helpers.eval, helpers.exc_exec, helpers.neq
if helpers.pending_win32(pending) then return end
describe('argument list commands', function()
before_each(clear)
local function init_abc()
execute('args a b c')
execute('next')
end
local function reset_arglist()
execute('arga a | %argd')
end
local function assert_fails(cmd, err)
neq(exc_exec(cmd):find(err), nil)
end
it('test that argidx() works', function()
execute('args a b c')
execute('last')
eq(2, eval('argidx()'))
execute('%argdelete')
eq(0, eval('argidx()'))
execute('args a b c')
eq(0, eval('argidx()'))
execute('next')
eq(1, eval('argidx()'))
execute('next')
eq(2, eval('argidx()'))
execute('1argdelete')
eq(1, eval('argidx()'))
execute('1argdelete')
eq(0, eval('argidx()'))
execute('1argdelete')
eq(0, eval('argidx()'))
end)
it('test that argadd() works', function()
execute('%argdelete')
execute('argadd a b c')
eq(0, eval('argidx()'))
execute('%argdelete')
execute('argadd a')
eq(0, eval('argidx()'))
execute('argadd b c d')
eq(0, eval('argidx()'))
init_abc()
execute('argadd x')
eq({'a', 'b', 'x', 'c'}, eval('argv()'))
eq(1, eval('argidx()'))
init_abc()
execute('0argadd x')
eq({'x', 'a', 'b', 'c'}, eval('argv()'))
eq(2, eval('argidx()'))
init_abc()
execute('1argadd x')
eq({'a', 'x', 'b', 'c'}, eval('argv()'))
eq(2, eval('argidx()'))
init_abc()
execute('$argadd x')
eq({'a', 'b', 'c', 'x'}, eval('argv()'))
eq(1, eval('argidx()'))
init_abc()
execute('$argadd x')
execute('+2argadd y')
eq({'a', 'b', 'c', 'x', 'y'}, eval('argv()'))
eq(1, eval('argidx()'))
execute('%argd')
execute('edit d')
execute('arga')
eq(1, eval('len(argv())'))
eq('d', eval('get(argv(), 0, "")'))
execute('%argd')
execute('new')
execute('arga')
eq(0, eval('len(argv())'))
end)
it('test for [count]argument and [count]argdelete commands', function()
reset_arglist()
execute('let save_hidden = &hidden')
execute('set hidden')
execute('let g:buffers = []')
execute('augroup TEST')
execute([[au BufEnter * call add(buffers, expand('%:t'))]])
execute('augroup END')
execute('argadd a b c d')
execute('$argu')
execute('$-argu')
execute('-argu')
execute('1argu')
execute('+2argu')
execute('augroup TEST')
execute('au!')
execute('augroup END')
eq({'d', 'c', 'b', 'a', 'c'}, eval('g:buffers'))
execute('redir => result')
execute('ar')
execute('redir END')
eq(1, eval([[result =~# 'a b \[c] d']]))
execute('.argd')
eq({'a', 'b', 'd'}, eval('argv()'))
execute('-argd')
eq({'a', 'd'}, eval('argv()'))
execute('$argd')
eq({'a'}, eval('argv()'))
execute('1arga c')
execute('1arga b')
execute('$argu')
execute('$arga x')
eq({'a', 'b', 'c', 'x'}, eval('argv()'))
execute('0arga Y')
eq({'Y', 'a', 'b', 'c', 'x'}, eval('argv()'))
execute('%argd')
eq({}, eval('argv()'))
execute('arga a b c d e f')
execute('2,$-argd')
eq({'a', 'f'}, eval('argv()'))
execute('let &hidden = save_hidden')
-- Setting the argument list should fail when the current buffer has
-- unsaved changes
execute('%argd')
execute('enew!')
execute('set modified')
assert_fails('args x y z', 'E37:')
execute('args! x y z')
eq({'x', 'y', 'z'}, eval('argv()'))
eq('x', eval('expand("%:t")'))
execute('%argdelete')
assert_fails('argument', 'E163:')
end)
it('test for 0argadd and 0argedit', function()
reset_arglist()
execute('arga a b c d')
execute('2argu')
execute('0arga added')
eq({'added', 'a', 'b', 'c', 'd'}, eval('argv()'))
execute('%argd')
execute('arga a b c d')
execute('2argu')
execute('0arge edited')
eq({'edited', 'a', 'b', 'c', 'd'}, eval('argv()'))
execute('2argu')
execute('arga third')
eq({'edited', 'a', 'third', 'b', 'c', 'd'}, eval('argv()'))
end)
it('test for argc()', function()
reset_arglist()
eq(0, eval('argc()'))
execute('argadd a b')
eq(2, eval('argc()'))
end)
it('test for arglistid()', function()
reset_arglist()
execute('arga a b')
eq(0, eval('arglistid()'))
execute('split')
execute('arglocal')
eq(1, eval('arglistid()'))
execute('tabnew | tabfirst')
eq(0, eval('arglistid(2)'))
eq(1, eval('arglistid(1, 1)'))
eq(0, eval('arglistid(2, 1)'))
eq(1, eval('arglistid(1, 2)'))
execute('tabonly | only | enew!')
execute('argglobal')
eq(0, eval('arglistid()'))
end)
it('test for argv()', function()
reset_arglist()
eq({}, eval('argv()'))
eq('', eval('argv(2)'))
execute('argadd a b c d')
eq('c', eval('argv(2)'))
end)
it('test for :argedit command', function()
reset_arglist()
execute('argedit a')
eq({'a'}, eval('argv()'))
eq('a', eval('expand("%:t")'))
execute('argedit b')
eq({'a', 'b'}, eval('argv()'))
eq('b', eval('expand("%:t")'))
execute('argedit a')
eq({'a', 'b'}, eval('argv()'))
eq('a', eval('expand("%:t")'))
assert_fails('argedit a b', 'E172:')
execute('argedit c')
eq({'a', 'c', 'b'}, eval('argv()'))
execute('0argedit x')
eq({'x', 'a', 'c', 'b'}, eval('argv()'))
execute('enew! | set modified')
assert_fails('argedit y', 'E37:')
execute('argedit! y')
eq({'x', 'y', 'a', 'c', 'b'}, eval('argv()'))
execute('%argd')
end)
it('test for :argdelete command', function()
reset_arglist()
execute('args aa a aaa b bb')
execute('argdelete a*')
eq({'b', 'bb'}, eval('argv()'))
eq('aa', eval('expand("%:t")'))
execute('last')
execute('argdelete %')
eq({'b'}, eval('argv()'))
assert_fails('argdelete', 'E471:')
assert_fails('1,100argdelete', 'E16:')
execute('%argd')
end)
it('test for the :next, :prev, :first, :last, :rewind commands', function()
reset_arglist()
execute('args a b c d')
execute('last')
eq(3, eval('argidx()'))
assert_fails('next', 'E165:')
execute('prev')
eq(2, eval('argidx()'))
execute('Next')
eq(1, eval('argidx()'))
execute('first')
eq(0, eval('argidx()'))
assert_fails('prev', 'E164:')
execute('3next')
eq(3, eval('argidx()'))
execute('rewind')
eq(0, eval('argidx()'))
execute('%argd')
end)
end)