diff options
Diffstat (limited to 'test/functional/shada/marks_spec.lua')
| -rw-r--r-- | test/functional/shada/marks_spec.lua | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/test/functional/shada/marks_spec.lua b/test/functional/shada/marks_spec.lua new file mode 100644 index 0000000000..b03af39662 --- /dev/null +++ b/test/functional/shada/marks_spec.lua @@ -0,0 +1,180 @@ +-- ShaDa marks saving/reading support +local helpers = require('test.functional.helpers') +local meths, curwinmeths, curbufmeths, nvim_command, funcs, eq = + helpers.meths, helpers.curwinmeths, helpers.curbufmeths, helpers.command, + helpers.funcs, helpers.eq +local exc_exec, redir_exec = helpers.exc_exec, helpers.redir_exec + +local shada_helpers = require('test.functional.shada.helpers') +local reset, set_additional_cmd, clear = + shada_helpers.reset, shada_helpers.set_additional_cmd, + shada_helpers.clear + +local nvim_current_line = function() + return curwinmeths.get_cursor()[1] +end + +describe('ShaDa support code', function() + testfilename = 'Xtestfile-functional-shada-marks' + testfilename_2 = 'Xtestfile-functional-shada-marks-2' + before_each(function() + reset() + local fd = io.open(testfilename, 'w') + fd:write('test\n') + fd:write('test2\n') + fd:close() + local fd = io.open(testfilename_2, 'w') + fd:write('test3\n') + fd:write('test4\n') + fd:close() + end) + after_each(function() + clear() + os.remove(testfilename) + os.remove(testfilename_2) + end) + + it('is able to dump and read back global mark', function() + nvim_command('edit ' .. testfilename) + nvim_command('mark A') + nvim_command('2') + nvim_command('kB') + nvim_command('wshada') + reset() + nvim_command('rshada') + nvim_command('normal! `A') + eq(testfilename, funcs.fnamemodify(curbufmeths.get_name(), ':t')) + eq(1, nvim_current_line()) + nvim_command('normal! `B') + eq(2, nvim_current_line()) + end) + + it('does not dump global mark with `f0` in shada', function() + nvim_command('set shada+=f0') + nvim_command('edit ' .. testfilename) + nvim_command('mark A') + nvim_command('2') + nvim_command('kB') + nvim_command('wshada') + reset() + nvim_command('language C') + eq('Vim(normal):E20: Mark not set', exc_exec('normal! `A')) + end) + + it('does read back global mark even with `\'0` and `f0` in shada', function() + nvim_command('edit ' .. testfilename) + nvim_command('mark A') + nvim_command('2') + nvim_command('kB') + nvim_command('wshada') + set_additional_cmd('set shada=\'0,f0') + reset() + nvim_command('language C') + nvim_command('normal! `A') + eq(testfilename, funcs.fnamemodify(curbufmeths.get_name(), ':t')) + eq(1, nvim_current_line()) + end) + + it('is able to dump and read back local mark', function() + nvim_command('edit ' .. testfilename) + nvim_command('mark a') + nvim_command('2') + nvim_command('kb') + nvim_command('qall') + reset() + nvim_command('edit ' .. testfilename) + nvim_command('normal! `a') + eq(testfilename, funcs.fnamemodify(curbufmeths.get_name(), ':t')) + eq(1, nvim_current_line()) + nvim_command('normal! `b') + eq(2, nvim_current_line()) + end) + + it('is able to populate v:oldfiles', function() + nvim_command('edit ' .. testfilename) + local tf_full = curbufmeths.get_name() + nvim_command('edit ' .. testfilename_2) + local tf_full_2 = curbufmeths.get_name() + nvim_command('qall') + reset() + local oldfiles = meths.get_vvar('oldfiles') + eq(2, #oldfiles) + eq(testfilename, oldfiles[1]:sub(-#testfilename)) + eq(testfilename_2, oldfiles[2]:sub(-#testfilename_2)) + eq(tf_full, oldfiles[1]) + eq(tf_full_2, oldfiles[2]) + nvim_command('rshada!') + local oldfiles = meths.get_vvar('oldfiles') + eq(2, #oldfiles) + eq(testfilename, oldfiles[1]:sub(-#testfilename)) + eq(testfilename_2, oldfiles[2]:sub(-#testfilename_2)) + eq(tf_full, oldfiles[1]) + eq(tf_full_2, oldfiles[2]) + end) + + it('is able to dump and restore jump list', function() + nvim_command('edit ' .. testfilename_2) + nvim_command('normal! G') + nvim_command('normal! gg') + nvim_command('edit ' .. testfilename) + nvim_command('normal! G') + nvim_command('normal! gg') + nvim_command('enew') + nvim_command('normal! gg') + local saved = redir_exec('jumps') + nvim_command('qall') + reset() + eq(saved, redir_exec('jumps')) + end) + + it('is able to dump and restore jump list with different times (slow!)', + function() + nvim_command('edit ' .. testfilename_2) + nvim_command('sleep 2') + nvim_command('normal! G') + nvim_command('sleep 2') + nvim_command('normal! gg') + nvim_command('sleep 2') + nvim_command('edit ' .. testfilename) + nvim_command('sleep 2') + nvim_command('normal! G') + nvim_command('sleep 2') + nvim_command('normal! gg') + nvim_command('qall') + reset() + nvim_command('redraw') + nvim_command('edit ' .. testfilename) + eq(testfilename, funcs.bufname('%')) + eq(1, nvim_current_line()) + nvim_command('execute "normal! \\<C-o>"') + eq(testfilename, funcs.bufname('%')) + eq(1, nvim_current_line()) + nvim_command('execute "normal! \\<C-o>"') + eq(testfilename, funcs.bufname('%')) + eq(2, nvim_current_line()) + nvim_command('execute "normal! \\<C-o>"') + eq(testfilename_2, funcs.bufname('%')) + eq(1, nvim_current_line()) + nvim_command('execute "normal! \\<C-o>"') + eq(testfilename_2, funcs.bufname('%')) + eq(2, nvim_current_line()) + end) + + it('is able to dump and restore change list', function() + nvim_command('edit ' .. testfilename) + nvim_command('normal! Gra') + nvim_command('normal! ggrb') + nvim_command('qall!') + reset() + nvim_command('edit ' .. testfilename) + nvim_command('normal! Gg;') + -- Note: without “sync” “commands” test has good changes to fail for unknown + -- reason (in first eq expected 1 is compared with 2). Any command inserted + -- causes this to work properly. + nvim_command('" sync') + eq(1, nvim_current_line()) + nvim_command('normal! g;') + nvim_command('" sync 2') + eq(2, nvim_current_line()) + end) +end) |