diff options
Diffstat (limited to 'test/functional/editor/mark_spec.lua')
-rw-r--r-- | test/functional/editor/mark_spec.lua | 426 |
1 files changed, 211 insertions, 215 deletions
diff --git a/test/functional/editor/mark_spec.lua b/test/functional/editor/mark_spec.lua index e669d7f2bb..6b20a736c0 100644 --- a/test/functional/editor/mark_spec.lua +++ b/test/functional/editor/mark_spec.lua @@ -1,15 +1,16 @@ local helpers = require('test.functional.helpers')(after_each) local Screen = require('test.functional.ui.screen') -local meths = helpers.meths -local curbufmeths = helpers.curbufmeths +local api = helpers.api local clear = helpers.clear local command = helpers.command -local funcs = helpers.funcs +local fn = helpers.fn local eq = helpers.eq local feed = helpers.feed local write_file = helpers.write_file local pcall_err = helpers.pcall_err -local cursor = function() return helpers.meths.win_get_cursor(0) end +local cursor = function() + return helpers.api.nvim_win_get_cursor(0) +end describe('named marks', function() local file1 = 'Xtestfile-functional-editor-marks' @@ -24,153 +25,153 @@ describe('named marks', function() os.remove(file2) end) - it("can be set", function() - command("edit " .. file1) - command("mark a") - eq({1, 0}, curbufmeths.get_mark("a")) - feed("jmb") - eq({2, 0}, curbufmeths.get_mark("b")) - feed("jmB") - eq({3, 0}, curbufmeths.get_mark("B")) - command("4kc") - eq({4, 0}, curbufmeths.get_mark("c")) + it('can be set', function() + command('edit ' .. file1) + command('mark a') + eq({ 1, 0 }, api.nvim_buf_get_mark(0, 'a')) + feed('jmb') + eq({ 2, 0 }, api.nvim_buf_get_mark(0, 'b')) + feed('jmB') + eq({ 3, 0 }, api.nvim_buf_get_mark(0, 'B')) + command('4kc') + eq({ 4, 0 }, api.nvim_buf_get_mark(0, 'c')) end) - it("errors when set out of range with :mark", function() - command("edit " .. file1) - local err = pcall_err(helpers.exec_capture, "1000mark x") - eq("nvim_exec2(): Vim(mark):E16: Invalid range: 1000mark x", err) + it('errors when set out of range with :mark', function() + command('edit ' .. file1) + local err = pcall_err(helpers.exec_capture, '1000mark x') + eq('nvim_exec2(): Vim(mark):E16: Invalid range: 1000mark x', err) end) - it("errors when set out of range with :k", function() - command("edit " .. file1) - local err = pcall_err(helpers.exec_capture, "1000kx") - eq("nvim_exec2(): Vim(k):E16: Invalid range: 1000kx", err) + it('errors when set out of range with :k', function() + command('edit ' .. file1) + local err = pcall_err(helpers.exec_capture, '1000kx') + eq('nvim_exec2(): Vim(k):E16: Invalid range: 1000kx', err) end) - it("errors on unknown mark name with :mark", function() - command("edit " .. file1) - local err = pcall_err(helpers.exec_capture, "mark #") - eq("nvim_exec2(): Vim(mark):E191: Argument must be a letter or forward/backward quote", err) + it('errors on unknown mark name with :mark', function() + command('edit ' .. file1) + local err = pcall_err(helpers.exec_capture, 'mark #') + eq('nvim_exec2(): Vim(mark):E191: Argument must be a letter or forward/backward quote', err) end) it("errors on unknown mark name with '", function() - command("edit " .. file1) + command('edit ' .. file1) local err = pcall_err(helpers.exec_capture, "normal! '#") - eq("nvim_exec2(): Vim(normal):E78: Unknown mark", err) + eq('nvim_exec2(): Vim(normal):E78: Unknown mark', err) end) - it("errors on unknown mark name with `", function() - command("edit " .. file1) - local err = pcall_err(helpers.exec_capture, "normal! `#") - eq("nvim_exec2(): Vim(normal):E78: Unknown mark", err) + it('errors on unknown mark name with `', function() + command('edit ' .. file1) + local err = pcall_err(helpers.exec_capture, 'normal! `#') + eq('nvim_exec2(): Vim(normal):E78: Unknown mark', err) end) it("errors when moving to a mark that is not set with '", function() - command("edit " .. file1) + command('edit ' .. file1) local err = pcall_err(helpers.exec_capture, "normal! 'z") - eq("nvim_exec2(): Vim(normal):E20: Mark not set", err) + eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) err = pcall_err(helpers.exec_capture, "normal! '.") - eq("nvim_exec2(): Vim(normal):E20: Mark not set", err) + eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) end) - it("errors when moving to a mark that is not set with `", function() - command("edit " .. file1) - local err = pcall_err(helpers.exec_capture, "normal! `z") - eq("nvim_exec2(): Vim(normal):E20: Mark not set", err) - err = pcall_err(helpers.exec_capture, "normal! `>") - eq("nvim_exec2(): Vim(normal):E20: Mark not set", err) + it('errors when moving to a mark that is not set with `', function() + command('edit ' .. file1) + local err = pcall_err(helpers.exec_capture, 'normal! `z') + eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) + err = pcall_err(helpers.exec_capture, 'normal! `>') + eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) end) it("errors when moving to a global mark that is not set with '", function() - command("edit " .. file1) + command('edit ' .. file1) local err = pcall_err(helpers.exec_capture, "normal! 'Z") - eq("nvim_exec2(): Vim(normal):E20: Mark not set", err) + eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) end) - it("errors when moving to a global mark that is not set with `", function() - command("edit " .. file1) - local err = pcall_err(helpers.exec_capture, "normal! `Z") - eq("nvim_exec2(): Vim(normal):E20: Mark not set", err) + it('errors when moving to a global mark that is not set with `', function() + command('edit ' .. file1) + local err = pcall_err(helpers.exec_capture, 'normal! `Z') + eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) end) it("can move to them using '", function() - command("args " .. file1 .. " " .. file2) - feed("j") - feed("ma") + command('args ' .. file1 .. ' ' .. file2) + feed('j') + feed('ma') feed("G'a") - eq({2, 0}, cursor()) - feed("mA") - command("next") + eq({ 2, 0 }, cursor()) + feed('mA') + command('next') feed("'A") - eq(1, meths.get_current_buf().id) - eq({2, 0}, cursor()) + eq(1, api.nvim_get_current_buf()) + eq({ 2, 0 }, cursor()) end) - it("can move to them using `", function() - command("args " .. file1 .. " " .. file2) - feed("jll") - feed("ma") - feed("G`a") - eq({2, 2}, cursor()) - feed("mA") - command("next") - feed("`A") - eq(1, meths.get_current_buf().id) - eq({2, 2}, cursor()) + it('can move to them using `', function() + command('args ' .. file1 .. ' ' .. file2) + feed('jll') + feed('ma') + feed('G`a') + eq({ 2, 2 }, cursor()) + feed('mA') + command('next') + feed('`A') + eq(1, api.nvim_get_current_buf()) + eq({ 2, 2 }, cursor()) end) it("can move to them using g'", function() - command("args " .. file1 .. " " .. file2) - feed("jll") - feed("ma") + command('args ' .. file1 .. ' ' .. file2) + feed('jll') + feed('ma') feed("Gg'a") - eq({2, 0}, cursor()) - feed("mA") - command("next") + eq({ 2, 0 }, cursor()) + feed('mA') + command('next') feed("g'A") - eq(1, meths.get_current_buf().id) - eq({2, 0}, cursor()) + eq(1, api.nvim_get_current_buf()) + eq({ 2, 0 }, cursor()) end) - it("can move to them using g`", function() - command("args " .. file1 .. " " .. file2) - feed("jll") - feed("ma") - feed("Gg`a") - eq({2, 2}, cursor()) - feed("mA") - command("next") - feed("g`A") - eq(1, meths.get_current_buf().id) - eq({2, 2}, cursor()) + it('can move to them using g`', function() + command('args ' .. file1 .. ' ' .. file2) + feed('jll') + feed('ma') + feed('Gg`a') + eq({ 2, 2 }, cursor()) + feed('mA') + command('next') + feed('g`A') + eq(1, api.nvim_get_current_buf()) + eq({ 2, 2 }, cursor()) end) it("can move to them using :'", function() - command("args " .. file1 .. " " .. file2) - feed("j") - feed("ma") - feed("G") + command('args ' .. file1 .. ' ' .. file2) + feed('j') + feed('ma') + feed('G') command("'a") - eq({2, 0}, cursor()) - feed("mA") - command("next") + eq({ 2, 0 }, cursor()) + feed('mA') + command('next') command("'A") - eq(1, meths.get_current_buf().id) - eq({2, 0}, cursor()) + eq(1, api.nvim_get_current_buf()) + eq({ 2, 0 }, cursor()) end) it("errors when it can't find the buffer", function() - command("args " .. file1 .. " " .. file2) - feed("mA") - command("next") - command("bw! " .. file1 ) + command('args ' .. file1 .. ' ' .. file2) + feed('mA') + command('next') + command('bw! ' .. file1) local err = pcall_err(helpers.exec_capture, "normal! 'A") - eq("nvim_exec2(): Vim(normal):E92: Buffer 1 not found", err) + eq('nvim_exec2(): Vim(normal):E92: Buffer 1 not found', err) os.remove(file1) end) - it("errors when using a mark in another buffer in command range", function() + it('errors when using a mark in another buffer in command range', function() feed('ifoo<Esc>mA') command('enew') feed('ibar<Esc>') @@ -178,147 +179,147 @@ describe('named marks', function() end) it("leave a context mark when moving with '", function() - command("edit " .. file1) - feed("llmamA") - feed("10j0") -- first col, last line + command('edit ' .. file1) + feed('llmamA') + feed('10j0') -- first col, last line local pos = cursor() feed("'a") - feed("<C-o>") + feed('<C-o>') eq(pos, cursor()) feed("'A") - feed("<C-o>") + feed('<C-o>') eq(pos, cursor()) end) - it("leave a context mark when moving with `", function() - command("edit " .. file1) - feed("llmamA") - feed("10j0") -- first col, last line + it('leave a context mark when moving with `', function() + command('edit ' .. file1) + feed('llmamA') + feed('10j0') -- first col, last line local pos = cursor() - feed("`a") - feed("<C-o>") + feed('`a') + feed('<C-o>') eq(pos, cursor()) - feed("`A") - feed("<C-o>") + feed('`A') + feed('<C-o>') eq(pos, cursor()) end) it("leave a context mark when the mark changes buffer with g'", function() - command("args " .. file1 .. " " .. file2) + command('args ' .. file1 .. ' ' .. file2) local pos - feed("GmA") - command("next") + feed('GmA') + command('next') pos = cursor() - command("clearjumps") - feed("g'A") -- since the mark is in another buffer, it leaves a context mark - feed("<C-o>") + command('clearjumps') + feed("g'A") -- since the mark is in another buffer, it leaves a context mark + feed('<C-o>') eq(pos, cursor()) end) - it("leave a context mark when the mark changes buffer with g`", function() - command("args " .. file1 .. " " .. file2) + it('leave a context mark when the mark changes buffer with g`', function() + command('args ' .. file1 .. ' ' .. file2) local pos - feed("GmA") - command("next") + feed('GmA') + command('next') pos = cursor() - command("clearjumps") - feed("g`A") -- since the mark is in another buffer, it leaves a context mark - feed("<C-o>") + command('clearjumps') + feed('g`A') -- since the mark is in another buffer, it leaves a context mark + feed('<C-o>') eq(pos, cursor()) end) it("do not leave a context mark when moving with g'", function() - command("edit " .. file1) + command('edit ' .. file1) local pos - feed("ma") + feed('ma') pos = cursor() -- Mark pos - feed("10j0") -- first col, last line + feed('10j0') -- first col, last line feed("g'a") - feed("<C-o>") -- should do nothing + feed('<C-o>') -- should do nothing eq(pos, cursor()) - feed("mA") + feed('mA') pos = cursor() -- Mark pos - feed("10j0") -- first col, last line + feed('10j0') -- first col, last line feed("g'a") - feed("<C-o>") -- should do nothing + feed('<C-o>') -- should do nothing eq(pos, cursor()) end) - it("do not leave a context mark when moving with g`", function() - command("edit " .. file1) + it('do not leave a context mark when moving with g`', function() + command('edit ' .. file1) local pos - feed("ma") + feed('ma') pos = cursor() -- Mark pos - feed("10j0") -- first col, last line - feed("g`a") - feed("<C-o>") -- should do nothing + feed('10j0') -- first col, last line + feed('g`a') + feed('<C-o>') -- should do nothing eq(pos, cursor()) - feed("mA") + feed('mA') pos = cursor() -- Mark pos - feed("10j0") -- first col, last line + feed('10j0') -- first col, last line feed("g'a") - feed("<C-o>") -- should do nothing + feed('<C-o>') -- should do nothing eq(pos, cursor()) end) - it("open folds when moving to them", function() - command("edit " .. file1) - feed("jzfG") -- Fold from the second line to the end - command("3mark a") - feed("G") -- On top of the fold - assert(funcs.foldclosed('.') ~= -1) -- folded + it('open folds when moving to them', function() + command('edit ' .. file1) + feed('jzfG') -- Fold from the second line to the end + command('3mark a') + feed('G') -- On top of the fold + assert(fn.foldclosed('.') ~= -1) -- folded feed("'a") - eq(-1, funcs.foldclosed('.')) + eq(-1, fn.foldclosed('.')) - feed("zc") - assert(funcs.foldclosed('.') ~= -1) -- folded + feed('zc') + assert(fn.foldclosed('.') ~= -1) -- folded -- TODO: remove this workaround after fixing #15873 - feed("k`a") - eq(-1, funcs.foldclosed('.')) + feed('k`a') + eq(-1, fn.foldclosed('.')) - feed("zc") - assert(funcs.foldclosed('.') ~= -1) -- folded + feed('zc') + assert(fn.foldclosed('.') ~= -1) -- folded feed("kg'a") - eq(-1, funcs.foldclosed('.')) + eq(-1, fn.foldclosed('.')) - feed("zc") - assert(funcs.foldclosed('.') ~= -1) -- folded - feed("kg`a") - eq(-1, funcs.foldclosed('.')) + feed('zc') + assert(fn.foldclosed('.') ~= -1) -- folded + feed('kg`a') + eq(-1, fn.foldclosed('.')) end) it("do not open folds when moving to them doesn't move the cursor", function() - command("edit " .. file1) - feed("jzfG") -- Fold from the second line to the end - assert(funcs.foldclosed('.') == 2) -- folded - feed("ma") + command('edit ' .. file1) + feed('jzfG') -- Fold from the second line to the end + assert(fn.foldclosed('.') == 2) -- folded + feed('ma') feed("'a") - feed("`a") + feed('`a') feed("g'a") - feed("g`a") + feed('g`a') -- should still be folded - eq(2, funcs.foldclosed('.')) + eq(2, fn.foldclosed('.')) end) it("getting '{ '} '( ') does not move cursor", function() - meths.buf_set_lines(0, 0, 0, true, {'aaaaa', 'bbbbb', 'ccccc', 'ddddd', 'eeeee'}) - meths.win_set_cursor(0, {2, 0}) - funcs.getpos("'{") - eq({2, 0}, meths.win_get_cursor(0)) - funcs.getpos("'}") - eq({2, 0}, meths.win_get_cursor(0)) - funcs.getpos("'(") - eq({2, 0}, meths.win_get_cursor(0)) - funcs.getpos("')") - eq({2, 0}, meths.win_get_cursor(0)) + api.nvim_buf_set_lines(0, 0, 0, true, { 'aaaaa', 'bbbbb', 'ccccc', 'ddddd', 'eeeee' }) + api.nvim_win_set_cursor(0, { 2, 0 }) + fn.getpos("'{") + eq({ 2, 0 }, api.nvim_win_get_cursor(0)) + fn.getpos("'}") + eq({ 2, 0 }, api.nvim_win_get_cursor(0)) + fn.getpos("'(") + eq({ 2, 0 }, api.nvim_win_get_cursor(0)) + fn.getpos("')") + eq({ 2, 0 }, api.nvim_win_get_cursor(0)) end) it('in command range does not move cursor #19248', function() - meths.create_user_command('Test', ':', {range = true}) - meths.buf_set_lines(0, 0, 0, true, {'aaaaa', 'bbbbb', 'ccccc', 'ddddd', 'eeeee'}) - meths.win_set_cursor(0, {2, 0}) + api.nvim_create_user_command('Test', ':', { range = true }) + api.nvim_buf_set_lines(0, 0, 0, true, { 'aaaaa', 'bbbbb', 'ccccc', 'ddddd', 'eeeee' }) + api.nvim_win_set_cursor(0, { 2, 0 }) command([['{,'}Test]]) - eq({2, 0}, meths.win_get_cursor(0)) + eq({ 2, 0 }, api.nvim_win_get_cursor(0)) end) end) @@ -327,16 +328,16 @@ describe('named marks view', function() local file2 = 'Xtestfile-functional-editor-marks-2' local function content() local c = {} - for i=1,30 do - c[i] = i .. " line" + for i = 1, 30 do + c[i] = i .. ' line' end - return table.concat(c, "\n") + return table.concat(c, '\n') end before_each(function() clear() write_file(file1, content(), false, false) write_file(file2, content(), false, false) - command("set jumpoptions+=view") + command('set jumpoptions+=view') end) after_each(function() os.remove(file1) @@ -344,12 +345,12 @@ describe('named marks view', function() end) it('is restored in normal mode but not op-pending mode', function() - local screen = Screen.new(5, 8) - screen:attach() - command("edit " .. file1) - feed("<C-e>jWma") - feed("G'a") - local expected = [[ + local screen = Screen.new(5, 8) + screen:attach() + command('edit ' .. file1) + feed('<C-e>jWma') + feed("G'a") + local expected = [[ 2 line | ^3 line | 4 line | @@ -359,9 +360,9 @@ describe('named marks view', function() 8 line | | ]] - screen:expect({grid=expected}) - feed("G`a") - screen:expect([[ + screen:expect({ grid = expected }) + feed('G`a') + screen:expect([[ 2 line | 3 ^line | 4 line | @@ -371,9 +372,9 @@ describe('named marks view', function() 8 line | | ]]) - -- not in op-pending mode #20886 - feed("ggj=`a") - screen:expect([[ + -- not in op-pending mode #20886 + feed('ggj=`a') + screen:expect([[ 1 line | ^2 line | 3 line | @@ -388,8 +389,8 @@ describe('named marks view', function() it('is restored across files', function() local screen = Screen.new(5, 5) screen:attach() - command("args " .. file1 .. " " .. file2) - feed("<C-e>mA") + command('args ' .. file1 .. ' ' .. file2) + feed('<C-e>mA') local mark_view = [[ ^2 line | 3 line | @@ -398,7 +399,7 @@ describe('named marks view', function() | ]] screen:expect(mark_view) - command("next") + command('next') screen:expect([[ ^1 line | 2 line | @@ -410,18 +411,16 @@ describe('named marks view', function() screen:expect(mark_view) end) - it('fallback to standard behavior when view can\'t be recovered', function() - local screen = Screen.new(10, 10) - screen:attach() - command("edit " .. file1) - feed("7GzbmaG") -- Seven lines from the top - command("new") -- Screen size for window is now half the height can't be restored - feed("<C-w>p'a") - screen:expect([[ + it("fallback to standard behavior when view can't be recovered", function() + local screen = Screen.new(10, 10) + screen:attach() + command('edit ' .. file1) + feed('7GzbmaG') -- Seven lines from the top + command('new') -- Screen size for window is now half the height can't be restored + feed("<C-w>p'a") + screen:expect([[ | - ~ | - ~ | - ~ | + ~ |*3 [No Name] | 6 line | ^7 line | @@ -454,10 +453,7 @@ describe('named marks view', function() command('bwipe!') screen:expect([[ ^ | - ~ | - ~ | - ~ | - ~ | + ~ |*4 | ]]) command('rshada!') |