diff options
Diffstat (limited to 'test/functional/options/pastetoggle_spec.lua')
-rw-r--r-- | test/functional/options/pastetoggle_spec.lua | 86 |
1 files changed, 68 insertions, 18 deletions
diff --git a/test/functional/options/pastetoggle_spec.lua b/test/functional/options/pastetoggle_spec.lua index a1f86f73ff..40c14fa187 100644 --- a/test/functional/options/pastetoggle_spec.lua +++ b/test/functional/options/pastetoggle_spec.lua @@ -4,16 +4,14 @@ local clear = helpers.clear local feed = helpers.feed local command = helpers.command local eq = helpers.eq +local expect = helpers.expect local eval = helpers.eval +local insert = helpers.insert +local meths = helpers.meths local sleep = helpers.sleep -local expect = helpers.expect describe("'pastetoggle' option", function() - before_each(function() - clear() - command('set nopaste') - end) - + before_each(clear) it("toggles 'paste'", function() command('set pastetoggle=a') eq(0, eval('&paste')) @@ -22,19 +20,71 @@ describe("'pastetoggle' option", function() feed('j') eq(1, eval('&paste')) end) + describe("multiple key 'pastetoggle'", function() + before_each(function() + eq(0, eval('&paste')) + command('set timeoutlen=1 ttimeoutlen=10000') + end) + it('is waited for when chars are typed', function() + local pastetoggle = 'lllll' + command('set pastetoggle=' .. pastetoggle) + feed(pastetoggle:sub(0, 2)) + -- sleep() for long enough that vgetorpeek() is gotten into, but short + -- enough that ttimeoutlen is not reached. + sleep(200) + feed(pastetoggle:sub(3, -1)) + -- Need another key so that the vgetorpeek() function returns. + feed('j') + eq(1, eval('&paste')) + end) + it('is not waited for when there are no typed chars after mapped chars', function() + command('set pastetoggle=abc') + command('imap d a') + meths.feedkeys('id', 't', true) + -- sleep() for long enough that vgetorpeek() is gotten into, but short + -- enough that ttimeoutlen is not reached. + sleep(200) + feed('bc') + -- Need another key so that the vgetorpeek() function returns. + feed('j') + -- 'ttimeoutlen' should NOT apply + eq(0, eval('&paste')) + end) - it('does not wait for timeout', function() - command('set pastetoggle=abc') - command('set ttimeoutlen=9999999') - eq(0, eval('&paste')) - -- n.b. need <esc> to return from vgetorpeek() - feed('abc<esc>') - eq(1, eval('&paste')) - feed('ab') - sleep(10) - feed('c<esc>') - expect('bc') - eq(1, eval('&paste')) + it('is waited for when there are typed chars after mapped chars', function() + command('set pastetoggle=abc') + command('imap d a') + meths.feedkeys('idb', 't', true) + -- sleep() for long enough that vgetorpeek() is gotten into, but short + -- enough that ttimeoutlen is not reached. + sleep(200) + feed('c') + -- Need another key so that the vgetorpeek() function returns. + feed('j') + -- 'ttimeoutlen' should apply + eq(1, eval('&paste')) + end) + + it('is waited for when there are typed chars after noremapped chars', function() + command('set pastetoggle=abc') + command('inoremap d a') + meths.feedkeys('idb', 't', true) + -- sleep() for long enough that vgetorpeek() is gotten into, but short + -- enough that ttimeoutlen is not reached. + sleep(200) + feed('c') + -- Need another key so that the vgetorpeek() function returns. + feed('j') + -- 'ttimeoutlen' should apply + eq(1, eval('&paste')) + end) + end) + it('does not interfere with character-find', function() + insert('foo,bar') + feed('0') + command('set pastetoggle=,sp') + feed('dt,') + expect(',bar') end) end) |