test: add headless test framework

This commit is contained in:
2026-05-07 02:07:35 +02:00
parent 55effc0a67
commit e9d13627c8
10 changed files with 398 additions and 257 deletions
+23 -21
View File
@@ -1,47 +1,49 @@
local h = require("helpers")
local t = require("test")
local util = require("git.util")
h.test("set_buf_lines preserves modifiable=false", function()
local function fresh_buf()
local buf = vim.api.nvim_create_buf(false, true)
t.defer(function()
pcall(vim.api.nvim_buf_delete, buf, { force = true })
end)
return buf
end
t.test("set_buf_lines preserves modifiable=false", function()
local buf = fresh_buf()
vim.bo[buf].modifiable = false
util.set_buf_lines(buf, 0, -1, { "a", "b", "c" })
h.eq(
t.eq(
vim.api.nvim_buf_get_lines(buf, 0, -1, false),
{ "a", "b", "c" },
"lines should be replaced"
)
h.falsy(vim.bo[buf].modifiable, "modifiable should stay false")
h.falsy(vim.bo[buf].modified, "modified should be cleared")
vim.api.nvim_buf_delete(buf, { force = true })
t.falsy(vim.bo[buf].modifiable, "modifiable should stay false")
t.falsy(vim.bo[buf].modified, "modified should be cleared")
end)
h.test("set_buf_lines preserves modifiable=true", function()
local buf = vim.api.nvim_create_buf(false, true)
t.test("set_buf_lines preserves modifiable=true", function()
local buf = fresh_buf()
vim.bo[buf].modifiable = true
util.set_buf_lines(buf, 0, -1, { "a", "b" })
h.truthy(vim.bo[buf].modifiable, "modifiable should stay true")
h.falsy(vim.bo[buf].modified, "modified should be cleared")
vim.api.nvim_buf_delete(buf, { force = true })
t.truthy(vim.bo[buf].modifiable, "modifiable should stay true")
t.falsy(vim.bo[buf].modified, "modified should be cleared")
end)
h.test("set_buf_lines partial range update", function()
local buf = vim.api.nvim_create_buf(false, true)
t.test("set_buf_lines partial range update", function()
local buf = fresh_buf()
vim.api.nvim_buf_set_lines(buf, 0, -1, false, { "a", "b", "c", "d" })
util.set_buf_lines(buf, 1, 3, { "X", "Y", "Z" })
h.eq(
t.eq(
vim.api.nvim_buf_get_lines(buf, 0, -1, false),
{ "a", "X", "Y", "Z", "d" },
"lines [1, 3) should be replaced"
)
vim.api.nvim_buf_delete(buf, { force = true })
end)
h.test("set_buf_lines errors on out-of-bounds (strict_indexing)", function()
local buf = vim.api.nvim_create_buf(false, true)
t.test("set_buf_lines errors on out-of-bounds (strict_indexing)", function()
local buf = fresh_buf()
vim.api.nvim_buf_set_lines(buf, 0, -1, false, { "a", "b" })
local ok = pcall(util.set_buf_lines, buf, 100, 200, { "x" })
h.falsy(ok, "out-of-bounds index should error")
vim.api.nvim_buf_delete(buf, { force = true })
t.falsy(ok, "out-of-bounds index should error")
end)
h.report()