aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/run-functional-tests.py14
-rw-r--r--test/functional/helpers.lua22
2 files changed, 33 insertions, 3 deletions
diff --git a/scripts/run-functional-tests.py b/scripts/run-functional-tests.py
index 1b8fb2ddef..3e931b248c 100644
--- a/scripts/run-functional-tests.py
+++ b/scripts/run-functional-tests.py
@@ -4,7 +4,7 @@ import os
import sys
import textwrap
-from lupa import LuaRuntime
+from lupa import LuaRuntime, as_attrgetter
from neovim import Nvim, spawn_session
@@ -33,6 +33,14 @@ function(d)
end
''')
+def to_table(obj):
+ if type(obj) in [tuple, list]:
+ return list_to_table(list(to_table(e) for e in obj))
+ if type(obj) is dict:
+ return dict_to_table(as_attrgetter(
+ dict((k, to_table(v)) for k, v in obj.items())))
+ return obj
+
nvim_prog = os.environ.get('NVIM_PROG', 'build/bin/nvim')
nvim_argv = [nvim_prog, '-u', 'NONE', '--embed']
@@ -51,6 +59,9 @@ nvim = Nvim.from_session(session)
def nvim_command(cmd):
nvim.command(cmd)
+def nvim_eval(expr):
+ return to_table(nvim.eval(expr))
+
def nvim_feed(input, mode=''):
nvim.feedkeys(input)
@@ -63,6 +74,7 @@ def nvim_replace_termcodes(input, *opts):
expose = [
nvim_command,
+ nvim_eval,
nvim_feed,
nvim_replace_termcodes,
buffer_slice,
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua
index 2b9ddfbe3c..671e34e592 100644
--- a/test/functional/helpers.lua
+++ b/test/functional/helpers.lua
@@ -31,9 +31,24 @@ local function execute(...)
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)
+ return assert.are.same(expected, actual)
+end
+
+local function neq(expected, actual)
+ return assert.are_not.same(expected, actual)
+end
+
local function expect(contents, first, last, buffer_index)
- return assert.are.same(dedent(contents),
- buffer_slice(first, last, buffer_idx))
+ return eq(dedent(contents), buffer_slice(first, last, buffer_idx))
end
rawfeed([[:function BeforeEachTest()
@@ -80,5 +95,8 @@ return {
insert = insert,
feed = feed,
execute = execute,
+ eval = eval,
+ eq = eq,
+ neq = neq,
expect = expect
}