mirror of
https://github.com/neovim/neovim.git
synced 2025-09-09 21:08:17 +00:00
test: Replace vroom by lua/busted for functional tests
The 'lupa' python package provides a simple way to seamless integrate lua and python code. This commit replaces vroom by a python script that exposes the 'neovim' package to a lua state, and invokes busted to run functional tests. This is a temporary solution that will enable writing functional tests using lua/bused while a lua client library is not available. The reason for dropping vroom is flexibility: Lua/busted has a nice DSL-style syntax while also providing the customization power of a full programming language. Another reason is to use a single framework for unit/functional tests. Two other changes were performed in this commit: - Instead of "gcc-unittest/gcc-ia32", the travis builds for gcc are now identified by "gcc/gcc-32". They will run unit/functional tests for both 64 and 32 bits. - Old integration tests(in src/nvim/testdir) are now ran by the 'oldtest' target
This commit is contained in:
81
scripts/run-functional-tests.py
Normal file
81
scripts/run-functional-tests.py
Normal file
@@ -0,0 +1,81 @@
|
||||
# Run functional tests using lua, busted and the python client
|
||||
|
||||
import os
|
||||
import sys
|
||||
import textwrap
|
||||
|
||||
from lupa import LuaRuntime
|
||||
from neovim import Nvim, spawn_session
|
||||
|
||||
|
||||
# Extract arguments
|
||||
busted_script = sys.argv[1]
|
||||
busted_argv = sys.argv[2:]
|
||||
|
||||
# Setup a lua state for running busted
|
||||
lua = LuaRuntime(unpack_returned_tuples=True)
|
||||
lua_globals = lua.globals()
|
||||
|
||||
# helper to transform iterables into lua tables
|
||||
list_to_table = lua.eval('''
|
||||
function(l)
|
||||
local t = {}
|
||||
for i, item in python.enumerate(l) do t[i + 1] = item end
|
||||
return t
|
||||
end
|
||||
''')
|
||||
|
||||
dict_to_table = lua.eval('''
|
||||
function(d)
|
||||
local t = {}
|
||||
for k, v in python.iterex(d.items()) do t[k] = v end
|
||||
return t
|
||||
end
|
||||
''')
|
||||
|
||||
nvim_prog = os.environ.get('NVIM_PROG', 'build/bin/nvim')
|
||||
nvim_argv = [nvim_prog, '-u', 'NONE', '--embed']
|
||||
|
||||
if 'VALGRIND' in os.environ:
|
||||
log_file = os.environ.get('VALGRIND_LOG', 'valgrind-%p.log')
|
||||
valgrind_argv = ['valgrind', '-q', '--tool=memcheck', '--leak-check=yes',
|
||||
'--track-origins=yes', '--suppressions=.valgrind.supp',
|
||||
'--log-file={0}'.format(log_file)]
|
||||
if 'VALGRIND_GDB' in os.environ:
|
||||
valgrind_argv += ['--vgdb=yes', '--vgdb-error=0']
|
||||
nvim_argv = valgrind_argv + nvim_argv
|
||||
|
||||
session = spawn_session(nvim_argv)
|
||||
nvim = Nvim.from_session(session)
|
||||
|
||||
def nvim_command(cmd):
|
||||
nvim.command(cmd)
|
||||
|
||||
def nvim_feed(input, mode=''):
|
||||
nvim.feedkeys(input)
|
||||
|
||||
def buffer_slice(start=None, stop=None, buffer_idx=None):
|
||||
rv = '\n'.join(nvim.buffers[buffer_idx or 0][start:stop])
|
||||
return rv
|
||||
|
||||
def nvim_replace_termcodes(input, *opts):
|
||||
return nvim.replace_termcodes(input, *opts)
|
||||
|
||||
expose = [
|
||||
nvim_command,
|
||||
nvim_feed,
|
||||
nvim_replace_termcodes,
|
||||
buffer_slice,
|
||||
textwrap.dedent,
|
||||
]
|
||||
|
||||
for fn in expose:
|
||||
lua_globals[fn.__name__] = fn
|
||||
|
||||
# Set 'arg' global to let busted parse arguments
|
||||
lua_globals['arg'] = list_to_table(busted_argv)
|
||||
|
||||
# Read the busted script and execute in the lua state
|
||||
with open(busted_script) as f:
|
||||
busted_setup = f.read()
|
||||
lua.execute(busted_setup)
|
Reference in New Issue
Block a user