mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
test/API: validate channel arg (#8245)
This commit is contained in:
parent
929a732d00
commit
fa6415f13f
@ -56,7 +56,8 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height,
|
|||||||
FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY
|
FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY
|
||||||
{
|
{
|
||||||
if (pmap_has(uint64_t)(connected_uis, channel_id)) {
|
if (pmap_has(uint64_t)(connected_uis, channel_id)) {
|
||||||
api_set_error(err, kErrorTypeException, "UI already attached for channel");
|
api_set_error(err, kErrorTypeException,
|
||||||
|
"UI already attached to channel: %" PRId64, channel_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,7 +131,8 @@ void nvim_ui_detach(uint64_t channel_id, Error *err)
|
|||||||
FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY
|
FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY
|
||||||
{
|
{
|
||||||
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
|
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
|
||||||
api_set_error(err, kErrorTypeException, "UI is not attached for channel");
|
api_set_error(err, kErrorTypeException,
|
||||||
|
"UI not attached to channel: %" PRId64, channel_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
remote_ui_disconnect(channel_id);
|
remote_ui_disconnect(channel_id);
|
||||||
@ -142,7 +144,8 @@ void nvim_ui_try_resize(uint64_t channel_id, Integer width,
|
|||||||
FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY
|
FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY
|
||||||
{
|
{
|
||||||
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
|
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
|
||||||
api_set_error(err, kErrorTypeException, "UI is not attached for channel");
|
api_set_error(err, kErrorTypeException,
|
||||||
|
"UI not attached to channel: %" PRId64, channel_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +166,8 @@ void nvim_ui_set_option(uint64_t channel_id, String name,
|
|||||||
FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY
|
FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY
|
||||||
{
|
{
|
||||||
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
|
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
|
||||||
api_set_error(error, kErrorTypeException, "UI is not attached for channel");
|
api_set_error(error, kErrorTypeException,
|
||||||
|
"UI not attached to channel: %" PRId64, channel_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
UI *ui = pmap_get(uint64_t)(connected_uis, channel_id);
|
UI *ui = pmap_get(uint64_t)(connected_uis, channel_id);
|
||||||
@ -209,7 +213,7 @@ static void ui_set_option(UI *ui, String name, Object value, Error *error)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
api_set_error(error, kErrorTypeValidation, "No such ui option");
|
api_set_error(error, kErrorTypeValidation, "No such UI option");
|
||||||
#undef UI_EXT_OPTION
|
#undef UI_EXT_OPTION
|
||||||
}
|
}
|
||||||
|
|
||||||
|
39
test/functional/api/ui_spec.lua
Normal file
39
test/functional/api/ui_spec.lua
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
|
local Screen = require('test.functional.ui.screen')
|
||||||
|
local clear = helpers.clear
|
||||||
|
local eq = helpers.eq
|
||||||
|
local eval = helpers.eval
|
||||||
|
local request = helpers.request
|
||||||
|
|
||||||
|
describe('nvim_ui_attach()', function()
|
||||||
|
before_each(function()
|
||||||
|
clear()
|
||||||
|
end)
|
||||||
|
it('handles very large width/height #2180', function()
|
||||||
|
local screen = Screen.new(999, 999)
|
||||||
|
screen:attach()
|
||||||
|
eq(999, eval('&lines'))
|
||||||
|
eq(999, eval('&columns'))
|
||||||
|
end)
|
||||||
|
it('invalid option returns error', function()
|
||||||
|
local screen = Screen.new()
|
||||||
|
local status, rv = pcall(function() screen:attach({foo={'foo'}}) end)
|
||||||
|
eq(false, status)
|
||||||
|
eq('No such UI option', rv:match("No such .*"))
|
||||||
|
end)
|
||||||
|
it('validates channel arg', function()
|
||||||
|
assert.has_error(function() request('nvim_ui_try_resize', 40, 10) end,
|
||||||
|
'UI not attached to channel: 1')
|
||||||
|
assert.has_error(function() request('nvim_ui_set_option', 'rgb', true) end,
|
||||||
|
'UI not attached to channel: 1')
|
||||||
|
assert.has_error(function() request('nvim_ui_detach') end,
|
||||||
|
'UI not attached to channel: 1')
|
||||||
|
|
||||||
|
local screen = Screen.new()
|
||||||
|
screen:attach({rgb=false})
|
||||||
|
assert.has_error(function()
|
||||||
|
request('nvim_ui_attach', 40, 10, { rgb=false })
|
||||||
|
end,
|
||||||
|
'UI already attached to channel: 1')
|
||||||
|
end)
|
||||||
|
end)
|
@ -4,7 +4,6 @@ local spawn, set_session, clear = helpers.spawn, helpers.set_session, helpers.cl
|
|||||||
local feed, command = helpers.feed, helpers.command
|
local feed, command = helpers.feed, helpers.command
|
||||||
local insert = helpers.insert
|
local insert = helpers.insert
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
local eval = helpers.eval
|
|
||||||
local iswin = helpers.iswin
|
local iswin = helpers.iswin
|
||||||
|
|
||||||
describe('screen', function()
|
describe('screen', function()
|
||||||
@ -631,21 +630,3 @@ describe('Screen', function()
|
|||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('nvim_ui_attach()', function()
|
|
||||||
before_each(function()
|
|
||||||
clear()
|
|
||||||
end)
|
|
||||||
it('handles very large width/height #2180', function()
|
|
||||||
local screen = Screen.new(999, 999)
|
|
||||||
screen:attach()
|
|
||||||
eq(999, eval('&lines'))
|
|
||||||
eq(999, eval('&columns'))
|
|
||||||
end)
|
|
||||||
it('invalid option returns error', function()
|
|
||||||
local screen = Screen.new()
|
|
||||||
local status, rv = pcall(function() screen:attach({foo={'foo'}}) end)
|
|
||||||
eq(false, status)
|
|
||||||
eq('No such ui option', rv:match("No such .*"))
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user