mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
tests: Migrate legacy test 61.
This test is real time based as it also tests the `:earlier` and `:later` commands with time arguments (using `:sleep`). This can sometimes case the test to fail on systems that are under heavy load or where the time interval between creating the expected buffer state and the `:earlier` or `:later` command that tries to jump to it changes. To be system independent we use nvim's `:sleep` command and `wait()` for it in the test suit. The legacy vim test writes to test.out a lot with `:.w >>test.out`. This does currently not work in the lua test suite so the test is modernized to use busted's assertions instead of the output file. This test was treated special in the legacy Makefile but after the conversion the related code can be removed.
This commit is contained in:
parent
a743297be2
commit
8c999a9d6c
@ -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 \
|
||||
|
@ -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
|
@ -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
|
209
test/functional/legacy/061_undo_tree_spec.lua
Normal file
209
test/functional/legacy/061_undo_tree_spec.lua
Normal file
@ -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)
|
Loading…
Reference in New Issue
Block a user