aboutsummaryrefslogtreecommitdiff
path: root/test/functional/api/vim_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/api/vim_spec.lua')
-rw-r--r--test/functional/api/vim_spec.lua69
1 files changed, 66 insertions, 3 deletions
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index b35ccb0c40..1b34945f13 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -1358,9 +1358,72 @@ describe('API', function()
test_paste_repeat_visual_select(true)
end)
end)
- it('vim.paste() failure', function()
- api.nvim_exec_lua('vim.paste = (function(lines, phase) error("fake fail") end)', {})
- eq('fake fail', pcall_err(request, 'nvim_paste', 'line 1\nline 2\nline 3', false, 1))
+ local function test_paste_cancel_error(is_error)
+ before_each(function()
+ exec_lua(([[
+ vim.paste = (function(overridden)
+ return function(lines, phase)
+ for i, line in ipairs(lines) do
+ if line == 'CANCEL' then
+ %s
+ end
+ end
+ return overridden(lines, phase)
+ end
+ end)(vim.paste)
+ ]]):format(is_error and 'error("fake fail")' or 'return false'))
+ end)
+ local function check_paste_cancel_error(data, crlf, phase)
+ if is_error then
+ eq('fake fail', pcall_err(api.nvim_paste, data, crlf, phase))
+ else
+ eq(false, api.nvim_paste(data, crlf, phase))
+ end
+ end
+ it('in phase -1', function()
+ feed('A')
+ check_paste_cancel_error('CANCEL', true, -1)
+ feed('<Esc>')
+ expect('')
+ feed('.')
+ expect('')
+ end)
+ it('in phase 1', function()
+ feed('A')
+ check_paste_cancel_error('CANCEL', true, 1)
+ feed('<Esc>')
+ expect('')
+ feed('.')
+ expect('')
+ end)
+ it('in phase 2', function()
+ feed('A')
+ eq(true, api.nvim_paste('aaa', true, 1))
+ expect('aaa')
+ check_paste_cancel_error('CANCEL', true, 2)
+ feed('<Esc>')
+ expect('aaa')
+ feed('.')
+ expect('aaaaaa')
+ end)
+ it('in phase 3', function()
+ feed('A')
+ eq(true, api.nvim_paste('aaa', true, 1))
+ expect('aaa')
+ eq(true, api.nvim_paste('bbb', true, 2))
+ expect('aaabbb')
+ check_paste_cancel_error('CANCEL', true, 3)
+ feed('<Esc>')
+ expect('aaabbb')
+ feed('.')
+ expect('aaabbbaaabbb')
+ end)
+ end
+ describe('vim.paste() cancel', function()
+ test_paste_cancel_error(false)
+ end)
+ describe('vim.paste() error', function()
+ test_paste_cancel_error(true)
end)
end)