fix(git): separate blame gutter from buffer text
This commit is contained in:
+7
-61
@@ -117,60 +117,6 @@ t.test("line popup formats the datetime in the author timezone", function()
|
||||
)
|
||||
end)
|
||||
|
||||
t.test("blame layout squeezes the author before date and sha", function()
|
||||
local sha, author, date = blame._layout(40)
|
||||
t.eq(sha, 8, "full budget: sha at its preference")
|
||||
t.eq(author, 16, "full budget: author at its preference")
|
||||
t.eq(date, 10, "full budget: date at its preference")
|
||||
sha, author, date = blame._layout(32)
|
||||
t.eq(sha, 8, "tight: the sha is untouched")
|
||||
t.eq(date, 10, "tight: the date is untouched")
|
||||
t.eq(author, 8, "tight: the author absorbs the squeeze first")
|
||||
sha, author, date = blame._layout(20)
|
||||
t.eq(sha, 8, "tighter: the sha is still untouched")
|
||||
t.eq(author, 0, "tighter: the author is squeezed out")
|
||||
t.eq(date, 6, "tighter: the date shrinks next")
|
||||
sha, author, date = blame._layout(4)
|
||||
t.eq(sha, 0, "degenerate: no room even for separators")
|
||||
t.eq(author, 0)
|
||||
t.eq(date, 0)
|
||||
end)
|
||||
|
||||
t.test("native_width measures the gutter from window options", function()
|
||||
local b = vim.api.nvim_create_buf(false, true)
|
||||
vim.api.nvim_buf_set_lines(b, 0, -1, false, { "a", "b", "c" })
|
||||
vim.api.nvim_set_current_buf(b)
|
||||
local win = vim.api.nvim_get_current_win()
|
||||
t.defer(function()
|
||||
if vim.api.nvim_win_is_valid(win) then
|
||||
vim.wo[win].number = false
|
||||
vim.wo[win].relativenumber = false
|
||||
vim.wo[win].signcolumn = "auto"
|
||||
vim.wo[win].foldcolumn = "0"
|
||||
end
|
||||
pcall(vim.api.nvim_buf_delete, b, { force = true })
|
||||
end)
|
||||
|
||||
vim.wo[win].number = false
|
||||
vim.wo[win].relativenumber = false
|
||||
vim.wo[win].signcolumn = "no"
|
||||
vim.wo[win].foldcolumn = "0"
|
||||
t.eq(blame._native_width(win), 0, "no gutter columns")
|
||||
|
||||
vim.wo[win].number = true
|
||||
vim.wo[win].numberwidth = 4
|
||||
vim.wo[win].signcolumn = "yes:2"
|
||||
t.eq(blame._native_width(win), 8, "number column plus signcolumn yes:2")
|
||||
|
||||
vim.wo[win].signcolumn = "auto:3"
|
||||
vim.wo[win].foldcolumn = "2"
|
||||
t.eq(
|
||||
blame._native_width(win),
|
||||
4 + 6 + 2,
|
||||
"auto:3 and a numeric foldcolumn reserve their maximum"
|
||||
)
|
||||
end)
|
||||
|
||||
t.test("porcelain parse of a committed file", function()
|
||||
local _, buf = setup("alpha\nbeta\ngamma\n")
|
||||
local state = enable_blame(buf)
|
||||
@@ -438,9 +384,8 @@ t.test("gutter is budgeted under the 47-cell cap", function()
|
||||
local s = blame.state(buf)
|
||||
return s ~= nil and s.blame_width ~= nil
|
||||
end, "the gutter blame to render")
|
||||
local native = blame._native_width(win)
|
||||
local width = assert(assert(blame.state(buf)).blame_width)
|
||||
t.eq(native, 18, "signcolumn=yes:9 reserves an 18-cell sign column")
|
||||
local native = 18 -- signcolumn=yes:9 reserves 2*9 cells
|
||||
t.eq(width, 47 - native, "the blame is budgeted into the cells left free")
|
||||
t.truthy(width + native <= 47, "blame plus native columns fits the cap")
|
||||
end)
|
||||
@@ -505,13 +450,13 @@ end)
|
||||
t.test("gutter shows sha, author and an absolute date", function()
|
||||
local _, buf = setup("a\nb\nc\n")
|
||||
vim.api.nvim_set_current_buf(buf)
|
||||
local win = vim.api.nvim_get_current_win()
|
||||
blame.toggle_gutter(buf)
|
||||
t.wait_for(function()
|
||||
local s = blame.state(buf)
|
||||
return s ~= nil and s.tick ~= nil
|
||||
end, "the gutter blame to populate")
|
||||
local g = blame._gutter(win, 1, 0)
|
||||
local state = assert(blame.state(buf))
|
||||
local g = assert(state.blame_text)[1] or ""
|
||||
t.truthy(g:match("%x%x%x%x%x%x%x%x"), "the gutter shows a short sha")
|
||||
t.truthy(g:find("t", 1, true), "the gutter shows the author")
|
||||
t.truthy(
|
||||
@@ -523,14 +468,15 @@ end)
|
||||
t.test("gutter is blank on virtual lines", function()
|
||||
local _, buf = setup("a\nb\nc\n")
|
||||
vim.api.nvim_set_current_buf(buf)
|
||||
local win = vim.api.nvim_get_current_win()
|
||||
blame.toggle_gutter(buf)
|
||||
t.wait_for(function()
|
||||
local s = blame.state(buf)
|
||||
return s ~= nil and s.tick ~= nil
|
||||
end, "the gutter blame to populate")
|
||||
local g = blame._gutter(win, 1, -1)
|
||||
t.falsy(g:match("%x%x%x%x%x%x%x%x"), "no sha on a virtual line")
|
||||
local state = assert(blame.state(buf))
|
||||
local blank = assert(state.blame_blank)
|
||||
t.falsy(blank:match("%x%x%x%x%x%x%x%x"), "no sha on a virtual line")
|
||||
t.falsy(blank:match("%S"), "blank segment is whitespace")
|
||||
end)
|
||||
|
||||
t.test("the statuscolumn expression renders the blame gutter", function()
|
||||
|
||||
Reference in New Issue
Block a user