neovim/test/functional/options/pastetoggle_spec.lua
zeertzjq 4adf2123dd vim-patch:8.2.4837: modifiers not simplified when timed out
Problem:    Modifiers not simplified when timed out or using feedkeys() with
            'n" flag.
Solution:   Adjust how mapped flag and timeout are used. (closes vim/vim#10305)
68a573ce2b
2022-04-29 15:51:04 +08:00

91 lines
2.9 KiB
Lua

local helpers = require('test.functional.helpers')(after_each)
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
describe("'pastetoggle' option", function()
before_each(clear)
it("toggles 'paste'", function()
command('set pastetoggle=a')
eq(0, eval('&paste'))
feed('a')
-- Need another key so that the vgetorpeek() function returns.
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('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)