From 69561ea922ae6789703c06cbc245929d7c625db9 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Wed, 8 Oct 2014 12:56:28 -0300 Subject: test: Remove run-functional-tests.py Now that the lua client is available, python/lupa are no longer necessary to run the functional tests. The helper functions previously defined in run-functional-tests.py were adapted to test/functional/helpers.lua. --- test/functional/helpers.lua | 93 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) (limited to 'test/functional/helpers.lua') diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua index 671e34e592..6aa78804e7 100644 --- a/test/functional/helpers.lua +++ b/test/functional/helpers.lua @@ -1,3 +1,96 @@ +local Loop = require('nvim.loop') +local MsgpackStream = require('nvim.msgpack_stream') +local AsyncSession = require('nvim.async_session') +local Session = require('nvim.session') + +local nvim_prog = os.getenv('NVIM_PROG') or 'build/bin/nvim' +local nvim_argv = {nvim_prog, '-u', 'NONE', '-N', '--embed'} + +if os.getenv('VALGRIND') then + local log_file = os.getenv('VALGRIND_LOG') or 'valgrind-%p.log' + local valgrind_argv = {'valgrind', '-q', '--tool=memcheck', + '--leak-check=yes', '--track-origins=yes', + '--suppressions=.valgrind.supp', + '--log-file='..log_file} + if os.getenv('VALGRIND_GDB') then + table.insert(valgrind_argv, '--vgdb=yes') + table.insert(valgrind_argv, '--vgdb-error=0') + end + local len = #valgrind_argv + for i = 1, #nvim_argv do + valgrind_argv[i + len] = nvim_argv[i] + end + nvim_argv = valgrind_argv +end + +local session +do + local loop = Loop.new() + local msgpack_stream = MsgpackStream.new(loop) + local async_session = AsyncSession.new(msgpack_stream) + session = Session.new(async_session) + loop:spawn(nvim_argv) +end + +local function request(method, ...) + local status, rv = session:request(method, ...) + if not status then + error(rv[2]) + end + return rv +end + +local function nvim_command(cmd) + request('vim_command', cmd) +end + +local function nvim_eval(expr) + return request('vim_eval', expr) +end + +local function nvim_feed(input, mode) + mode = mode or '' + request('vim_feedkeys', input, mode) +end + +local function buffer_slice(start, stop, buffer_idx) + local include_end = false + if not stop then + stop = -1 + include_end = true + end + local buffer = request('vim_get_buffers')[buffer_idx or 1] + local slice = request('buffer_get_line_slice', buffer, start or 0, stop, + true, include_end) + return table.concat(slice, '\n') +end + +local function nvim_replace_termcodes(input) + return request('vim_replace_termcodes', input, false, true, true ) +end + +local function dedent(str) + -- find minimum common indent across lines + local indent = nil + for line in str:gmatch('[^\n]+') do + local line_indent = line:match('^%s+') or '' + if indent == nil or #line_indent < #indent then + indent = line_indent + end + end + if #indent == 0 then + -- no minimum common indent + return str + end + -- create a pattern for the indent + indent = indent:gsub('%s', '%%s') + -- strip it from the first line + str = str:gsub('^'..indent, '') + -- strip it from the remaining lines + str = str:gsub('[\n]'..indent, '\n') + return str +end + local function clear() nvim_command('call BeforeEachTest()') end -- cgit From 0c2ec77ae0c0bde70b168313f89fa3259682a056 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Wed, 8 Oct 2014 13:56:01 -0300 Subject: test: Use lua to perform sanity API checks Sanity API checks made by the python-client in the api-python travis target were converted to lua and will now live in this repository. This will simplify performing breaking changes to the API as it won't be necessary to send parallel PRs the python-client. --- test/functional/helpers.lua | 83 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 3 deletions(-) (limited to 'test/functional/helpers.lua') diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua index 6aa78804e7..324af6a232 100644 --- a/test/functional/helpers.lua +++ b/test/functional/helpers.lua @@ -24,13 +24,15 @@ if os.getenv('VALGRIND') then end local session -do + +local function restart() local loop = Loop.new() local msgpack_stream = MsgpackStream.new(loop) local async_session = AsyncSession.new(msgpack_stream) session = Session.new(async_session) loop:spawn(nvim_argv) end +restart() local function request(method, ...) local status, rv = session:request(method, ...) @@ -40,6 +42,18 @@ local function request(method, ...) return rv end +local function next_message() + return session:next_message() +end + +local function run(request_cb, notification_cb, setup_cb) + session:run(request_cb, notification_cb, setup_cb) +end + +local function stop() + session:stop() +end + local function nvim_command(cmd) request('vim_command', cmd) end @@ -141,7 +155,7 @@ local function neq(expected, actual) end local function expect(contents, first, last, buffer_index) - return eq(dedent(contents), buffer_slice(first, last, buffer_idx)) + return eq(dedent(contents), buffer_slice(first, last, buffer_index)) end rawfeed([[:function BeforeEachTest() @@ -182,14 +196,77 @@ rawfeed([[:function BeforeEachTest() endfunction ]]) + +local function ok(expr) + assert.is_true(expr) +end + +local function nvim(method, ...) + return request('vim_'..method, ...) +end + +local function buffer(method, ...) + return request('buffer_'..method, ...) +end + +local function window(method, ...) + return request('window_'..method, ...) +end + +local function tabpage(method, ...) + return request('tabpage_'..method, ...) +end + +local function curbuf(method, ...) + local buf = nvim('get_current_buffer') + if not method then + return buf + end + return buffer(method, buf, ...) +end + +local function curbuf_contents() + return table.concat(curbuf('get_line_slice', 0, -1, true, true), '\n') +end + +local function curwin(method, ...) + local win = nvim('get_current_window') + if not method then + return win + end + return window(method, win, ...) +end + +local function curtab(method, ...) + local tab = nvim('get_current_tabpage') + if not method then + return tab + end + return tabpage(method, tab, ...) +end + return { clear = clear, + restart = restart, rawfeed = rawfeed, insert = insert, feed = feed, execute = execute, eval = eval, + request = request, + next_message = next_message, + run = run, + stop = stop, eq = eq, neq = neq, - expect = expect + expect = expect, + ok = ok, + nvim = nvim, + buffer = buffer, + window = window, + tabpage = tabpage, + curbuf = curbuf, + curwin = curwin, + curtab = curtab, + curbuf_contents = curbuf_contents } -- cgit