From 1aefbff641ec6da77aa1954cbc6d1f10e0f69346 Mon Sep 17 00:00:00 2001 From: Matthew Malcomson Date: Wed, 19 Apr 2017 12:01:41 +0100 Subject: Add some basic tests for macros --- test/functional/normal/macro_spec.lua | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 test/functional/normal/macro_spec.lua (limited to 'test') diff --git a/test/functional/normal/macro_spec.lua b/test/functional/normal/macro_spec.lua new file mode 100644 index 0000000000..102d8fc723 --- /dev/null +++ b/test/functional/normal/macro_spec.lua @@ -0,0 +1,30 @@ +local helpers = require('test.functional.helpers')(after_each) + +local eq = helpers.eq +local eval = helpers.eval +local feed = helpers.feed +local clear = helpers.clear +local expect = helpers.expect +local command = helpers.command + +describe('macros', function() + before_each(clear) + it('can be recorded and replayed', function() + feed('qiahelloq') + expect('hello') + eq(eval('@i'), 'ahello') + feed('@i') + expect('hellohello') + eq(eval('@i'), 'ahello') + end) + it('applies maps', function() + command('imap x l') + command('nmap l a') + feed('qilxxxq') + expect('lll') + eq(eval('@i'), 'lxxx') + feed('@i') + expect('llllll') + eq(eval('@i'), 'lxxx') + end) +end) -- cgit From 20bfe0f2a34a69f85af262fe350761f85776ad46 Mon Sep 17 00:00:00 2001 From: Matthew Malcomson Date: Tue, 4 Apr 2017 14:07:08 +0100 Subject: Account for :lmap in macros close #5652 Start by adding some tests --- test/functional/options/keymap_spec.lua | 206 ++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 test/functional/options/keymap_spec.lua (limited to 'test') diff --git a/test/functional/options/keymap_spec.lua b/test/functional/options/keymap_spec.lua new file mode 100644 index 0000000000..ffb76a42bd --- /dev/null +++ b/test/functional/options/keymap_spec.lua @@ -0,0 +1,206 @@ +local helpers = require('test.functional.helpers')(after_each) +local clear, feed, eq = helpers.clear, helpers.feed, helpers.eq +local expect, command, eval = helpers.expect, helpers.command, helpers.eval +local insert, call = helpers.insert, helpers.call +local funcs, dedent = helpers.funcs, helpers.dedent + +-- First test it's implemented using the :lmap and :lnoremap commands, then +-- check those mappings behave as expected. +describe("'keymap' / :lmap", function() + clear() + before_each(function() + clear() + insert("lllaaa") + command('set iminsert=1') + command('set imsearch=1') + command('lmap l a') + feed('gg0') + end) + + describe("'keymap' as :lnoremap", function() + -- Shows that 'keymap' sets language mappings without allowing + -- remapping of those mappings. + -- This equivalence allows us to only test :lmap commands and assert + -- they behave the same as 'keymap' settings. + -- It does rely on the absence of special code that implements 'keymap' + -- and :lmap differently but shows mappings from the 'keymap' after + -- typing :lmap. + it("'keymap' mappings are shown with :lmap", function() + command('lmapclear') + command('lmapclear ') + command('set keymap=dvorak') + command('set nomore') + local bindings = funcs.nvim_command_output('lmap') + eq(bindings, dedent([[ + + l " *@_ + l ' *@- + l + *@} + l , *@w + l - *@[ + l . *@v + l / *@z + l : *@S + l ; *@s + l < *@W + l = *@] + l > *@V + l ? *@Z + l A *@A + l B *@X + l C *@J + l D *@E + l E *@> + l F *@U + l G *@I + l H *@D + l I *@C + l J *@H + l K *@T + l L *@N + l M *@M + l N *@B + l O *@R + l P *@L + l Q *@" + l R *@P + l S *@O + l T *@Y + l U *@G + l V *@K + l W *@< + l X *@Q + l Y *@F + l Z *@: + l [ *@/ + l \ *@\ + l ] *@= + l _ *@{ + l a *@a + l b *@x + l c *@j + l d *@e + l e *@. + l f *@u + l g *@i + l h *@d + l i *@c + l j *@h + l k *@t + l l *@n + l m *@m + l n *@b + l o *@r + l p *@l + l q *@' + l r *@p + l s *@o + l t *@y + l u *@g + l v *@k + l w *@, + l x *@q + l y *@f + l z *@; + l { *@? + l | *@| + l } *@+]])) + end) + end) + describe("'iminsert' option", function() + it("Uses :lmap in insert mode when ON", function() + feed('il') + expect('alllaaa') + end) + it("Ignores :lmap in insert mode when OFF", function() + command('set iminsert=0') + feed('il') + expect('llllaaa') + end) + it("Can be toggled with in insert mode", function() + feed('ill') + expect('lalllaaa') + eq(eval('&iminsert'), 1) + feed('i') + eq(eval('&iminsert'), 0) + end) + end) + describe("'imsearch' option", function() + it("Uses :lmap at search prompt when ON", function() + feed('/lll3x') + expect('lll') + end) + it("Ignores :lmap at search prompt when OFF", function() + command('set imsearch=0') + feed('gg/lll3x') + expect('aaa') + end) + it("Can be toggled with C-^", function() + eq(eval('&imsearch'), 1) + feed('/lll3x') + expect('aaa') + eq(eval('&imsearch'), 0) + feed('u0/lll3x') + expect('lll') + eq(eval('&imsearch'), 1) + end) + it("can follow 'iminsert'", function() + command('set imsearch=-1') + feed('/lll3x') + expect('lll') + eq(eval('&imsearch'), -1) + eq(eval('&iminsert'), 1) + feed('u/lll3x') + expect('aaa') + eq(eval('&imsearch'), -1) + eq(eval('&iminsert'), 0) + end) + end) + it(":lmap not applied to macros", function() + command("call setreg('a', 'il')") + feed('@a') + expect('llllaaa') + eq(call('getreg', 'a'), 'il') + end) + it(":lmap applied to macro recording", function() + feed('qailq@a') + expect('aalllaaa') + eq(call('getreg', 'a'), 'ia') + end) + it(":lmap not applied to mappings", function() + command('imap t l') + feed('it') + expect('llllaaa') + end) + it("mappings applied to keys created with :lmap", function() + command('imap a x') + feed('il') + expect('xlllaaa') + end) + it("mappings not applied to keys gotten with :lnoremap", function() + command('lmapclear') + command('lnoremap l a') + command('imap a x') + feed('il') + expect('alllaaa') + end) + it("is applied when using f/F t/T", function() + feed('flx') + expect('lllaa') + feed('0ia4lFlx') + expect('lllaa') + feed('tllx') + expect('llla') + feed('0ia4lTlhx') + expect('llla') + end) + it('takes priority over :imap mappings', function() + command('imap l x') + feed('il') + expect('alllaaa') + command('lmapclear') + command('lmap l a') + feed('il') + expect('aalllaaa') + end) +end) -- cgit From e01f35c4bb95ce81eebdba8c8b53d73964508e73 Mon Sep 17 00:00:00 2001 From: Matthew Malcomson Date: Fri, 2 Jun 2017 15:23:18 +0100 Subject: :lnoremap mappings should not be remapped when replaying a recording --- test/functional/options/keymap_spec.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/functional/options/keymap_spec.lua b/test/functional/options/keymap_spec.lua index ffb76a42bd..ff78348517 100644 --- a/test/functional/options/keymap_spec.lua +++ b/test/functional/options/keymap_spec.lua @@ -181,8 +181,10 @@ describe("'keymap' / :lmap", function() command('lmapclear') command('lnoremap l a') command('imap a x') - feed('il') + feed('qailq') expect('alllaaa') + feed('@a') + expect('aalllaaa') end) it("is applied when using f/F t/T", function() feed('flx') -- cgit From d989051220a5137e7490ca5020225da109e0af0b Mon Sep 17 00:00:00 2001 From: Matthew Malcomson Date: Wed, 24 Jan 2018 13:09:22 +0000 Subject: Split :lnoremap test into done and pending There is some behaviour that we keep with the recent changes, and some behaviour that we change. Instetad of having one failing test covering all behaviour, we split the test into two. --- test/functional/options/keymap_spec.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'test') diff --git a/test/functional/options/keymap_spec.lua b/test/functional/options/keymap_spec.lua index ff78348517..e1424cb8fe 100644 --- a/test/functional/options/keymap_spec.lua +++ b/test/functional/options/keymap_spec.lua @@ -178,6 +178,16 @@ describe("'keymap' / :lmap", function() expect('xlllaaa') end) it("mappings not applied to keys gotten with :lnoremap", function() + command('lmapclear') + command('lnoremap l a') + command('imap a x') + feed('il') + expect('alllaaa') + end) + -- This is a problem introduced when introducting :lmap and macro + -- compatibility. There are no plans to fix this as the complexity involved + -- seems too great. + pending('mappings not applied to macro replay of :lnoremap', function() command('lmapclear') command('lnoremap l a') command('imap a x') -- cgit From 3b304fc04ac0ac7ffe24ba4b83fc0d0ba4b80cfd Mon Sep 17 00:00:00 2001 From: Matthew Malcomson Date: Wed, 24 Jan 2018 13:16:27 +0000 Subject: 'keymap' now uses :lmap instead of :lnoremap This means that the major way that :lmap mappings are applied works as one would expect with macros. This also means that having a translation with 'keymap' does not preclude using mappings in insert mode with :imap. --- test/functional/options/keymap_spec.lua | 156 ++++++++++++++++---------------- 1 file changed, 78 insertions(+), 78 deletions(-) (limited to 'test') diff --git a/test/functional/options/keymap_spec.lua b/test/functional/options/keymap_spec.lua index e1424cb8fe..43fd1eb990 100644 --- a/test/functional/options/keymap_spec.lua +++ b/test/functional/options/keymap_spec.lua @@ -17,94 +17,94 @@ describe("'keymap' / :lmap", function() feed('gg0') end) - describe("'keymap' as :lnoremap", function() - -- Shows that 'keymap' sets language mappings without allowing - -- remapping of those mappings. - -- This equivalence allows us to only test :lmap commands and assert - -- they behave the same as 'keymap' settings. + describe("'keymap' as :lmap", function() + -- Shows that 'keymap' sets language mappings that allows remapping. + -- This equivalence allows us to only test :lmap commands and assert they + -- behave the same as 'keymap' settings. -- It does rely on the absence of special code that implements 'keymap' -- and :lmap differently but shows mappings from the 'keymap' after -- typing :lmap. + -- At the moment this is the case. it("'keymap' mappings are shown with :lmap", function() command('lmapclear') command('lmapclear ') command('set keymap=dvorak') command('set nomore') local bindings = funcs.nvim_command_output('lmap') - eq(bindings, dedent([[ + eq(dedent([[ - l " *@_ - l ' *@- - l + *@} - l , *@w - l - *@[ - l . *@v - l / *@z - l : *@S - l ; *@s - l < *@W - l = *@] - l > *@V - l ? *@Z - l A *@A - l B *@X - l C *@J - l D *@E - l E *@> - l F *@U - l G *@I - l H *@D - l I *@C - l J *@H - l K *@T - l L *@N - l M *@M - l N *@B - l O *@R - l P *@L - l Q *@" - l R *@P - l S *@O - l T *@Y - l U *@G - l V *@K - l W *@< - l X *@Q - l Y *@F - l Z *@: - l [ *@/ - l \ *@\ - l ] *@= - l _ *@{ - l a *@a - l b *@x - l c *@j - l d *@e - l e *@. - l f *@u - l g *@i - l h *@d - l i *@c - l j *@h - l k *@t - l l *@n - l m *@m - l n *@b - l o *@r - l p *@l - l q *@' - l r *@p - l s *@o - l t *@y - l u *@g - l v *@k - l w *@, - l x *@q - l y *@f - l z *@; - l { *@? - l | *@| - l } *@+]])) + l " @_ + l ' @- + l + @} + l , @w + l - @[ + l . @v + l / @z + l : @S + l ; @s + l < @W + l = @] + l > @V + l ? @Z + l A @A + l B @X + l C @J + l D @E + l E @> + l F @U + l G @I + l H @D + l I @C + l J @H + l K @T + l L @N + l M @M + l N @B + l O @R + l P @L + l Q @" + l R @P + l S @O + l T @Y + l U @G + l V @K + l W @< + l X @Q + l Y @F + l Z @: + l [ @/ + l \ @\ + l ] @= + l _ @{ + l a @a + l b @x + l c @j + l d @e + l e @. + l f @u + l g @i + l h @d + l i @c + l j @h + l k @t + l l @n + l m @m + l n @b + l o @r + l p @l + l q @' + l r @p + l s @o + l t @y + l u @g + l v @k + l w @, + l x @q + l y @f + l z @; + l { @? + l | @| + l } @+]]), bindings) end) end) describe("'iminsert' option", function() -- cgit From cc58ec9a801510fe77edb34e02b0635c4f24f924 Mon Sep 17 00:00:00 2001 From: Matthew Malcomson Date: Thu, 1 Jun 2017 09:20:56 +0100 Subject: Update documentation Update vim_diff.txt with :lmap differences, update documentation on 'keymap', and add tests. The tests added are to demonstrate the behaviour specified in the documentation of :loadkeymap. --- test/functional/options/keymap_spec.lua | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'test') diff --git a/test/functional/options/keymap_spec.lua b/test/functional/options/keymap_spec.lua index 43fd1eb990..7f6d623dc7 100644 --- a/test/functional/options/keymap_spec.lua +++ b/test/functional/options/keymap_spec.lua @@ -215,4 +215,19 @@ describe("'keymap' / :lmap", function() feed('il') expect('aalllaaa') end) + it('does not cause recursive mappings', function() + command('lmap a l') + feed('qailaq') + expect('allllaaa') + feed('u@a') + expect('allllaaa') + end) + it('can handle multicharacter mappings', function() + command("lmap 'a x") + command("lmap '' '") + feed("qai'a''aq") + expect("x'alllaaa") + feed('u@a') + expect("x'alllaaa") + end) end) -- cgit