local helpers = require("test.functional.helpers")(after_each) local Screen = require('test.functional.ui.screen') local eq = helpers.eq local feed = helpers.feed local meths = helpers.meths local clear = helpers.clear local command = helpers.command local expect = helpers.expect describe(':*map', function() before_each(clear) it('are not affected by &isident', function() meths.set_var('counter', 0) command('nnoremap :let counter+=1') meths.set_option('isident', ('%u'):format(('>'):byte())) command('nnoremap :let counter+=1') -- &isident used to disable keycode parsing here as well feed('\24\25') eq(4, meths.get_var('counter')) end) it(':imap ', function() command('imap foo') feed('i--') 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)