From 80a3018a09c1dbfdaa195b25502588dc72c2e186 Mon Sep 17 00:00:00 2001 From: Jay Sandhu Date: Wed, 2 Sep 2020 17:51:59 +0100 Subject: test: add some tests for :*map Add tests for: - Cursor position restored after :map expr - Cursor position restored after :imap expr - Error in :cmap expr handled correctly Cherry-picked from #12837 --- test/functional/ex_cmds/map_spec.lua | 102 ++++++++++++++++++++++++++ test/functional/ui/cmdline_highlight_spec.lua | 13 ++-- 2 files changed, 109 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/test/functional/ex_cmds/map_spec.lua b/test/functional/ex_cmds/map_spec.lua index 84d5bc2335..9663eb75c1 100644 --- a/test/functional/ex_cmds/map_spec.lua +++ b/test/functional/ex_cmds/map_spec.lua @@ -1,4 +1,5 @@ local helpers = require("test.functional.helpers")(after_each) +local Screen = require('test.functional.ui.screen') local eq = helpers.eq local feed = helpers.feed @@ -26,3 +27,104 @@ describe(':*map', function() expect('-foo-') end) end) + +describe(':*map ', function() + local screen + before_each(function() + clear() + screen = Screen.new(20, 5) + screen:attach() + end) + + it('cursor is restored after :map ', function() + command(':map x input("> ")') + screen:expect([[ + ^ | + ~ | + ~ | + ~ | + | + ]]) + feed('x') + screen:expect([[ + | + ~ | + ~ | + ~ | + > ^ | + ]]) + feed('\n') + screen:expect([[ + ^ | + ~ | + ~ | + ~ | + > | + ]]) + end) + + it('cursor is restored after :imap ', function() + command(':imap x input("> ")') + feed('i') + screen:expect([[ + ^ | + ~ | + ~ | + ~ | + -- INSERT -- | + ]]) + feed('x') + screen:expect([[ + | + ~ | + ~ | + ~ | + > ^ | + ]]) + feed('\n') + screen:expect([[ + ^ | + ~ | + ~ | + ~ | + > | + ]]) + end) + + it('error in :cmap handled correctly', function() + screen:try_resize(40, 5) + command(':cmap x execute("throw 42")') + feed(':echo "foo') + screen:expect([[ + | + ~ | + ~ | + ~ | + :echo "foo^ | + ]]) + feed('x') + screen:expect([[ + | + :echo "foo | + Error detected while processing : | + E605: Exception not caught: 42 | + :echo "foo^ | + ]]) + feed('"') + screen:expect([[ + | + :echo "foo | + Error detected while processing : | + E605: Exception not caught: 42 | + :echo "foo"^ | + ]]) + feed('\n') + screen:expect([[ + :echo "foo | + Error detected while processing : | + E605: Exception not caught: 42 | + foo | + Press ENTER or type command to continue^ | + ]]) + end) +end) diff --git a/test/functional/ui/cmdline_highlight_spec.lua b/test/functional/ui/cmdline_highlight_spec.lua index 9c746b99bd..384761ab17 100644 --- a/test/functional/ui/cmdline_highlight_spec.lua +++ b/test/functional/ui/cmdline_highlight_spec.lua @@ -33,7 +33,7 @@ before_each(function() let g:NUM_LVLS = 4 function Redraw() mode - return '' + return "\" endfunction let g:id = '' cnoremap {REDRAW} Redraw() @@ -42,7 +42,7 @@ before_each(function() let Cb = g:Nvim_color_input{g:id} let out = input({'prompt': ':', 'highlight': Cb}) let g:out{id} = out - return (a:do_return ? out : '') + return (a:do_return ? out : "\") endfunction nnoremap {PROMPT} DoPrompt(0) cnoremap {PROMPT} DoPrompt(1) @@ -410,7 +410,7 @@ describe('Command-line coloring', function() end) it('stops executing callback after a number of errors', function() set_color_cb('SplittedMultibyteStart') - start_prompt('let x = "«»«»«»«»«»"\n') + start_prompt('let x = "«»«»«»«»«»"') screen:expect([[ {EOB:~ }| {EOB:~ }| @@ -419,7 +419,7 @@ describe('Command-line coloring', function() :let x = " | {ERR:E5405: Chunk 0 start 10 splits multibyte}| {ERR: character} | - ^:let x = "«»«»«»«»«»" | + :let x = "«»«»«»«»«»"^ | ]]) feed('\n') screen:expect([[ @@ -432,6 +432,7 @@ describe('Command-line coloring', function() {EOB:~ }| | ]]) + feed('\n') eq('let x = "«»«»«»«»«»"', meths.get_var('out')) local msg = '\nE5405: Chunk 0 start 10 splits multibyte character' eq(msg:rep(1), funcs.execute('messages')) @@ -474,14 +475,14 @@ describe('Command-line coloring', function() ]]) feed('\n') screen:expect([[ - | + ^ | {EOB:~ }| {EOB:~ }| {EOB:~ }| {EOB:~ }| {EOB:~ }| {EOB:~ }| - ^:echo 42 | + :echo 42 | ]]) feed('\n') eq('echo 42', meths.get_var('out')) -- cgit From 9938961fd8bdaf7375cd17578c1ef2d43bef6763 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 17 Feb 2022 08:37:33 +0800 Subject: test: add more tests for :*map cursor and redrawing --- test/functional/ex_cmds/map_spec.lua | 78 ++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 8 deletions(-) (limited to 'test') diff --git a/test/functional/ex_cmds/map_spec.lua b/test/functional/ex_cmds/map_spec.lua index 9663eb75c1..75f644da0f 100644 --- a/test/functional/ex_cmds/map_spec.lua +++ b/test/functional/ex_cmds/map_spec.lua @@ -2,6 +2,7 @@ local helpers = require("test.functional.helpers")(after_each) local Screen = require('test.functional.ui.screen') local eq = helpers.eq +local exec = helpers.exec local feed = helpers.feed local meths = helpers.meths local clear = helpers.clear @@ -28,7 +29,7 @@ describe(':*map', function() end) end) -describe(':*map ', function() +describe(':*map cursor and redrawing', function() local screen before_each(function() clear() @@ -36,8 +37,8 @@ describe(':*map ', function() screen:attach() end) - it('cursor is restored after :map ', function() - command(':map x input("> ")') + it('cursor is restored after :map which calls input()', function() + command('map x input("> ")') screen:expect([[ ^ | ~ | @@ -63,8 +64,8 @@ describe(':*map ', function() ]]) end) - it('cursor is restored after :imap ', function() - command(':imap x input("> ")') + it('cursor is restored after :imap which calls input()', function() + command('imap x input("> ")') feed('i') screen:expect([[ ^ | @@ -91,9 +92,57 @@ describe(':*map ', function() ]]) end) - it('error in :cmap handled correctly', function() + it('cursor is restored after :map which redraws statusline vim-patch:8.1.2336', function() + exec([[ + call setline(1, ['one', 'two', 'three']) + 2 + set ls=2 + hi! link StatusLine ErrorMsg + noremap Func() + func Func() + let g:on = !get(g:, 'on', 0) + redraws + return '' + endfunc + func Status() + return get(g:, 'on', 0) ? '[on]' : '' + endfunc + set stl=%{Status()} + ]]) + feed('') + screen:expect([[ + one | + ^two | + three | + [on] | + | + ]]) + end) + + it('error in :nmap does not mess up display vim-patch:4.2.4338', function() screen:try_resize(40, 5) - command(':cmap x execute("throw 42")') + command('nmap execute("throw 42")') + feed('') + screen:expect([[ + | + | + Error detected while processing : | + E605: Exception not caught: 42 | + Press ENTER or type command to continue^ | + ]]) + feed('') + screen:expect([[ + ^ | + ~ | + ~ | + ~ | + | + ]]) + end) + + it('error in :cmap handled correctly vim-patch:4.2.4338', function() + screen:try_resize(40, 5) + command('cmap execute("throw 42")') feed(':echo "foo') screen:expect([[ | @@ -102,7 +151,7 @@ describe(':*map ', function() ~ | :echo "foo^ | ]]) - feed('x') + feed('') screen:expect([[ | :echo "foo | @@ -127,4 +176,17 @@ describe(':*map ', function() Press ENTER or type command to continue^ | ]]) end) + + it('listing mappings clears command line vim-patch:8.2.4401', function() + screen:try_resize(40, 5) + command('nmap a b') + feed(': nmap a') + screen:expect([[ + ^ | + ~ | + ~ | + ~ | + n a b | + ]]) + end) end) -- cgit