aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ui
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/ui')
-rw-r--r--test/functional/ui/messages_spec.lua57
-rw-r--r--test/functional/ui/screen.lua14
2 files changed, 62 insertions, 9 deletions
diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua
index d49d2f0316..976dbe5893 100644
--- a/test/functional/ui/messages_spec.lua
+++ b/test/functional/ui/messages_spec.lua
@@ -4,6 +4,7 @@ local clear, feed = helpers.clear, helpers.feed
local eval = helpers.eval
local eq = helpers.eq
local command = helpers.command
+local set_method_error = helpers.set_method_error
describe('ui/ext_messages', function()
@@ -631,7 +632,7 @@ describe('ui/ext_messages', function()
eq(0, eval('&cmdheight'))
end)
- it('supports multiline messages', function()
+ it('supports multiline messages from lua', function()
feed(':lua error("such\\nmultiline\\nerror")<cr>')
screen:expect{grid=[[
^ |
@@ -641,9 +642,61 @@ describe('ui/ext_messages', function()
{1:~ }|
]], messages={{
content = {{'E5105: Error while calling lua chunk: [string "<VimL compiled string>"]:1: such\nmultiline\nerror', 2}},
- kind = "emsg"
+ kind = "lua_error"
}}}
end)
+
+ it('supports multiline messages from rpc', function()
+ feed(':call rpcrequest(1, "test_method")<cr>')
+
+ screen:expect{grid=[[
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]], messages={{
+ content = {{"Error invoking 'test_method' on channel 1:\ncomplete\nerror\n\nmessage", 2}},
+ kind = "rpc_error"
+ }}, request_cb=function (name)
+ if name == "test_method" then
+ set_method_error("complete\nerror\n\nmessage")
+ end
+ end}
+ end)
+end)
+
+describe('ui/builtin messages', function()
+ local screen
+ before_each(function()
+ clear()
+ screen = Screen.new(60, 7)
+ screen:attach({rgb=true, ext_popupmenu=true})
+ screen:set_default_attr_ids({
+ [1] = {bold = true, foreground = Screen.colors.Blue1},
+ [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
+ [3] = {bold = true, reverse = true},
+ [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
+ })
+ end)
+
+ it('supports multiline messages from rpc', function()
+ feed(':call rpcrequest(1, "test_method")<cr>')
+
+ screen:expect{grid=[[
+ {3: }|
+ {2:Error invoking 'test_method' on channel 1:} |
+ {2:complete} |
+ {2:error} |
+ |
+ {2:message} |
+ {4:Press ENTER or type command to continue}^ |
+ ]], request_cb=function (name)
+ if name == "test_method" then
+ set_method_error("complete\nerror\n\nmessage")
+ end
+ end}
+ end)
end)
describe('ui/ext_messages', function()
diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua
index a81851cbba..044e4cc39c 100644
--- a/test/functional/ui/screen.lua
+++ b/test/functional/ui/screen.lua
@@ -322,7 +322,7 @@ function Screen:expect(expected, attr_ids, attr_ignore)
assert(not (attr_ids ~= nil or attr_ignore ~= nil))
local is_key = {grid=true, attr_ids=true, attr_ignore=true, condition=true,
any=true, mode=true, unchanged=true, intermediate=true,
- reset=true, timeout=true}
+ reset=true, timeout=true, request_cb=true}
for _, v in ipairs(ext_keys) do
is_key[v] = true
end
@@ -497,7 +497,7 @@ function Screen:_wait(check, flags)
return true
end
- run_session(self._session, nil, notification_cb, nil, minimal_timeout)
+ run_session(self._session, flags.request_cb, notification_cb, nil, minimal_timeout)
if not did_flush then
err = "no flush received"
elseif not checked then
@@ -510,7 +510,7 @@ function Screen:_wait(check, flags)
if not success_seen then
did_miminal_timeout = true
- run_session(self._session, nil, notification_cb, nil, timeout-minimal_timeout)
+ run_session(self._session, flags.request_cb, notification_cb, nil, timeout-minimal_timeout)
end
local did_warn = false
@@ -565,12 +565,12 @@ asynchronous (feed(), nvim_input()) and synchronous API calls.
end
end
-function Screen:sleep(ms)
+function Screen:sleep(ms, request_cb)
local function notification_cb(method, args)
assert(method == 'redraw')
self:_redraw(args)
end
- run_session(self._session, nil, notification_cb, nil, ms)
+ run_session(self._session, request_cb, notification_cb, nil, ms)
end
function Screen:_redraw(updates)
@@ -1145,8 +1145,8 @@ end
-- Use snapshot_util({},true) to generate a text-only (no attributes) test.
--
-- @see Screen:redraw_debug()
-function Screen:snapshot_util(attrs, ignore)
- self:sleep(250)
+function Screen:snapshot_util(attrs, ignore, request_cb)
+ self:sleep(250, request_cb)
self:print_snapshot(attrs, ignore)
end