aboutsummaryrefslogtreecommitdiff
path: root/test/functional/api/tabpage_spec.lua
diff options
context:
space:
mode:
authorSean Dewar <6256228+seandewar@users.noreply.github.com>2024-02-27 13:25:44 +0000
committerSean Dewar <6256228+seandewar@users.noreply.github.com>2024-03-08 23:24:06 +0000
commite7c262f5553c1c6e1de95bcbdc8cfe7cc9d5e55e (patch)
treeef0a5da5f8708ddd036534367a52975d75b1c37f /test/functional/api/tabpage_spec.lua
parentd942c2b9432d81e4b509519bd48fa886e37e9ca8 (diff)
downloadrneovim-e7c262f5553c1c6e1de95bcbdc8cfe7cc9d5e55e.tar.gz
rneovim-e7c262f5553c1c6e1de95bcbdc8cfe7cc9d5e55e.tar.bz2
rneovim-e7c262f5553c1c6e1de95bcbdc8cfe7cc9d5e55e.zip
fix(api): patch some cmdwin/textlock holes
Problem: there are new ways to escape textlock or break the cmdwin in nvim_win_set_config and nvim_tabpage_set_win. Solution: fix them. Use win_goto to check it in nvim_tabpage_set_win and use the try_start/end pattern like with similar functions such as nvim_set_current_win (which uses the existing msg_list, if set). Careful not to use `wp->handle` when printing the window ID in the error message for nvim_tabpage_set_win, as win_goto autocommands may have freed the window. On a related note, I have a feeling some API functions ought to be checking curbuf_locked...
Diffstat (limited to 'test/functional/api/tabpage_spec.lua')
-rw-r--r--test/functional/api/tabpage_spec.lua26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/functional/api/tabpage_spec.lua b/test/functional/api/tabpage_spec.lua
index 36955c4ace..f7e6eed047 100644
--- a/test/functional/api/tabpage_spec.lua
+++ b/test/functional/api/tabpage_spec.lua
@@ -1,5 +1,7 @@
local helpers = require('test.functional.helpers')(after_each)
local clear, eq, ok = helpers.clear, helpers.eq, helpers.ok
+local exec = helpers.exec
+local feed = helpers.feed
local api = helpers.api
local fn = helpers.fn
local request = helpers.request
@@ -86,6 +88,30 @@ describe('api/tabpage', function()
pcall_err(api.nvim_tabpage_set_win, tab1, win3)
)
end)
+
+ it('does not switch window when textlocked or in the cmdwin', function()
+ local target_win = api.nvim_get_current_win()
+ feed('q:')
+ local cur_win = api.nvim_get_current_win()
+ eq(
+ 'Vim:E11: Invalid in command-line window; <CR> executes, CTRL-C quits',
+ pcall_err(api.nvim_tabpage_set_win, 0, target_win)
+ )
+ eq(cur_win, api.nvim_get_current_win())
+ command('quit!')
+
+ exec(([[
+ new
+ call setline(1, 'foo')
+ setlocal debug=throw indentexpr=nvim_tabpage_set_win(0,%d)
+ ]]):format(target_win))
+ cur_win = api.nvim_get_current_win()
+ eq(
+ 'Vim(normal):E5555: API call: Vim:E565: Not allowed to change text or change window',
+ pcall_err(command, 'normal! ==')
+ )
+ eq(cur_win, api.nvim_get_current_win())
+ end)
end)
describe('{get,set,del}_var', function()