diff --git a/plugin/gundo.vim b/plugin/gundo.vim index c018419..ead3199 100644 --- a/plugin/gundo.vim +++ b/plugin/gundo.vim @@ -623,7 +623,12 @@ endfunction"}}} function! s:GundoMove(direction) range"{{{ let start_line = getline('.') - let distance = 2 * v:count1 + if v:count1 == 0 + let move_count = 1 + else + let move_count = v:count1 + endif + let distance = 2 * move_count " If we're in between two nodes we move by one less to get back on track. if stridx(start_line, '[') == -1 diff --git a/tests/test-movement.vim b/tests/test-movement.vim new file mode 100644 index 0000000..04c0ecf --- /dev/null +++ b/tests/test-movement.vim @@ -0,0 +1,120 @@ +UTSuite [Gundo] Testing Toggling + +function! s:Setup()"{{{ + exec 'edit test' + call g:Goto('test') +endfunction"}}} +function! s:Teardown()"{{{ + if bufwinnr(bufnr('__Gundo__')) != -1 + exec bufwinnr(bufnr('__Gundo__')) . 'wincmd w' + quit + endif + if bufwinnr(bufnr('__Gundo_Preview__')) != -1 + exec bufwinnr(bufnr('__Gundo_Preview__')) . 'wincmd w' + quit + endif + if bufnr('__Gundo__') != -1 + exec 'bwipeout! ' . bufnr('__Gundo__') + endif + if bufnr('__Gundo_Preview__') != -1 + exec 'bwipeout! ' . bufnr('__Gundo_Preview__') + endif + if bufnr('test') != -1 + exec 'bwipeout! ' . bufnr('test') + endif + if bufnr('test2') != -1 + exec 'bwipeout! ' . bufnr('test2') + endif +endfunction"}}} + +function! s:TestMovementBasic()"{{{ + " Make three linear changes + call g:TypeLineDone("ONE") + call g:TypeLineDone("TWO") + call g:TypeLineDone("THREE") + + " Open Gundo + GundoToggle + + " Make sure we're on the newest/current state + Assert g:CurrentLineContains("[3]") + + " Move down + normal j + Assert g:CurrentLineContains("[2]") + + " Move down + normal j + Assert g:CurrentLineContains("[1]") + + " Move down + normal j + Assert g:CurrentLineContains("[0]") + + " Move up + normal k + Assert g:CurrentLineContains("[1]") + + " Move up + normal k + Assert g:CurrentLineContains("[2]") + + " Move up + normal k + Assert g:CurrentLineContains("[3]") +endfunction"}}} + +function! s:TestMovementLinear()"{{{ + " Make four changes: + " + " o [4] + " | + " | o [3] + " | | + " o | [2] + " |/ + " o [1] + " | + " o [0] (original) + + call g:TypeLineDone("ONE") + call g:TypeLineDone("TWO") + silent! undo + call g:TypeLineDone("THREE") + silent! undo 2 + call g:TypeLineDone("FOUR") + + " Open Gundo + GundoToggle + + " Make sure we're on the newest/current state + Assert g:CurrentLineContains("[4]") + + " Move down + normal j + Assert g:CurrentLineContains("[3]") + + " Move down + normal j + Assert g:CurrentLineContains("[2]") + + " Move down + normal j + Assert g:CurrentLineContains("[1]") + + " Move down + normal j + Assert g:CurrentLineContains("[0]") + + " Move up + normal k + Assert g:CurrentLineContains("[1]") + + " Move up + normal k + Assert g:CurrentLineContains("[2]") + + " Move up + normal k + Assert g:CurrentLineContains("[3]") +endfunction"}}}