aboutsummaryrefslogtreecommitdiff
path: root/test/functional/viml/completion_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/viml/completion_spec.lua')
-rw-r--r--test/functional/viml/completion_spec.lua56
1 files changed, 56 insertions, 0 deletions
diff --git a/test/functional/viml/completion_spec.lua b/test/functional/viml/completion_spec.lua
new file mode 100644
index 0000000000..df4018e707
--- /dev/null
+++ b/test/functional/viml/completion_spec.lua
@@ -0,0 +1,56 @@
+local helpers = require('test.functional.helpers')
+local clear, feed, execute = helpers.clear, helpers.feed, helpers.execute
+local eval, eq, neq = helpers.eval, helpers.eq, helpers.neq
+local execute, source = helpers.execute, helpers.source
+
+describe("completion", function()
+ before_each(function()
+ clear()
+ end)
+
+ describe("v:completed_item", function()
+ it('returns expected dict in normal completion', function()
+ feed('ifoo<ESC>o<C-x><C-n><ESC>')
+ eq('foo', eval('getline(2)'))
+ eq({word = 'foo', abbr = '', menu = '', info = '', kind = ''},
+ eval('v:completed_item'))
+ end)
+ it('is readonly', function()
+ feed('ifoo<ESC>o<C-x><C-n><ESC>')
+
+ execute('let v:completed_item.word = "bar"')
+ neq(nil, string.find(eval('v:errmsg'), '^E46: '))
+ execute('let v:errmsg = ""')
+
+ execute('let v:completed_item.abbr = "bar"')
+ neq(nil, string.find(eval('v:errmsg'), '^E46: '))
+ execute('let v:errmsg = ""')
+
+ execute('let v:completed_item.menu = "bar"')
+ neq(nil, string.find(eval('v:errmsg'), '^E46: '))
+ execute('let v:errmsg = ""')
+
+ execute('let v:completed_item.info = "bar"')
+ neq(nil, string.find(eval('v:errmsg'), '^E46: '))
+ execute('let v:errmsg = ""')
+
+ execute('let v:completed_item.kind = "bar"')
+ neq(nil, string.find(eval('v:errmsg'), '^E46: '))
+ execute('let v:errmsg = ""')
+ end)
+ it('returns expected dict in omni completion', function()
+ source([[
+ function! TestOmni(findstart, base) abort
+ return a:findstart ? 0 : [{'word': 'foo', 'abbr': 'bar',
+ \ 'menu': 'baz', 'info': 'foobar', 'kind': 'foobaz'}]
+ endfunction
+ setlocal omnifunc=TestOmni
+ ]])
+ feed('i<C-x><C-o><ESC>')
+ eq('foo', eval('getline(1)'))
+ eq({word = 'foo', abbr = 'bar', menu = 'baz',
+ info = 'foobar', kind = 'foobaz'},
+ eval('v:completed_item'))
+ end)
+ end)
+end)