aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua/snippet_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/lua/snippet_spec.lua')
-rw-r--r--test/functional/lua/snippet_spec.lua63
1 files changed, 52 insertions, 11 deletions
diff --git a/test/functional/lua/snippet_spec.lua b/test/functional/lua/snippet_spec.lua
index f0b3b44139..e981bc6261 100644
--- a/test/functional/lua/snippet_spec.lua
+++ b/test/functional/lua/snippet_spec.lua
@@ -5,9 +5,11 @@ local clear = helpers.clear
local eq = helpers.eq
local exec_lua = helpers.exec_lua
local feed = helpers.feed
+local fn = helpers.fn
local matches = helpers.matches
local pcall_err = helpers.pcall_err
-local sleep = helpers.sleep
+local poke_eventloop = helpers.poke_eventloop
+local retry = helpers.retry
describe('vim.snippet', function()
before_each(function()
@@ -35,6 +37,12 @@ describe('vim.snippet', function()
eq(expected, buf_lines(0))
end
+ local function wait_for_pum()
+ retry(nil, nil, function()
+ eq(1, fn.pumvisible())
+ end)
+ end
+
--- @param snippet string
--- @param err string
local function test_expand_fail(snippet, err)
@@ -154,7 +162,10 @@ describe('vim.snippet', function()
end)
it('errors with multiple placeholders for the same index', function()
- test_expand_fail('class ${1:Foo} { void ${1:foo}() {} }', 'multiple placeholders for tabstop $1')
+ test_expand_fail(
+ 'class ${1:Foo} { void ${1:foo}() {} }',
+ 'multiple placeholders for tabstop $1'
+ )
end)
it('errors with multiple $0 tabstops', function()
@@ -162,30 +173,36 @@ describe('vim.snippet', function()
end)
it('cancels session when deleting the snippet', function()
- test_expand_success({ 'local function $1()', ' $0', 'end' }, { 'local function ()', ' ', 'end' })
+ test_expand_success(
+ { 'local function $1()', ' $0', 'end' },
+ { 'local function ()', ' ', 'end' }
+ )
feed('<esc>Vjjd')
eq(false, exec_lua('return vim.snippet.active()'))
end)
it('cancels session when inserting outside snippet region', function()
feed('i<cr>')
- test_expand_success({ 'local function $1()', ' $0', 'end' }, { '', 'local function ()', ' ', 'end' })
+ test_expand_success(
+ { 'local function $1()', ' $0', 'end' },
+ { '', 'local function ()', ' ', 'end' }
+ )
feed('<esc>O-- A comment')
eq(false, exec_lua('return vim.snippet.active()'))
end)
- it('inserts choice', function ()
+ it('inserts choice', function()
test_expand_success({ 'console.${1|assert,log,error|}()' }, { 'console.()' })
- sleep(100)
+ wait_for_pum()
feed('<Down><C-y>')
eq({ 'console.log()' }, buf_lines(0))
end)
- it('closes the choice completion menu when jumping', function ()
+ it('closes the choice completion menu when jumping', function()
test_expand_success({ 'console.${1|assert,log,error|}($2)' }, { 'console.()' })
- sleep(100)
+ wait_for_pum()
exec_lua('vim.snippet.jump(1)')
- eq(0, exec_lua('return vim.fn.pumvisible()'))
+ eq(0, fn.pumvisible())
end)
it('jumps to next tabstop after inserting choice', function()
@@ -193,10 +210,34 @@ describe('vim.snippet', function()
{ '${1|public,protected,private|} function ${2:name}() {', '\t$0', '}' },
{ ' function name() {', '\t', '}' }
)
- sleep(100)
+ wait_for_pum()
feed('<C-y><Tab>')
- sleep(10)
+ poke_eventloop()
feed('foo')
eq({ 'public function foo() {', '\t', '}' }, buf_lines(0))
end)
+
+ it('jumps through adjacent tabstops', function()
+ test_expand_success(
+ { 'for i=1,${1:to}${2:,step} do\n\t$3\nend' },
+ { 'for i=1,to,step do', '\t', 'end' }
+ )
+ feed('10')
+ feed('<Tab>')
+ poke_eventloop()
+ feed(',2')
+ eq({ 'for i=1,10,2 do', '\t', 'end' }, buf_lines(0))
+ end)
+
+ it('updates snippet state when built-in completion menu is visible', function()
+ test_expand_success({ '$1 = function($2)\n$3\nend' }, { ' = function()', '', 'end' })
+ -- Show the completion menu.
+ feed('<C-n>')
+ -- Make sure no item is selected.
+ feed('<C-p>')
+ -- Jump forward (the 2nd tabstop).
+ exec_lua('vim.snippet.jump(1)')
+ feed('foo')
+ eq({ ' = function(foo)', '', 'end' }, buf_lines(0))
+ end)
end)