aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/testdir/Makefile11
-rw-r--r--src/nvim/testdir/test61.in112
-rw-r--r--src/nvim/testdir/test61.ok49
-rw-r--r--test/functional/legacy/061_undo_tree_spec.lua209
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)