local feedkeys = require('cmp.utils.feedkeys') local spec = require('cmp.utils.spec') local keymap = require('cmp.utils.keymap') describe('keymap', function() before_each(spec.before) it('t', function() assert.are.equal(keymap.t(''), vim.api.nvim_replace_termcodes('', true, true, true)) assert.are.equal(keymap.t('u'), vim.api.nvim_replace_termcodes('u', true, true, true)) assert.are.equal(keymap.t('aiueo'), vim.api.nvim_replace_termcodes('aiueo', true, true, true)) end) it('to_keymap', function() assert.are.equal(keymap.to_keymap('\n'), '') assert.are.equal(keymap.to_keymap(''), '') assert.are.equal(keymap.to_keymap('|'), '') end) describe('feedmap', function() before_each(spec.before) it('expr & register', function() vim.api.nvim_buf_set_keymap(0, 'i', '(', [['="("']], { expr = true, noremap = false, }) feedkeys.call('i', 'nx', function() keymap.feed_map(keymap.get_map('i', '(')) end) assert.are.same({ '(' }, vim.api.nvim_buf_get_lines(0, 0, -1, true)) end) it('recursive & (tpope/vim-endwise)', function() vim.api.nvim_buf_set_keymap(0, 'i', '(paren-close)', [[)]], { expr = false, noremap = true, }) vim.api.nvim_buf_set_keymap(0, 'i', '(', [[((paren-close)]], { expr = false, noremap = false, }) feedkeys.call('i', 'nx', function() keymap.feed_map(keymap.get_map('i', '(')) end) assert.are.same({ '()' }, vim.api.nvim_buf_get_lines(0, 0, -1, true)) end) describe('expr & recursive', function() before_each(spec.before) it('true', function() vim.api.nvim_buf_set_keymap(0, 'i', '', [[v:true ? '="foobar"' : 'aiueo']], { expr = true, noremap = false, }) feedkeys.call('i', 'n', function() keymap.feed_map(keymap.get_map('i', '')) end) feedkeys.call('', 'x') assert.are.same({ 'foobar' }, vim.api.nvim_buf_get_lines(0, 0, -1, true)) end) it('false', function() vim.api.nvim_buf_set_keymap(0, 'i', '', [[v:false ? '="foobar"' : 'aiueo']], { expr = true, noremap = false, }) feedkeys.call('i', 'nx', function() keymap.feed_map(keymap.get_map('i', '')) end) assert.are.same({ '\taiueo' }, vim.api.nvim_buf_get_lines(0, 0, -1, true)) end) end) end) describe('realworld', function() before_each(spec.before) it('#226', function() keymap.listen('i', '', function(_, fallback) fallback() end) vim.api.nvim_feedkeys(keymap.t('iaiueoa'), 'tx', true) assert.are.same({ 'aiueo', 'aiueo' }, vim.api.nvim_buf_get_lines(0, 0, -1, true)) end) it('#414', function() keymap.listen('i', '', function() vim.api.nvim_feedkeys(keymap.t(''), 'int', true) end) vim.api.nvim_feedkeys(keymap.t('iaiueoa'), 'tx', true) assert.are.same({ 'aiueo', 'aiueo' }, vim.api.nvim_buf_get_lines(0, 0, -1, true)) end) end) end)