aboutsummaryrefslogtreecommitdiff
path: root/test/functional/helpers.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/helpers.lua')
-rw-r--r--test/functional/helpers.lua119
1 files changed, 41 insertions, 78 deletions
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua
index 70f4fcf9e5..fcef1bd621 100644
--- a/test/functional/helpers.lua
+++ b/test/functional/helpers.lua
@@ -1,10 +1,11 @@
+require('coxpcall')
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'}
+local nvim_argv = {nvim_prog, '-u', 'NONE', '-i', 'NONE', '-N', '--embed'}
if os.getenv('VALGRIND') then
local log_file = os.getenv('VALGRIND_LOG') or 'valgrind-%p.log'
@@ -23,74 +24,7 @@ if os.getenv('VALGRIND') then
nvim_argv = valgrind_argv
end
-local session
-
-local rawfeed
-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)
- rawfeed([[:function BeforeEachTest()
- set all&
- redir => groups
- silent augroup
- redir END
- for group in split(groups)
- exe 'augroup '.group
- autocmd!
- augroup END
- endfor
- autocmd!
- tabnew
- let curbufnum = eval(bufnr('%'))
- redir => buflist
- silent ls!
- redir END
- let bufnums = []
- for buf in split(buflist, '\n')
- let bufnum = eval(split(buf, '[ u]')[0])
- if bufnum != curbufnum
- call add(bufnums, bufnum)
- endif
- endfor
- if len(bufnums) > 0
- exe 'silent bwipeout! '.join(bufnums, ' ')
- endif
- silent tabonly
- for k in keys(g:)
- exe 'unlet g:'.k
- endfor
- filetype plugin indent off
- mapclear
- mapclear!
- abclear
- comclear
- let regs = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-"'
- let i = 0
- while i < strlen(regs)
- call setreg(regs[i], '')
- let i = i+1
- endwhile
- redir => funcs
- silent! function
- redir END
- for fname in split(funcs, '\n')
- let matches = matchlist(fname, '\v^function ([^()<>]+)')
- if type([]) == type(matches) && matches[1] !~ 'BeforeEachTest'
- exe 'silent! delfunc '.matches[1]
- endif
- endfor
- let options = ['shell', 'fileignorecase']
- for option in options
- exe 'set '.option.'&'
- endfor
- endfunction
- ]])
-end
-
-local loop_running, last_error
+local session, loop_running, last_error
local function request(method, ...)
local status, rv = session:request(method, ...)
@@ -112,9 +46,32 @@ local function next_message()
return session:next_message()
end
+local function call_and_stop_on_error(...)
+ local status, result = copcall(...)
+ if not status then
+ session:stop()
+ last_error = result
+ return ''
+ end
+ return result
+end
+
local function run(request_cb, notification_cb, setup_cb)
+
+ local function on_request(method, args)
+ return call_and_stop_on_error(request_cb, method, args)
+ end
+
+ local function on_notification(method, args)
+ call_and_stop_on_error(notification_cb, method, args)
+ end
+
+ local function on_setup()
+ call_and_stop_on_error(setup_cb)
+ end
+
loop_running = true
- session:run(request_cb, notification_cb, setup_cb)
+ session:run(on_request, on_notification, on_setup)
loop_running = false
if last_error then
local err = last_error
@@ -153,7 +110,7 @@ local function buffer_slice(start, stop, buffer_idx)
end
local function nvim_replace_termcodes(input)
- return request('vim_replace_termcodes', input, false, true, true )
+ return request('vim_replace_termcodes', input, false, true, true)
end
local function dedent(str)
@@ -178,22 +135,29 @@ local function dedent(str)
return str
end
-local function clear()
- nvim_command('call BeforeEachTest()')
-end
-
local function feed(...)
for _, v in ipairs({...}) do
nvim_feed(nvim_replace_termcodes(dedent(v)))
end
end
-function rawfeed(...)
+local function rawfeed(...)
for _, v in ipairs({...}) do
nvim_feed(dedent(v), 'nt')
end
end
+local function clear()
+ if session then
+ session:request('vim_command', 'qa!')
+ end
+ 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 insert(...)
nvim_feed('i', 'nt')
rawfeed(...)
@@ -271,12 +235,11 @@ local function curtab(method, ...)
return tabpage(method, tab, ...)
end
-restart()
+clear()
return {
clear = clear,
dedent = dedent,
- restart = restart,
rawfeed = rawfeed,
insert = insert,
feed = feed,