diff options
| -rw-r--r-- | src/nvim/testdir/Makefile | 11 | ||||
| -rw-r--r-- | src/nvim/testdir/test61.in | 112 | ||||
| -rw-r--r-- | src/nvim/testdir/test61.ok | 49 | ||||
| -rw-r--r-- | test/functional/legacy/061_undo_tree_spec.lua | 209 | 
4 files changed, 210 insertions, 171 deletions
| diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile index b982dbcbb3..da99c6d1c4 100644 --- a/src/nvim/testdir/Makefile +++ b/src/nvim/testdir/Makefile @@ -19,7 +19,7 @@ SCRIPTS := test_eval.out                                               \             test46.out  test47.out  test48.out  test49.out              \                         test52.out  test53.out              test55.out  \                         test57.out  test58.out  test59.out              \ -           test61.out  test62.out  test63.out  test64.out              \ +                       test62.out  test63.out  test64.out              \                                     test68.out  test69.out              \             test71.out              test73.out                          \                                                 test79.out  test80.out  \ @@ -126,15 +126,6 @@ test1.out: .gdbinit test1.in  	@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"  	$(RUN_VIM) $*.in -	# For flaky tests retry one time. -	@/bin/sh -c "if test -f test.out -a $* = test61; then \ -	                 if diff test.out $*.ok; then         \ -	                     echo flaky test ok first time;   \ -	                 else rm -rf $*.failed $(RM_ON_RUN);  \ -	                     $(RUN_VIM) $*.in;                \ -	                 fi;                                  \ -	             fi" -  	# Check if the test.out file matches test.ok.  	@/bin/sh -c "if test -f test.out; then                \  	                 if diff test.out $*.ok; then         \ diff --git a/src/nvim/testdir/test61.in b/src/nvim/testdir/test61.in deleted file mode 100644 index 87bb07a209..0000000000 --- a/src/nvim/testdir/test61.in +++ /dev/null @@ -1,112 +0,0 @@ -Tests for undo tree. -Since this script is sourced we need to explicitly break changes up in -undo-able pieces.  Do that by setting 'undolevels'. -Also tests :earlier and :later. - -STARTTEST -:echo undotree().entries -ENDTEST - -STARTTEST -:" Delete three characters and undo -Gx:set ul=100 -x:set ul=100 -x:.w! test.out -g-:.w >>test.out -g-:.w >>test.out -g-:.w >>test.out -g-:.w >>test.out -:" -:/^111/w >>test.out -:" Delete three other characters and go back in time step by step -$x:set ul=100 -x:set ul=100 -x:.w >>test.out -:sleep 1 -g-:.w >>test.out -g-:.w >>test.out -g-:.w >>test.out -g-:.w >>test.out -g-:.w >>test.out -g-:.w >>test.out -g-:.w >>test.out -g-:.w >>test.out -10g+:.w >>test.out -:" -:/^222/w >>test.out -:" Delay for three seconds and go some seconds forward and backward -:sleep 2 -Aa:set ul=100 -Ab:set ul=100 -Ac:set ul=100 -:.w >>test.out -:ear 1s -:.w >>test.out -:ear 3s -:.w >>test.out -:later 1s -:.w >>test.out -:later 1h -:.w >>test.out -:" -:" test undojoin -Goaaaa:set ul=100 -obbbbu:.w >>test.out -obbbb:set ul=100 -:undojoin -occccu:.w >>test.out -:e! Xtest -ione one one:set ul=100 -:w! -otwo:set ul=100 -otwo:set ul=100 -:w -othree:earlier 1f -:" expect "one one one\ntwo\ntwo" -:%yank a -:earlier 1f -:" expect "one one one" -:%yank b -:earlier 1f -:" expect empty line -:%yank c -:later 1f -:" expect "one one one" -:%yank d -:later 1f -:" expect "one one one\ntwo\ntwo" -:%yank e -:later 1f -:" expect "one one one\ntwo\ntwo\nthree" -ggO---:0put e -ggO---:0put d -ggO---:0put c -ggO---:0put b -ggO---:0put a -ggO---:w >>test.out -:so small.vim -:enew! -oa -:set ul=100 -ob -:set ul=100 -o1a2=setline('.','1234') - -uu:" -oc -:set ul=100 -o1a2=setline('.','1234') - -u:" -od -:set ul=100 -o1a2=string(123) -u:" -:%w >>test.out -:qa! -ENDTEST - -1111 ----- -2222 ----- - -123456789 diff --git a/src/nvim/testdir/test61.ok b/src/nvim/testdir/test61.ok deleted file mode 100644 index ea4b473ad7..0000000000 --- a/src/nvim/testdir/test61.ok +++ /dev/null @@ -1,49 +0,0 @@ -456789 -3456789 -23456789 -123456789 -123456789 -1111 ----- -123456 -1234567 -12345678 -456789 -3456789 -23456789 -123456789 -123456789 -123456789 -123456 -2222 ----- -123456abc -123456 -123456789 -123456 -123456abc -aaaa -aaaa ---- -one one one -two -two ---- -one one one ---- - ---- -one one one ---- -one one one -two -two ---- -one one one -two -two -three - -a -b -c -12 -d diff --git a/test/functional/legacy/061_undo_tree_spec.lua b/test/functional/legacy/061_undo_tree_spec.lua new file mode 100644 index 0000000000..e3f3997440 --- /dev/null +++ b/test/functional/legacy/061_undo_tree_spec.lua @@ -0,0 +1,209 @@ +-- Tests for undo tree. +-- Since this script is sourced we need to explicitly break changes up in +-- undo-able pieces.  Do that by setting 'undolevels'. +-- Also tests :earlier and :later. + +local helpers = require('test.functional.helpers') +local feed, insert, source, eq, eval, clear, execute, expect, wait = +  helpers.feed, helpers.insert, helpers.source, helpers.eq, helpers.eval, +  helpers.clear, helpers.execute, helpers.expect, helpers.wait + +describe('the undo tree', function() +  setup(clear) +  teardown(function() +    os.remove('Xtest') +  end) + +  it('is working', function() +    -- Assert that no undo history is present. +    eq({}, eval('undotree().entries')) +    insert([[ +       +      123456789]]) + +    -- Clear the undo history after the insertion (see :h clear-undo) +    execute('let old_undolevels = &undolevels') +    execute('set undolevels=-1') +    feed('a <BS><Esc>')  +    execute('let &undolevels = old_undolevels') +    execute('unlet old_undolevels') +    eq({}, eval('undotree().entries')) + +    -- Delete three characters and undo. +    feed('Gx') +    execute('set ul=100') +    feed('x') +    execute('set ul=100') +    feed('x') +    eq('456789', eval('getline(".")')) +    feed('g-') +    eq('3456789', eval('getline(".")')) +    feed('g-') +    eq('23456789', eval('getline(".")')) +    feed('g-') +    eq('123456789', eval('getline(".")')) +    feed('g-') +    eq('123456789', eval('getline(".")')) + +    -- Delete three other characters and go back in time step by step. +    feed('$x') +    execute('set ul=100') +    feed('x') +    execute('set ul=100') +    feed('x') +    eq('123456', eval('getline(".")')) +    execute('sleep 1') +    wait() +    feed('g-') +    eq('1234567', eval('getline(".")')) +    feed('g-') +    eq('12345678', eval('getline(".")')) +    feed('g-') +    eq('456789', eval('getline(".")')) +    feed('g-') +    eq('3456789', eval('getline(".")')) +    feed('g-') +    eq('23456789', eval('getline(".")')) +    feed('g-') +    eq('123456789', eval('getline(".")')) +    feed('g-') +    eq('123456789', eval('getline(".")')) +    feed('g-') +    eq('123456789', eval('getline(".")')) +    feed('10g+') +    eq('123456', eval('getline(".")')) + +    -- Delay for three seconds and go some seconds forward and backward. +    execute('sleep 2') +    wait() +    feed('Aa<esc>') +    execute('set ul=100') +    feed('Ab<esc>') +    execute('set ul=100') +    feed('Ac<esc>') +    execute('set ul=100') +    eq('123456abc', eval('getline(".")')) +    execute('ear 1s') +    eq('123456', eval('getline(".")')) +    execute('ear 3s') +    eq('123456789', eval('getline(".")')) +    execute('later 1s') +    eq('123456', eval('getline(".")')) +    execute('later 1h') +    eq('123456abc', eval('getline(".")')) + +    -- Test undojoin. +    feed('Goaaaa<esc>') +    execute('set ul=100') +    feed('obbbb<esc>u') +    eq('aaaa', eval('getline(".")')) +    feed('obbbb<esc>') +    execute('set ul=100') +    execute('undojoin') +    feed('occcc<esc>u') +    -- TODO At this point the original test will write "aaaa" to test.out. +    -- Why is the line "bbbb" here? +    eq('bbbb', eval('getline(".")')) + +    execute('e! Xtest') +    feed('ione one one<esc>') +    execute('set ul=100') +    execute('w!') +    feed('otwo<esc>') +    execute('set ul=100') +    feed('otwo<esc>') +    execute('set ul=100') +    execute('w') +    feed('othree<esc>') +    execute('earlier 1f') +    expect([[ +      one one one +      two +      two]]) +    execute('earlier 1f') +    expect('one one one') +    execute('earlier 1f') +    -- Expect an empty line (the space is needed for helpers.dedent but +    -- removed). +    expect(' ') +    execute('later 1f') +    expect('one one one') +    execute('later 1f') +    expect([[ +      one one one +      two +      two]]) +    execute('later 1f') +    expect([[ +      one one one +      two +      two +      three]]) + +    execute('enew!') +    feed('oa<esc>') +    execute('set ul=100') +    feed('ob<esc>') +    execute('set ul=100') +    feed([[o1<esc>a2<C-R>=setline('.','1234')<cr><esc>]]) +    expect([[ +       +      a +      b +      12034]]) + +    feed('uu') +    expect([[ +       +      a +      b +      1]]) +    feed('oc<esc>') +    execute('set ul=100') +    feed([[o1<esc>a2<C-R>=setline('.','1234')<cr><esc>]]) +    expect([[ +       +      a +      b +      1 +      c +      12034]]) +    feed('u') +    expect([[ +       +      a +      b +      1 +      c +      12]]) +    feed('od<esc>') +    execute('set ul=100') +    feed('o1<esc>a2<C-R>=string(123)<cr><esc>') +    expect([[ +       +      a +      b +      1 +      c +      12 +      d +      12123]]) + +    -- TODO there is a difference between the original test and this test at +    -- this point.  The original tests expects the last line to go away after +    -- the undo.  I do not know why this should be the case as the "o" and "a" +    -- above are seperate changes.  I was able to confirm this manually with +    -- vim and nvim.  Both end up in this state (treat "o" and "a" as two +    -- edits). +    feed('u') +    expect([[ +       +      a +      b +      1 +      c +      12 +      d +      1]]) +  end) +end) | 
