aboutsummaryrefslogtreecommitdiff
path: root/test/functional/api/buffer_spec.lua
diff options
context:
space:
mode:
authorglepnir <glephunter@gmail.com>2026-01-21 14:17:44 +0800
committerGitHub <noreply@github.com>2026-01-21 14:17:44 +0800
commitc556972ae10d0e61337dbc804a4a0af4e390f98e (patch)
treeae7b685d70da00da5000aa74b9cb27f412f0b634 /test/functional/api/buffer_spec.lua
parent2c2203c04005495b4a6272eb178a90ce06580e9d (diff)
downloadrneovim-c556972ae10d0e61337dbc804a4a0af4e390f98e.tar.gz
rneovim-c556972ae10d0e61337dbc804a4a0af4e390f98e.tar.bz2
rneovim-c556972ae10d0e61337dbc804a4a0af4e390f98e.zip
fix(api): auto-load buffers in nvim_buf_set_* operations (#35046)
fix(api): auto-load buffers in nvim_buf_set_* operations Problem: Setting marks, lines, or text on unloaded buffers fails because ml_line_count is not accurate until the buffer is loaded. Solution: Add require_loaded_buffer() helper and use it in write operations (nvim_buf_set_lines, nvim_buf_set_text, nvim_buf_set_mark). These now auto-load buffers as needed.
Diffstat (limited to 'test/functional/api/buffer_spec.lua')
-rw-r--r--test/functional/api/buffer_spec.lua16
1 files changed, 16 insertions, 0 deletions
diff --git a/test/functional/api/buffer_spec.lua b/test/functional/api/buffer_spec.lua
index 6282bbccd8..a167e7ad11 100644
--- a/test/functional/api/buffer_spec.lua
+++ b/test/functional/api/buffer_spec.lua
@@ -863,6 +863,7 @@ describe('api/buf', function()
local new_bufnr = fn.bufnr('set_lines', true)
lua_or_rpc.nvim_buf_set_lines(new_bufnr, 0, -1, false, {})
eq({ '' }, lua_or_rpc.nvim_buf_get_lines(new_bufnr, 0, -1, false))
+ eq(true, api.nvim_buf_is_loaded(new_bufnr))
end)
end)
@@ -1809,6 +1810,14 @@ describe('api/buf', function()
eq({ 'one', 'two' }, get_lines(0, 2, true))
end)
+ it('auto-loads unloaded buffer', function()
+ local new_bufnr = fn.bufnr('set_text', true)
+ eq(false, api.nvim_buf_is_loaded(new_bufnr))
+ api.nvim_buf_set_text(new_bufnr, 0, 0, 0, -1, { 'foo' })
+ eq(true, api.nvim_buf_is_loaded(new_bufnr))
+ eq({ 'foo' }, api.nvim_buf_get_lines(new_bufnr, 0, -1, false))
+ end)
+
describe('handles topline', function()
local screen
before_each(function()
@@ -2375,6 +2384,13 @@ describe('api/buf', function()
it('fails when invalid buffer number is used', function()
eq(false, pcall(api.nvim_buf_set_mark, 99, 'a', 1, 1, {}))
end)
+ it('auto-loads unloaded buffer', function()
+ local new_bufnr = fn.bufnr('set_mark', true)
+ eq(false, api.nvim_buf_is_loaded(new_bufnr))
+ eq(true, api.nvim_buf_set_mark(new_bufnr, 'A', 0, 0, {}))
+ eq(true, api.nvim_buf_is_loaded(new_bufnr))
+ eq({ 0, 0 }, api.nvim_buf_get_mark(new_bufnr, 'A'))
+ end)
end)
describe('nvim_buf_del_mark', function()