mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			217 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local helpers = require('test.functional.helpers')(after_each)
 | 
						|
 | 
						|
local eq = helpers.eq
 | 
						|
local clear = helpers.clear
 | 
						|
local dedent = helpers.dedent
 | 
						|
local redir_exec = helpers.redir_exec
 | 
						|
 | 
						|
before_each(clear)
 | 
						|
 | 
						|
local function check_func(fname, body, indent)
 | 
						|
  if type(body) == 'number' then
 | 
						|
    body = ('return %i'):format(body)
 | 
						|
  end
 | 
						|
  eq(dedent(([[
 | 
						|
 | 
						|
      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('accepts uncommented bar', function()
 | 
						|
    eq('\n42', redir_exec([[
 | 
						|
      function F1()
 | 
						|
      endfunction | echo 42
 | 
						|
    ]]))
 | 
						|
    check_func('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=▶,▲
 |