fix(api): not using TRY_WRAP, generic error messages #31595

Problem:
- API functions using `try_start` directly instead of `TRY_WRAP`, do not
  surface the underlying error message, and instead show generic things
  like "Failed to set buffer".
- Error handling code is duplicated in the API impl, instead of
  delegating to the vim buffer/window handling logic.

Solution:
- Use `TRY_WRAP`.
This commit is contained in:
Justin M. Keyes
2024-12-16 04:00:20 -08:00
committed by GitHub
parent 9c6a3703bb
commit 167a2383b9
7 changed files with 65 additions and 112 deletions

View File

@@ -1,73 +1,51 @@
local n = require('test.functional.testnvim')()
local t = require('test.testutil')
local clear = n.clear
local exec_lua = n.exec_lua
describe("Nvim API calls with 'winfixbuf'", function()
describe("'winfixbuf'", function()
before_each(function()
clear()
end)
it('vim.api.nvim_win_set_buf on non-current buffer', function()
local ok = exec_lua([[
local function _setup_two_buffers()
local buffer = vim.api.nvim_create_buf(true, true)
vim.api.nvim_create_buf(true, true) -- Make another buffer
local current_window = 0
vim.api.nvim_set_option_value("winfixbuf", true, {win=current_window})
return buffer
end
local other_buffer = _setup_two_buffers()
local current_window = 0
local ok, _ = pcall(vim.api.nvim_win_set_buf, current_window, other_buffer)
return ok
]])
assert(not ok)
end)
it('vim.api.nvim_set_current_buf on non-current buffer', function()
local ok = exec_lua([[
local function _setup_two_buffers()
local buffer = vim.api.nvim_create_buf(true, true)
vim.api.nvim_create_buf(true, true) -- Make another buffer
local current_window = 0
vim.api.nvim_set_option_value("winfixbuf", true, {win=current_window})
return buffer
end
local other_buffer = _setup_two_buffers()
local ok, _ = pcall(vim.api.nvim_set_current_buf, other_buffer)
return ok
]])
assert(not ok)
end)
it('vim.api.nvim_win_set_buf on current buffer', function()
exec_lua([[
---@return integer
local function setup_winfixbuf()
return exec_lua([[
local buffer = vim.api.nvim_create_buf(true, true)
vim.api.nvim_create_buf(true, true) -- Make another buffer
vim.wo.winfixbuf = true
local curbuf = vim.api.nvim_get_current_buf()
vim.api.nvim_win_set_buf(0, curbuf)
assert(vim.api.nvim_get_current_buf() == curbuf)
return buffer
]])
end
it('nvim_win_set_buf on non-current buffer', function()
local other_buf = setup_winfixbuf()
t.eq(
"Vim:E1513: Cannot switch buffer. 'winfixbuf' is enabled",
t.pcall_err(n.api.nvim_win_set_buf, 0, other_buf)
)
end)
it('vim.api.nvim_set_current_buf on current buffer', function()
exec_lua([[
vim.wo.winfixbuf = true
local curbuf = vim.api.nvim_get_current_buf()
vim.api.nvim_set_current_buf(curbuf)
assert(vim.api.nvim_get_current_buf() == curbuf)
]])
it('nvim_set_current_buf on non-current buffer', function()
local other_buf = setup_winfixbuf()
t.eq(
"Vim:E1513: Cannot switch buffer. 'winfixbuf' is enabled",
t.pcall_err(n.api.nvim_set_current_buf, other_buf)
)
end)
it('nvim_win_set_buf on current buffer', function()
setup_winfixbuf()
local curbuf = n.api.nvim_get_current_buf()
n.api.nvim_win_set_buf(0, curbuf)
t.eq(curbuf, n.api.nvim_get_current_buf())
end)
it('nvim_set_current_buf on current buffer', function()
setup_winfixbuf()
local curbuf = n.api.nvim_get_current_buf()
n.api.nvim_set_current_buf(curbuf)
t.eq(curbuf, n.api.nvim_get_current_buf())
end)
end)