mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			271 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			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)
 |