mirror of
https://github.com/neovim/neovim.git
synced 2024-12-28 14:31:13 -07:00
d25649fa01
Previously alternate branches were not accounted for properly, with this change g- after an undo to a branch point works. The current sequence number b_u_seq_cur is used in undo_time(), in u_doit() this was calculated by subtracting one from the curhead sequence number. The curhead header entry represents the change that was just undone, so the sequence number we want is that of the change we have moved to. This is the sequence number of the undo head that is the uh_next element of this curhead. That sequence number is not always one less than the curhead sequence number -- there may have been an alternate branch at this point. Instead of subtracting one, we now directly find the sequence number of curhead->uh_next.
62 lines
1.6 KiB
Lua
62 lines
1.6 KiB
Lua
local helpers = require('test.functional.helpers')(after_each)
|
|
|
|
local clear = helpers.clear
|
|
local execute = helpers.execute
|
|
local expect = helpers.expect
|
|
local feed = helpers.feed
|
|
local insert = helpers.insert
|
|
|
|
describe('u CTRL-R g- g+', function()
|
|
before_each(clear)
|
|
|
|
local function create_history(num_steps)
|
|
if num_steps == 0 then return end
|
|
insert('1')
|
|
if num_steps == 1 then return end
|
|
feed('o2<esc>')
|
|
feed('o3<esc>')
|
|
feed('u')
|
|
if num_steps == 2 then return end
|
|
feed('o4<esc>')
|
|
if num_steps == 3 then return end
|
|
feed('u')
|
|
end
|
|
|
|
local function undo_and_redo(hist_pos, undo, redo, expect_str)
|
|
execute('enew!')
|
|
create_history(hist_pos)
|
|
local cur_contents = helpers.curbuf_contents()
|
|
feed(undo)
|
|
expect(expect_str)
|
|
feed(redo)
|
|
expect(cur_contents)
|
|
end
|
|
|
|
-- TODO Look for message saying 'Already at oldest change'
|
|
it('does nothing when no changes have happened', function()
|
|
undo_and_redo(0, 'u', '<C-r>', '')
|
|
undo_and_redo(0, 'g-', 'g+', '')
|
|
end)
|
|
it('undoes a change when at a leaf', function()
|
|
undo_and_redo(1, 'u', '<C-r>', '')
|
|
undo_and_redo(1, 'g-', 'g+', '')
|
|
end)
|
|
it('undoes a change when in a non-leaf', function()
|
|
undo_and_redo(2, 'u', '<C-r>', '1')
|
|
undo_and_redo(2, 'g-', 'g+', '1')
|
|
end)
|
|
it('undoes properly around a branch point', function()
|
|
undo_and_redo(3, 'u', '<C-r>', [[
|
|
1
|
|
2]])
|
|
undo_and_redo(3, 'g-', 'g+', [[
|
|
1
|
|
2
|
|
3]])
|
|
end)
|
|
it('can find the previous sequence after undoing to a branch', function()
|
|
undo_and_redo(4, 'u', '<C-r>', '1')
|
|
undo_and_redo(4, 'g-', 'g+', '1')
|
|
end)
|
|
end)
|