test: Small fixes and improvements to functional helpers.lua

- Move the cleanup function definition into `restart()` so restart can be
  selectively used as a hook
- Improve error handling: Before this, errors while running the event loop would
  cause busted to get stuck. Now the error is properly raised by stopping the
  event loop first.
This commit is contained in:
Thiago de Arruda
2014-10-27 18:34:42 -03:00
parent 4d70fe89bf
commit 53ce5493fa

View File

@@ -25,19 +25,63 @@ end
local session local session
local rawfeed
local function restart() local function restart()
local loop = Loop.new() local loop = Loop.new()
local msgpack_stream = MsgpackStream.new(loop) local msgpack_stream = MsgpackStream.new(loop)
local async_session = AsyncSession.new(msgpack_stream) local async_session = AsyncSession.new(msgpack_stream)
session = Session.new(async_session) session = Session.new(async_session)
loop:spawn(nvim_argv) 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
endfunction
]])
end end
restart()
local loop_running, last_error
local function request(method, ...) local function request(method, ...)
local status, rv = session:request(method, ...) local status, rv = session:request(method, ...)
if not status then if not status then
error(rv[2]) if loop_running then
last_error = rv[2]
session:stop()
else
error(rv[2])
end
end end
return rv return rv
end end
@@ -47,7 +91,14 @@ local function next_message()
end end
local function run(request_cb, notification_cb, setup_cb) local function run(request_cb, notification_cb, setup_cb)
loop_running = true
session:run(request_cb, notification_cb, setup_cb) session:run(request_cb, notification_cb, setup_cb)
loop_running = false
if last_error then
local err = last_error
last_error = nil
error(err)
end
end end
local function stop() local function stop()
@@ -115,7 +166,7 @@ local function feed(...)
end end
end end
local function rawfeed(...) function rawfeed(...)
for _, v in ipairs({...}) do for _, v in ipairs({...}) do
nvim_feed(dedent(v), 'nt') nvim_feed(dedent(v), 'nt')
end end
@@ -138,14 +189,6 @@ local function execute(...)
end end
end end
local function eval(expr)
local status, result = pcall(function() return nvim_eval(expr) end)
if not status then
error('Failed to evaluate expression "' .. expr .. '"')
end
return result
end
local function eq(expected, actual) local function eq(expected, actual)
return assert.are.same(expected, actual) return assert.are.same(expected, actual)
end end
@@ -158,44 +201,6 @@ local function expect(contents, first, last, buffer_index)
return eq(dedent(contents), buffer_slice(first, last, buffer_index)) return eq(dedent(contents), buffer_slice(first, last, buffer_index))
end end
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
endfunction
]])
local function ok(expr) local function ok(expr)
assert.is_true(expr) assert.is_true(expr)
@@ -245,6 +250,8 @@ local function curtab(method, ...)
return tabpage(method, tab, ...) return tabpage(method, tab, ...)
end end
restart()
return { return {
clear = clear, clear = clear,
restart = restart, restart = restart,
@@ -252,7 +259,8 @@ return {
insert = insert, insert = insert,
feed = feed, feed = feed,
execute = execute, execute = execute,
eval = eval, eval = nvim_eval,
command = nvim_command,
request = request, request = request,
next_message = next_message, next_message = next_message,
run = run, run = run,