diff options
author | Lucas Hoffmann <l-m-h@web.de> | 2015-06-18 18:01:19 +0200 |
---|---|---|
committer | Lucas Hoffmann <l-m-h@web.de> | 2015-06-22 12:08:24 +0200 |
commit | 2ce3656754acc846177cd1bca66d5cf0d4fc571d (patch) | |
tree | 8f1cc2e6131026fe79f05c09bacec3c0147c4d2b | |
parent | 981dd23f8df346086738c8606d102aa2cd346b13 (diff) | |
download | rneovim-2ce3656754acc846177cd1bca66d5cf0d4fc571d.tar.gz rneovim-2ce3656754acc846177cd1bca66d5cf0d4fc571d.tar.bz2 rneovim-2ce3656754acc846177cd1bca66d5cf0d4fc571d.zip |
tests: Fix an further simplify migrated test 61.
:undojoin can only be used inside scripts and command chains. So it has to be
tested inside an explicit `source()` call.
Also add a new test case for the different behavior when sourceing normal mode
commands from a script or inserting them interactively.
-rw-r--r-- | test/functional/legacy/061_undo_tree_spec.lua | 131 |
1 files changed, 78 insertions, 53 deletions
diff --git a/test/functional/legacy/061_undo_tree_spec.lua b/test/functional/legacy/061_undo_tree_spec.lua index c4fc5356ac..f098f54d7c 100644 --- a/test/functional/legacy/061_undo_tree_spec.lua +++ b/test/functional/legacy/061_undo_tree_spec.lua @@ -5,84 +5,89 @@ 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 -local expect_empty_buffer = function() +local function expect_empty_buffer() -- The space will be removed by helpers.dedent but is needed as dedent will -- throw an error if it can not find the common indent of the given lines. - expect(' ') + return expect(' ') +end +local function expect_line(line) + return eq(line, eval('getline(".")')) +end +local function write_file(name, text) + local file = io.open(name, 'w') + file:write(text) + file:flush() + file:close() end + describe('the undo tree', function() - setup(clear) + setup(function() + clear() + write_file('Xtest.source', 'o1\x1ba2\x12=string(123)\n\x1b') + write_file('Xtest0', '\n123456789\n') + end) teardown(function() + os.remove('Xtest0') os.remove('Xtest') + os.remove('Xtest.source') end) it('is working', function() + execute('e Xtest0') -- 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('Gxxx') - eq('456789', eval('getline(".")')) + expect_line('456789') feed('g-') - eq('3456789', eval('getline(".")')) + expect_line('3456789') feed('g-') - eq('23456789', eval('getline(".")')) + expect_line('23456789') feed('g-') - eq('123456789', eval('getline(".")')) + expect_line('123456789') feed('g-') - eq('123456789', eval('getline(".")')) + expect_line('123456789') -- Delete three other characters and go back in time step by step. feed('$xxx') - eq('123456', eval('getline(".")')) + expect_line('123456') execute('sleep 1') wait() feed('g-') - eq('1234567', eval('getline(".")')) + expect_line('1234567') feed('g-') - eq('12345678', eval('getline(".")')) + expect_line('12345678') feed('g-') - eq('456789', eval('getline(".")')) + expect_line('456789') feed('g-') - eq('3456789', eval('getline(".")')) + expect_line('3456789') feed('g-') - eq('23456789', eval('getline(".")')) + expect_line('23456789') feed('g-') - eq('123456789', eval('getline(".")')) + expect_line('123456789') feed('g-') - eq('123456789', eval('getline(".")')) + expect_line('123456789') feed('g-') - eq('123456789', eval('getline(".")')) + expect_line('123456789') feed('10g+') - eq('123456', eval('getline(".")')) + expect_line('123456') - -- Delay for three seconds and go some seconds forward and backward. + -- Delay for two seconds and go some seconds forward and backward. execute('sleep 2') wait() feed('Aa<esc>') feed('Ab<esc>') feed('Ac<esc>') - eq('123456abc', eval('getline(".")')) - execute('ear 1s') - eq('123456', eval('getline(".")')) - execute('ear 3s') - eq('123456789', eval('getline(".")')) + expect_line('123456abc') + execute('earlier 1s') + expect_line('123456') + execute('earlier 3s') + expect_line('123456789') execute('later 1s') - eq('123456', eval('getline(".")')) + expect_line('123456') execute('later 1h') - eq('123456abc', eval('getline(".")')) + expect_line('123456abc') -- Test that setting 'ul' breaks change blocks, we need to use source() in -- order to test this, as interactive changes are not grouped. @@ -123,13 +128,15 @@ describe('the undo tree', function() -- Test undojoin. feed('Goaaaa<esc>') feed('obbbb<esc>u') - eq('aaaa', eval('getline(".")')) - feed('obbbb<esc>') - 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(".")')) + expect_line('aaaa') + source([[ + normal obbbb + set ul=100 + undojoin + normal occcc + ]]) + feed('u') + expect_line('aaaa') execute('e! Xtest') feed('ione one one<esc>') @@ -195,7 +202,32 @@ describe('the undo tree', function() c 12]]) feed('od<esc>') - feed('o1<esc>a2<C-R>=string(123)<cr><esc>') + -- The file Xtest.source is written during setup. It contains this text + -- (nvim like escape sequences interpreted): + -- o1<esc>a2<C-R>=string(123)<cr><esc> + execute('so! Xtest.source') + expect([[ + + a + b + 1 + c + 12 + d + 12123]]) + feed('u') + expect([[ + + a + b + 1 + c + 12 + d]]) + -- The above behaviour was tested in the legacy vim test because the + -- legacy tests were executed with ':so!'. The behavior differs for + -- interactive use (even in vim, where the result was the same): + feed(io.open('Xtest.source'):read('*all')) expect([[ a @@ -205,13 +237,6 @@ describe('the undo tree', function() 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([[ |