refactor(git): rewrite diff module around :diffsplit
This commit is contained in:
@@ -234,3 +234,84 @@ t.test("refresh on stage updates the index URI buffer's content", function()
|
||||
"index pane should reflect staged content after refresh"
|
||||
)
|
||||
end)
|
||||
|
||||
t.test(
|
||||
"re-selecting same entry after close + diffsplit keeps fold state in sync",
|
||||
function()
|
||||
local committed, worktree = {}, {}
|
||||
for i = 1, 30 do
|
||||
committed[i] = "line " .. i
|
||||
worktree[i] = i == 15 and "CHANGED" or ("line " .. i)
|
||||
end
|
||||
local sidebar_win, line = setup_sidebar_with_unstaged_file(
|
||||
"foo.txt",
|
||||
table.concat(committed, "\n") .. "\n",
|
||||
table.concat(worktree, "\n") .. "\n"
|
||||
)
|
||||
|
||||
local prev_foldlevel = vim.o.foldlevel
|
||||
vim.o.foldlevel = 99
|
||||
t.defer(function()
|
||||
vim.o.foldlevel = prev_foldlevel
|
||||
end)
|
||||
|
||||
vim.api.nvim_set_current_win(sidebar_win)
|
||||
vim.api.nvim_win_set_cursor(sidebar_win, { line, 0 })
|
||||
t.press("<Tab>")
|
||||
t.wait_for(function()
|
||||
return find_diff_win("left") ~= nil
|
||||
and find_diff_win("right") ~= nil
|
||||
end, "first diff pair to appear")
|
||||
|
||||
local first_left = assert(find_diff_win("left"))
|
||||
vim.api.nvim_win_close(first_left, false)
|
||||
|
||||
local remaining
|
||||
for _, w in ipairs(vim.api.nvim_tabpage_list_wins(0)) do
|
||||
if w ~= sidebar_win then
|
||||
remaining = w
|
||||
break
|
||||
end
|
||||
end
|
||||
if not remaining then
|
||||
error("a non-sidebar window should remain after close")
|
||||
end
|
||||
vim.api.nvim_set_current_win(remaining)
|
||||
require("git.diff").split({ mods = { vertical = true } })
|
||||
t.wait_for(function()
|
||||
local count = 0
|
||||
for _, w in ipairs(vim.api.nvim_tabpage_list_wins(0)) do
|
||||
if vim.wo[w].diff then
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
return count == 2
|
||||
end, "diffsplit to produce a diff pair")
|
||||
|
||||
vim.api.nvim_set_current_win(sidebar_win)
|
||||
vim.api.nvim_win_set_cursor(sidebar_win, { line, 0 })
|
||||
t.press("<Tab>")
|
||||
t.wait_for(function()
|
||||
local count = 0
|
||||
for _, w in ipairs(vim.api.nvim_tabpage_list_wins(0)) do
|
||||
if vim.wo[w].diff then
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
return count == 2
|
||||
end, "diff pair after re-selecting entry")
|
||||
|
||||
local left_win = assert(find_diff_win("left"))
|
||||
local right_win = assert(find_diff_win("right"))
|
||||
t.eq(
|
||||
vim.wo[left_win].foldlevel,
|
||||
0,
|
||||
"left pane foldlevel should be 0 after re-select"
|
||||
)
|
||||
t.eq(
|
||||
vim.wo[right_win].foldlevel,
|
||||
0,
|
||||
"right pane foldlevel should be 0 after re-select"
|
||||
)
|
||||
end
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user