aboutsummaryrefslogtreecommitdiff
path: root/test/functional/vimscript
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/vimscript')
-rw-r--r--test/functional/vimscript/api_functions_spec.lua182
-rw-r--r--test/functional/vimscript/buf_functions_spec.lua361
-rw-r--r--test/functional/vimscript/changedtick_spec.lua163
-rw-r--r--test/functional/vimscript/container_functions_spec.lua20
-rw-r--r--test/functional/vimscript/ctx_functions_spec.lua246
-rw-r--r--test/functional/vimscript/environ_spec.lua33
-rw-r--r--test/functional/vimscript/errorlist_spec.lua33
-rw-r--r--test/functional/vimscript/eval_spec.lua134
-rw-r--r--test/functional/vimscript/executable_spec.lua134
-rw-r--r--test/functional/vimscript/execute_spec.lua95
-rw-r--r--test/functional/vimscript/exepath_spec.lua47
-rw-r--r--test/functional/vimscript/fnamemodify_spec.lua10
-rw-r--r--test/functional/vimscript/getline_spec.lua6
-rw-r--r--test/functional/vimscript/glob_spec.lua7
-rw-r--r--test/functional/vimscript/has_spec.lua120
-rw-r--r--test/functional/vimscript/hostname_spec.lua6
-rw-r--r--test/functional/vimscript/input_spec.lua336
-rw-r--r--test/functional/vimscript/json_functions_spec.lua948
-rw-r--r--test/functional/vimscript/lang_spec.lua6
-rw-r--r--test/functional/vimscript/let_spec.lua42
-rw-r--r--test/functional/vimscript/map_functions_spec.lua160
-rw-r--r--test/functional/vimscript/match_functions_spec.lua275
-rw-r--r--test/functional/vimscript/minmax_functions_spec.lua41
-rw-r--r--test/functional/vimscript/modeline_spec.lua2
-rw-r--r--test/functional/vimscript/msgpack_functions_spec.lua295
-rw-r--r--test/functional/vimscript/null_spec.lua167
-rw-r--r--test/functional/vimscript/operators_spec.lua22
-rw-r--r--test/functional/vimscript/printf_spec.lua48
-rw-r--r--test/functional/vimscript/reltime_spec.lua10
-rw-r--r--test/functional/vimscript/screenchar_spec.lua50
-rw-r--r--test/functional/vimscript/screenpos_spec.lua84
-rw-r--r--test/functional/vimscript/server_spec.lua120
-rw-r--r--test/functional/vimscript/setpos_spec.lua43
-rw-r--r--test/functional/vimscript/sort_spec.lua54
-rw-r--r--test/functional/vimscript/special_vars_spec.lua64
-rw-r--r--test/functional/vimscript/state_spec.lua24
-rw-r--r--test/functional/vimscript/string_spec.lua231
-rw-r--r--test/functional/vimscript/system_spec.lua312
-rw-r--r--test/functional/vimscript/timer_spec.lua110
-rw-r--r--test/functional/vimscript/uniq_spec.lua12
-rw-r--r--test/functional/vimscript/vvar_event_spec.lua1
-rw-r--r--test/functional/vimscript/wait_spec.lua21
-rw-r--r--test/functional/vimscript/writefile_spec.lua157
43 files changed, 2855 insertions, 2377 deletions
diff --git a/test/functional/vimscript/api_functions_spec.lua b/test/functional/vimscript/api_functions_spec.lua
index 0a7e7c1137..4985768bb0 100644
--- a/test/functional/vimscript/api_functions_spec.lua
+++ b/test/functional/vimscript/api_functions_spec.lua
@@ -1,35 +1,35 @@
local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
-local luv = require('luv')
local neq, eq, command = helpers.neq, helpers.eq, helpers.command
-local clear, curbufmeths = helpers.clear, helpers.curbufmeths
+local clear = helpers.clear
local exc_exec, expect, eval = helpers.exc_exec, helpers.expect, helpers.eval
+local exec_lua = helpers.exec_lua
local insert, pcall_err = helpers.insert, helpers.pcall_err
local matches = helpers.matches
-local meths = helpers.meths
+local api = helpers.api
local feed = helpers.feed
describe('eval-API', function()
before_each(clear)
- it("work", function()
+ it('work', function()
command("call nvim_command('let g:test = 1')")
eq(1, eval("nvim_get_var('test')"))
- local buf = eval("nvim_get_current_buf()")
- command("call nvim_buf_set_lines("..buf..", 0, -1, v:true, ['aa', 'bb'])")
+ local buf = eval('nvim_get_current_buf()')
+ command('call nvim_buf_set_lines(' .. buf .. ", 0, -1, v:true, ['aa', 'bb'])")
expect([[
aa
bb]])
- command("call nvim_win_set_cursor(0, [1, 1])")
+ command('call nvim_win_set_cursor(0, [1, 1])')
command("call nvim_input('ax<esc>')")
expect([[
aax
bb]])
end)
- it("throw errors for invalid arguments", function()
+ it('throw errors for invalid arguments', function()
local err = exc_exec('call nvim_get_current_buf("foo")')
eq('Vim(call):E118: Too many arguments for function: nvim_get_current_buf', err)
@@ -37,100 +37,134 @@ describe('eval-API', function()
eq('Vim(call):E119: Not enough arguments for function: nvim_set_option_value', err)
err = exc_exec('call nvim_buf_set_lines(1, 0, -1, [], ["list"])')
- eq('Vim(call):E5555: API call: Wrong type for argument 4 when calling nvim_buf_set_lines, expecting Boolean', err)
+ eq(
+ 'Vim(call):E5555: API call: Wrong type for argument 4 when calling nvim_buf_set_lines, expecting Boolean',
+ err
+ )
err = exc_exec('call nvim_buf_set_lines(0, 0, -1, v:true, "string")')
- eq('Vim(call):E5555: API call: Wrong type for argument 5 when calling nvim_buf_set_lines, expecting ArrayOf(String)', err)
+ eq(
+ 'Vim(call):E5555: API call: Wrong type for argument 5 when calling nvim_buf_set_lines, expecting ArrayOf(String)',
+ err
+ )
err = exc_exec('call nvim_buf_get_number("0")')
- eq('Vim(call):E5555: API call: Wrong type for argument 1 when calling nvim_buf_get_number, expecting Buffer', err)
+ eq(
+ 'Vim(call):E5555: API call: Wrong type for argument 1 when calling nvim_buf_get_number, expecting Buffer',
+ err
+ )
err = exc_exec('call nvim_buf_line_count(17)')
eq('Vim(call):E5555: API call: Invalid buffer id: 17', err)
end)
it('cannot change text or window if textlocked', function()
- command("autocmd TextYankPost <buffer> ++once call nvim_buf_set_lines(0, 0, -1, v:false, [])")
- matches('Vim%(call%):E5555: API call: E565: Not allowed to change text or change window$',
- pcall_err(command, "normal! yy"))
-
- command("autocmd TextYankPost <buffer> ++once call nvim_open_term(0, {})")
- matches('Vim%(call%):E5555: API call: E565: Not allowed to change text or change window$',
- pcall_err(command, "normal! yy"))
+ command('autocmd TextYankPost <buffer> ++once call nvim_buf_set_lines(0, 0, -1, v:false, [])')
+ matches(
+ 'Vim%(call%):E5555: API call: E565: Not allowed to change text or change window$',
+ pcall_err(command, 'normal! yy')
+ )
+
+ command('autocmd TextYankPost <buffer> ++once call nvim_open_term(0, {})')
+ matches(
+ 'Vim%(call%):E5555: API call: E565: Not allowed to change text or change window$',
+ pcall_err(command, 'normal! yy')
+ )
-- Functions checking textlock should also not be usable from <expr> mappings.
- command("inoremap <expr> <f2> nvim_win_close(0, 1)")
- eq('Vim(normal):E5555: API call: E565: Not allowed to change text or change window',
- pcall_err(command, [[execute "normal i\<f2>"]]))
+ command('inoremap <expr> <f2> nvim_win_close(0, 1)')
+ eq(
+ 'Vim(normal):E5555: API call: E565: Not allowed to change text or change window',
+ pcall_err(command, [[execute "normal i\<f2>"]])
+ )
-- Text-changing functions gave a "Failed to save undo information" error when called from an
-- <expr> mapping outside do_cmdline() (msg_list == NULL), so use feed() to test this.
command("inoremap <expr> <f2> nvim_buf_set_text(0, 0, 0, 0, 0, ['hi'])")
- meths.set_vvar('errmsg', '')
- feed("i<f2><esc>")
- eq('E5555: API call: E565: Not allowed to change text or change window',
- meths.get_vvar('errmsg'))
+ api.nvim_set_vvar('errmsg', '')
+ feed('i<f2><esc>')
+ eq(
+ 'E5555: API call: E565: Not allowed to change text or change window',
+ api.nvim_get_vvar('errmsg')
+ )
-- Some functions checking textlock (usually those that may change the current window or buffer)
-- also ought to not be usable in the cmdwin.
- local old_win = meths.get_current_win()
- feed("q:")
- eq('E11: Invalid in command-line window; <CR> executes, CTRL-C quits',
- pcall_err(meths.set_current_win, old_win))
+ local old_win = api.nvim_get_current_win()
+ feed('q:')
+ eq(
+ 'E11: Invalid in command-line window; <CR> executes, CTRL-C quits',
+ pcall_err(api.nvim_set_current_win, old_win)
+ )
-- But others, like nvim_buf_set_lines(), which just changes text, is OK.
- curbufmeths.set_lines(0, -1, 1, {"wow!"})
- eq({'wow!'}, curbufmeths.get_lines(0, -1, 1))
+ api.nvim_buf_set_lines(0, 0, -1, 1, { 'wow!' })
+ eq({ 'wow!' }, api.nvim_buf_get_lines(0, 0, -1, 1))
-- Turning the cmdwin buffer into a terminal buffer would be pretty weird.
- eq('E11: Invalid in command-line window; <CR> executes, CTRL-C quits',
- pcall_err(meths.open_term, 0, {}))
+ eq(
+ 'E11: Invalid in command-line window; <CR> executes, CTRL-C quits',
+ pcall_err(api.nvim_open_term, 0, {})
+ )
+
+ matches(
+ 'E11: Invalid in command%-line window; <CR> executes, CTRL%-C quits$',
+ pcall_err(
+ exec_lua,
+ [[
+ local cmdwin_buf = vim.api.nvim_get_current_buf()
+ vim.api.nvim_buf_call(vim.api.nvim_create_buf(false, true), function()
+ vim.api.nvim_open_term(cmdwin_buf, {})
+ end)
+ ]]
+ )
+ )
-- But turning a different buffer into a terminal from the cmdwin is OK.
- local term_buf = meths.create_buf(false, true)
- meths.open_term(term_buf, {})
- eq('terminal', meths.get_option_value("buftype", {buf = term_buf}))
+ local term_buf = api.nvim_create_buf(false, true)
+ api.nvim_open_term(term_buf, {})
+ eq('terminal', api.nvim_get_option_value('buftype', { buf = term_buf }))
end)
- it("use buffer numbers and windows ids as handles", function()
+ it('use buffer numbers and windows ids as handles', function()
local screen = Screen.new(40, 8)
screen:attach()
local bnr = eval("bufnr('')")
- local bhnd = eval("nvim_get_current_buf()")
- local wid = eval("win_getid()")
- local whnd = eval("nvim_get_current_win()")
+ local bhnd = eval('nvim_get_current_buf()')
+ local wid = eval('win_getid()')
+ local whnd = eval('nvim_get_current_win()')
eq(bnr, bhnd)
eq(wid, whnd)
- command("new") -- creates new buffer and new window
+ command('new') -- creates new buffer and new window
local bnr2 = eval("bufnr('')")
- local bhnd2 = eval("nvim_get_current_buf()")
- local wid2 = eval("win_getid()")
- local whnd2 = eval("nvim_get_current_win()")
+ local bhnd2 = eval('nvim_get_current_buf()')
+ local wid2 = eval('win_getid()')
+ local whnd2 = eval('nvim_get_current_win()')
eq(bnr2, bhnd2)
eq(wid2, whnd2)
neq(bnr, bnr2)
neq(wid, wid2)
-- 0 is synonymous to the current buffer
- eq(bnr2, eval("nvim_buf_get_number(0)"))
+ eq(bnr2, eval('nvim_buf_get_number(0)'))
- command("bn") -- show old buffer in new window
- eq(bnr, eval("nvim_get_current_buf()"))
+ command('bn') -- show old buffer in new window
+ eq(bnr, eval('nvim_get_current_buf()'))
eq(bnr, eval("bufnr('')"))
- eq(bnr, eval("nvim_buf_get_number(0)"))
- eq(wid2, eval("win_getid()"))
- eq(whnd2, eval("nvim_get_current_win()"))
+ eq(bnr, eval('nvim_buf_get_number(0)'))
+ eq(wid2, eval('win_getid()'))
+ eq(whnd2, eval('nvim_get_current_win()'))
end)
- it("get_lines and set_lines use NL to represent NUL", function()
- curbufmeths.set_lines(0, -1, true, {"aa\0", "b\0b"})
- eq({'aa\n', 'b\nb'}, eval("nvim_buf_get_lines(0, 0, -1, 1)"))
+ it('get_lines and set_lines use NL to represent NUL', function()
+ api.nvim_buf_set_lines(0, 0, -1, true, { 'aa\0', 'b\0b' })
+ eq({ 'aa\n', 'b\nb' }, eval('nvim_buf_get_lines(0, 0, -1, 1)'))
command('call nvim_buf_set_lines(0, 1, 2, v:true, ["xx", "\\nyy"])')
- eq({'aa\0', 'xx', '\0yy'}, curbufmeths.get_lines(0, -1, 1))
+ eq({ 'aa\0', 'xx', '\0yy' }, api.nvim_buf_get_lines(0, 0, -1, 1))
end)
- it("that are FUNC_ATTR_NOEVAL cannot be called", function()
+ it('that are FUNC_ATTR_NOEVAL cannot be called', function()
-- Deprecated vim_ prefix is not exported.
local err = exc_exec('call vim_get_current_buffer("foo")')
eq('Vim(call):E117: Unknown function: vim_get_current_buffer', err)
@@ -150,29 +184,24 @@ describe('eval-API', function()
end)
it('have metadata accessible with api_info()', function()
- local api_keys = eval("sort(keys(api_info()))")
- eq({'error_types', 'functions', 'types',
- 'ui_events', 'ui_options', 'version'}, api_keys)
+ local api_keys = eval('sort(keys(api_info()))')
+ eq({ 'error_types', 'functions', 'types', 'ui_events', 'ui_options', 'version' }, api_keys)
end)
it('are highlighted by vim.vim syntax file', function()
- if luv.fs_stat("build/runtime/syntax/vim/generated.vim").uid == nil then
- pending("runtime was not built, skipping test")
- return
- end
local screen = Screen.new(40, 8)
screen:attach()
screen:set_default_attr_ids({
- [1] = {bold = true, foreground = Screen.colors.Brown},
- [2] = {foreground = Screen.colors.DarkCyan},
- [3] = {foreground = Screen.colors.SlateBlue},
- [4] = {foreground = Screen.colors.Fuchsia},
- [5] = {bold = true, foreground = Screen.colors.Blue},
+ [1] = { bold = true, foreground = Screen.colors.Brown },
+ [2] = { foreground = Screen.colors.DarkCyan },
+ [3] = { foreground = Screen.colors.SlateBlue },
+ [4] = { foreground = Screen.colors.Fuchsia },
+ [5] = { bold = true, foreground = Screen.colors.Blue },
})
- command("set ft=vim")
- command("set rtp^=build/runtime/")
- command("syntax on")
+ command('set ft=vim')
+ command('set rtp^=build/runtime/')
+ command('syntax on')
insert([[
call bufnr('%')
call nvim_input('typing...')
@@ -182,18 +211,17 @@ describe('eval-API', function()
{1:call} {2:bufnr}{3:(}{4:'%'}{3:)} |
{1:call} {2:nvim_input}{3:(}{4:'typing...'}{3:)} |
{1:call} not_a_function{3:(}{4:42}{3:^)} |
- {5:~ }|
- {5:~ }|
- {5:~ }|
- {5:~ }|
+ {5:~ }|*4
|
]])
end)
it('cannot be called from sandbox', function()
- eq('Vim(call):E48: Not allowed in sandbox',
- pcall_err(command, "sandbox call nvim_input('ievil')"))
- eq({''}, meths.buf_get_lines(0, 0, -1, true))
+ eq(
+ 'Vim(call):E48: Not allowed in sandbox',
+ pcall_err(command, "sandbox call nvim_input('ievil')")
+ )
+ eq({ '' }, api.nvim_buf_get_lines(0, 0, -1, true))
end)
it('converts blobs to API strings', function()
diff --git a/test/functional/vimscript/buf_functions_spec.lua b/test/functional/vimscript/buf_functions_spec.lua
index 2a5720fbd7..931fe640a9 100644
--- a/test/functional/vimscript/buf_functions_spec.lua
+++ b/test/functional/vimscript/buf_functions_spec.lua
@@ -1,17 +1,11 @@
local helpers = require('test.functional.helpers')(after_each)
-local luv = require('luv')
-
local eq = helpers.eq
local clear = helpers.clear
-local funcs = helpers.funcs
-local meths = helpers.meths
+local fn = helpers.fn
+local api = helpers.api
local command = helpers.command
local exc_exec = helpers.exc_exec
-local bufmeths = helpers.bufmeths
-local curbufmeths = helpers.curbufmeths
-local curwinmeths = helpers.curwinmeths
-local curtabmeths = helpers.curtabmeths
local get_pathsep = helpers.get_pathsep
local rmdir = helpers.rmdir
local pcall_err = helpers.pcall_err
@@ -23,30 +17,47 @@ local dirname = fname .. '.d'
before_each(clear)
-for _, func in ipairs({'bufname(%s)', 'bufnr(%s)', 'bufwinnr(%s)',
- 'getbufline(%s, 1)', 'getbufvar(%s, "changedtick")',
- 'setbufvar(%s, "f", 0)'}) do
+for _, func in ipairs({
+ 'bufname(%s)',
+ 'bufnr(%s)',
+ 'bufwinnr(%s)',
+ 'getbufline(%s, 1)',
+ 'getbufvar(%s, "changedtick")',
+ 'setbufvar(%s, "f", 0)',
+}) do
local funcname = func:match('%w+')
describe(funcname .. '() function', function()
it('errors out when receives v:true/v:false/v:null', function()
-- Not compatible with Vim: in Vim it always results in buffer not found
-- without any error messages.
- for _, var in ipairs({'v:true', 'v:false'}) do
- eq('Vim(call):E5299: Expected a Number or a String, Boolean found',
- exc_exec('call ' .. func:format(var)))
+ for _, var in ipairs({ 'v:true', 'v:false' }) do
+ eq(
+ 'Vim(call):E5299: Expected a Number or a String, Boolean found',
+ exc_exec('call ' .. func:format(var))
+ )
end
- eq('Vim(call):E5300: Expected a Number or a String',
- exc_exec('call ' .. func:format('v:null')))
+ eq(
+ 'Vim(call):E5300: Expected a Number or a String',
+ exc_exec('call ' .. func:format('v:null'))
+ )
end)
it('errors out when receives invalid argument', function()
- eq('Vim(call):E745: Expected a Number or a String, List found',
- exc_exec('call ' .. func:format('[]')))
- eq('Vim(call):E728: Expected a Number or a String, Dictionary found',
- exc_exec('call ' .. func:format('{}')))
- eq('Vim(call):E805: Expected a Number or a String, Float found',
- exc_exec('call ' .. func:format('0.0')))
- eq('Vim(call):E703: Expected a Number or a String, Funcref found',
- exc_exec('call ' .. func:format('function("tr")')))
+ eq(
+ 'Vim(call):E745: Expected a Number or a String, List found',
+ exc_exec('call ' .. func:format('[]'))
+ )
+ eq(
+ 'Vim(call):E728: Expected a Number or a String, Dictionary found',
+ exc_exec('call ' .. func:format('{}'))
+ )
+ eq(
+ 'Vim(call):E805: Expected a Number or a String, Float found',
+ exc_exec('call ' .. func:format('0.0'))
+ )
+ eq(
+ 'Vim(call):E703: Expected a Number or a String, Funcref found',
+ exc_exec('call ' .. func:format('function("tr")'))
+ )
end)
end)
end
@@ -54,12 +65,12 @@ end
describe('bufname() function', function()
it('returns empty string when buffer was not found', function()
command('file ' .. fname)
- eq('', funcs.bufname(2))
- eq('', funcs.bufname('non-existent-buffer'))
- eq('', funcs.bufname('#'))
+ eq('', fn.bufname(2))
+ eq('', fn.bufname('non-existent-buffer'))
+ eq('', fn.bufname('#'))
command('edit ' .. fname2)
- eq(2, funcs.bufnr('%'))
- eq('', funcs.bufname('X'))
+ eq(2, fn.bufnr('%'))
+ eq('', fn.bufname('X'))
end)
before_each(function()
mkdir(dirname)
@@ -68,80 +79,80 @@ describe('bufname() function', function()
rmdir(dirname)
end)
it('returns expected buffer name', function()
- eq('', funcs.bufname('%')) -- Buffer has no name yet
+ eq('', fn.bufname('%')) -- Buffer has no name yet
command('file ' .. fname)
- local wd = luv.cwd()
+ local wd = vim.uv.cwd()
local sep = get_pathsep()
- local curdirname = funcs.fnamemodify(wd, ':t')
- for _, arg in ipairs({'%', 1, 'X', wd}) do
- eq(fname, funcs.bufname(arg))
- meths.set_current_dir('..')
- eq(curdirname .. sep .. fname, funcs.bufname(arg))
- meths.set_current_dir(curdirname)
- meths.set_current_dir(dirname)
- eq(wd .. sep .. fname, funcs.bufname(arg))
- meths.set_current_dir('..')
- eq(fname, funcs.bufname(arg))
+ local curdirname = fn.fnamemodify(wd, ':t')
+ for _, arg in ipairs({ '%', 1, 'X', wd }) do
+ eq(fname, fn.bufname(arg))
+ api.nvim_set_current_dir('..')
+ eq(curdirname .. sep .. fname, fn.bufname(arg))
+ api.nvim_set_current_dir(curdirname)
+ api.nvim_set_current_dir(dirname)
+ eq(wd .. sep .. fname, fn.bufname(arg))
+ api.nvim_set_current_dir('..')
+ eq(fname, fn.bufname(arg))
command('enew')
end
- eq('', funcs.bufname('%'))
- eq('', funcs.bufname('$'))
- eq(2, funcs.bufnr('%'))
+ eq('', fn.bufname('%'))
+ eq('', fn.bufname('$'))
+ eq(2, fn.bufnr('%'))
end)
end)
describe('bufnr() function', function()
it('returns -1 when buffer was not found', function()
command('file ' .. fname)
- eq(-1, funcs.bufnr(2))
- eq(-1, funcs.bufnr('non-existent-buffer'))
- eq(-1, funcs.bufnr('#'))
+ eq(-1, fn.bufnr(2))
+ eq(-1, fn.bufnr('non-existent-buffer'))
+ eq(-1, fn.bufnr('#'))
command('edit ' .. fname2)
- eq(2, funcs.bufnr('%'))
- eq(-1, funcs.bufnr('X'))
+ eq(2, fn.bufnr('%'))
+ eq(-1, fn.bufnr('X'))
end)
it('returns expected buffer number', function()
- eq(1, funcs.bufnr('%'))
+ eq(1, fn.bufnr('%'))
command('file ' .. fname)
- local wd = luv.cwd()
- local curdirname = funcs.fnamemodify(wd, ':t')
- eq(1, funcs.bufnr(fname))
- eq(1, funcs.bufnr(wd))
- eq(1, funcs.bufnr(curdirname))
- eq(1, funcs.bufnr('X'))
+ local wd = vim.uv.cwd()
+ local curdirname = fn.fnamemodify(wd, ':t')
+ eq(1, fn.bufnr(fname))
+ eq(1, fn.bufnr(wd))
+ eq(1, fn.bufnr(curdirname))
+ eq(1, fn.bufnr('X'))
end)
it('returns number of last buffer with "$"', function()
- eq(1, funcs.bufnr('$'))
+ eq(1, fn.bufnr('$'))
command('new')
- eq(2, funcs.bufnr('$'))
+ eq(2, fn.bufnr('$'))
command('new')
- eq(3, funcs.bufnr('$'))
+ eq(3, fn.bufnr('$'))
command('only')
- eq(3, funcs.bufnr('$'))
- eq(3, funcs.bufnr('%'))
+ eq(3, fn.bufnr('$'))
+ eq(3, fn.bufnr('%'))
command('buffer 1')
- eq(3, funcs.bufnr('$'))
- eq(1, funcs.bufnr('%'))
+ eq(3, fn.bufnr('$'))
+ eq(1, fn.bufnr('%'))
command('bwipeout 2')
- eq(3, funcs.bufnr('$'))
- eq(1, funcs.bufnr('%'))
+ eq(3, fn.bufnr('$'))
+ eq(1, fn.bufnr('%'))
command('bwipeout 3')
- eq(1, funcs.bufnr('$'))
- eq(1, funcs.bufnr('%'))
+ eq(1, fn.bufnr('$'))
+ eq(1, fn.bufnr('%'))
command('new')
- eq(4, funcs.bufnr('$'))
+ eq(4, fn.bufnr('$'))
end)
end)
describe('bufwinnr() function', function()
it('returns -1 when buffer was not found', function()
command('file ' .. fname)
- eq(-1, funcs.bufwinnr(2))
- eq(-1, funcs.bufwinnr('non-existent-buffer'))
- eq(-1, funcs.bufwinnr('#'))
- command('split ' .. fname2) -- It would be OK if there was one window
- eq(2, funcs.bufnr('%'))
- eq(-1, funcs.bufwinnr('X'))
+ eq(-1, fn.bufwinnr(2))
+ eq(-1, fn.bufwinnr('non-existent-buffer'))
+ eq(-1, fn.bufwinnr('#'))
+ command('split ' .. fname2) -- It would be OK if there was one window
+ eq(2, fn.bufnr('%'))
+ eq(-1, fn.bufwinnr('X'))
end)
before_each(function()
mkdir(dirname)
@@ -150,162 +161,162 @@ describe('bufwinnr() function', function()
rmdir(dirname)
end)
it('returns expected window number', function()
- eq(1, funcs.bufwinnr('%'))
+ eq(1, fn.bufwinnr('%'))
command('file ' .. fname)
command('vsplit')
command('split ' .. fname2)
- eq(2, funcs.bufwinnr(fname))
- eq(1, funcs.bufwinnr(fname2))
- eq(-1, funcs.bufwinnr(fname:sub(1, #fname - 1)))
- meths.set_current_dir(dirname)
- eq(2, funcs.bufwinnr(fname))
- eq(1, funcs.bufwinnr(fname2))
- eq(-1, funcs.bufwinnr(fname:sub(1, #fname - 1)))
- eq(1, funcs.bufwinnr('%'))
- eq(2, funcs.bufwinnr(1))
- eq(1, funcs.bufwinnr(2))
- eq(-1, funcs.bufwinnr(3))
- eq(1, funcs.bufwinnr('$'))
+ eq(2, fn.bufwinnr(fname))
+ eq(1, fn.bufwinnr(fname2))
+ eq(-1, fn.bufwinnr(fname:sub(1, #fname - 1)))
+ api.nvim_set_current_dir(dirname)
+ eq(2, fn.bufwinnr(fname))
+ eq(1, fn.bufwinnr(fname2))
+ eq(-1, fn.bufwinnr(fname:sub(1, #fname - 1)))
+ eq(1, fn.bufwinnr('%'))
+ eq(2, fn.bufwinnr(1))
+ eq(1, fn.bufwinnr(2))
+ eq(-1, fn.bufwinnr(3))
+ eq(1, fn.bufwinnr('$'))
end)
end)
describe('getbufline() function', function()
it('returns empty list when buffer was not found', function()
command('file ' .. fname)
- eq({}, funcs.getbufline(2, 1))
- eq({}, funcs.getbufline('non-existent-buffer', 1))
- eq({}, funcs.getbufline('#', 1))
+ eq({}, fn.getbufline(2, 1))
+ eq({}, fn.getbufline('non-existent-buffer', 1))
+ eq({}, fn.getbufline('#', 1))
command('edit ' .. fname2)
- eq(2, funcs.bufnr('%'))
- eq({}, funcs.getbufline('X', 1))
+ eq(2, fn.bufnr('%'))
+ eq({}, fn.getbufline('X', 1))
end)
it('returns empty list when range is invalid', function()
- eq({}, funcs.getbufline(1, 0))
- curbufmeths.set_lines(0, 1, false, {'foo', 'bar', 'baz'})
- eq({}, funcs.getbufline(1, 2, 1))
- eq({}, funcs.getbufline(1, -10, -20))
- eq({}, funcs.getbufline(1, -2, -1))
- eq({}, funcs.getbufline(1, -1, 9999))
+ eq({}, fn.getbufline(1, 0))
+ api.nvim_buf_set_lines(0, 0, 1, false, { 'foo', 'bar', 'baz' })
+ eq({}, fn.getbufline(1, 2, 1))
+ eq({}, fn.getbufline(1, -10, -20))
+ eq({}, fn.getbufline(1, -2, -1))
+ eq({}, fn.getbufline(1, -1, 9999))
end)
it('returns expected lines', function()
- meths.set_option_value('hidden', true, {})
+ api.nvim_set_option_value('hidden', true, {})
command('file ' .. fname)
- curbufmeths.set_lines(0, 1, false, {'foo\0', '\0bar', 'baz'})
+ api.nvim_buf_set_lines(0, 0, 1, false, { 'foo\0', '\0bar', 'baz' })
command('edit ' .. fname2)
- curbufmeths.set_lines(0, 1, false, {'abc\0', '\0def', 'ghi'})
- eq({'foo\n', '\nbar', 'baz'}, funcs.getbufline(1, 1, 9999))
- eq({'abc\n', '\ndef', 'ghi'}, funcs.getbufline(2, 1, 9999))
- eq({'foo\n', '\nbar', 'baz'}, funcs.getbufline(1, 1, '$'))
- eq({'baz'}, funcs.getbufline(1, '$', '$'))
- eq({'baz'}, funcs.getbufline(1, '$', 9999))
+ api.nvim_buf_set_lines(0, 0, 1, false, { 'abc\0', '\0def', 'ghi' })
+ eq({ 'foo\n', '\nbar', 'baz' }, fn.getbufline(1, 1, 9999))
+ eq({ 'abc\n', '\ndef', 'ghi' }, fn.getbufline(2, 1, 9999))
+ eq({ 'foo\n', '\nbar', 'baz' }, fn.getbufline(1, 1, '$'))
+ eq({ 'baz' }, fn.getbufline(1, '$', '$'))
+ eq({ 'baz' }, fn.getbufline(1, '$', 9999))
end)
end)
describe('getbufvar() function', function()
it('returns empty list when buffer was not found', function()
command('file ' .. fname)
- eq('', funcs.getbufvar(2, '&autoindent'))
- eq('', funcs.getbufvar('non-existent-buffer', '&autoindent'))
- eq('', funcs.getbufvar('#', '&autoindent'))
+ eq('', fn.getbufvar(2, '&autoindent'))
+ eq('', fn.getbufvar('non-existent-buffer', '&autoindent'))
+ eq('', fn.getbufvar('#', '&autoindent'))
command('edit ' .. fname2)
- eq(2, funcs.bufnr('%'))
- eq('', funcs.getbufvar('X', '&autoindent'))
+ eq(2, fn.bufnr('%'))
+ eq('', fn.getbufvar('X', '&autoindent'))
end)
it('returns empty list when variable/option/etc was not found', function()
command('file ' .. fname)
- eq('', funcs.getbufvar(1, '&autondent'))
- eq('', funcs.getbufvar(1, 'changedtic'))
+ eq('', fn.getbufvar(1, '&autondent'))
+ eq('', fn.getbufvar(1, 'changedtic'))
end)
it('returns expected option value', function()
- eq(0, funcs.getbufvar(1, '&autoindent'))
- eq(0, funcs.getbufvar(1, '&l:autoindent'))
- eq(0, funcs.getbufvar(1, '&g:autoindent'))
+ eq(0, fn.getbufvar(1, '&autoindent'))
+ eq(0, fn.getbufvar(1, '&l:autoindent'))
+ eq(0, fn.getbufvar(1, '&g:autoindent'))
-- Also works with global-only options
- eq(1, funcs.getbufvar(1, '&hidden'))
- eq(1, funcs.getbufvar(1, '&l:hidden'))
- eq(1, funcs.getbufvar(1, '&g:hidden'))
+ eq(1, fn.getbufvar(1, '&hidden'))
+ eq(1, fn.getbufvar(1, '&l:hidden'))
+ eq(1, fn.getbufvar(1, '&g:hidden'))
-- Also works with window-local options
- eq(0, funcs.getbufvar(1, '&number'))
- eq(0, funcs.getbufvar(1, '&l:number'))
- eq(0, funcs.getbufvar(1, '&g:number'))
+ eq(0, fn.getbufvar(1, '&number'))
+ eq(0, fn.getbufvar(1, '&l:number'))
+ eq(0, fn.getbufvar(1, '&g:number'))
command('new')
-- But with window-local options it probably does not what you expect
- command("setl number")
+ command('setl number')
-- (note that current window’s buffer is 2, but getbufvar() receives 1)
- eq({id=2}, curwinmeths.get_buf())
- eq(1, funcs.getbufvar(1, '&number'))
- eq(1, funcs.getbufvar(1, '&l:number'))
+ eq(2, api.nvim_win_get_buf(0))
+ eq(1, fn.getbufvar(1, '&number'))
+ eq(1, fn.getbufvar(1, '&l:number'))
-- You can get global value though, if you find this useful.
- eq(0, funcs.getbufvar(1, '&g:number'))
+ eq(0, fn.getbufvar(1, '&g:number'))
end)
it('returns expected variable value', function()
- eq(2, funcs.getbufvar(1, 'changedtick'))
- curbufmeths.set_lines(0, 1, false, {'abc\0', '\0def', 'ghi'})
- eq(3, funcs.getbufvar(1, 'changedtick'))
- curbufmeths.set_var('test', true)
- eq(true, funcs.getbufvar(1, 'test'))
- eq({test=true, changedtick=3}, funcs.getbufvar(1, ''))
+ eq(2, fn.getbufvar(1, 'changedtick'))
+ api.nvim_buf_set_lines(0, 0, 1, false, { 'abc\0', '\0def', 'ghi' })
+ eq(3, fn.getbufvar(1, 'changedtick'))
+ api.nvim_buf_set_var(0, 'test', true)
+ eq(true, fn.getbufvar(1, 'test'))
+ eq({ test = true, changedtick = 3 }, fn.getbufvar(1, ''))
command('new')
- eq(3, funcs.getbufvar(1, 'changedtick'))
- eq(true, funcs.getbufvar(1, 'test'))
- eq({test=true, changedtick=3}, funcs.getbufvar(1, ''))
+ eq(3, fn.getbufvar(1, 'changedtick'))
+ eq(true, fn.getbufvar(1, 'test'))
+ eq({ test = true, changedtick = 3 }, fn.getbufvar(1, ''))
end)
end)
describe('setbufvar() function', function()
it('throws the error or ignores the input when buffer was not found', function()
command('file ' .. fname)
- eq(0,
- exc_exec('call setbufvar(2, "&autoindent", 0)'))
- eq('Vim(call):E94: No matching buffer for non-existent-buffer',
- exc_exec('call setbufvar("non-existent-buffer", "&autoindent", 0)'))
- eq(0,
- exc_exec('call setbufvar("#", "&autoindent", 0)'))
+ eq(0, exc_exec('call setbufvar(2, "&autoindent", 0)'))
+ eq(
+ 'Vim(call):E94: No matching buffer for non-existent-buffer',
+ exc_exec('call setbufvar("non-existent-buffer", "&autoindent", 0)')
+ )
+ eq(0, exc_exec('call setbufvar("#", "&autoindent", 0)'))
command('edit ' .. fname2)
- eq(2, funcs.bufnr('%'))
- eq('Vim(call):E93: More than one match for X',
- exc_exec('call setbufvar("X", "&autoindent", 0)'))
+ eq(2, fn.bufnr('%'))
+ eq(
+ 'Vim(call):E93: More than one match for X',
+ exc_exec('call setbufvar("X", "&autoindent", 0)')
+ )
end)
it('may set options, including window-local and global values', function()
- local buf1 = meths.get_current_buf()
- eq(false, meths.get_option_value('number', {}))
+ local buf1 = api.nvim_get_current_buf()
+ eq(false, api.nvim_get_option_value('number', {}))
command('split')
command('new')
- eq(2, bufmeths.get_number(curwinmeths.get_buf()))
- funcs.setbufvar(1, '&number', true)
- local windows = curtabmeths.list_wins()
- eq(false, meths.get_option_value('number', {win=windows[1].id}))
- eq(true, meths.get_option_value('number', {win=windows[2].id}))
- eq(false, meths.get_option_value('number', {win=windows[3].id}))
- eq(false, meths.get_option_value('number', {win=meths.get_current_win().id}))
-
+ eq(2, api.nvim_buf_get_number(api.nvim_win_get_buf(0)))
+ fn.setbufvar(1, '&number', true)
+ local windows = api.nvim_tabpage_list_wins(0)
+ eq(false, api.nvim_get_option_value('number', { win = windows[1] }))
+ eq(true, api.nvim_get_option_value('number', { win = windows[2] }))
+ eq(false, api.nvim_get_option_value('number', { win = windows[3] }))
+ eq(false, api.nvim_get_option_value('number', { win = api.nvim_get_current_win() }))
- eq(true, meths.get_option_value('hidden', {}))
- funcs.setbufvar(1, '&hidden', 0)
- eq(false, meths.get_option_value('hidden', {}))
+ eq(true, api.nvim_get_option_value('hidden', {}))
+ fn.setbufvar(1, '&hidden', 0)
+ eq(false, api.nvim_get_option_value('hidden', {}))
- eq(false, meths.get_option_value('autoindent', {buf=buf1.id}))
- funcs.setbufvar(1, '&autoindent', true)
- eq(true, meths.get_option_value('autoindent', {buf=buf1.id}))
- eq('Vim(call):E355: Unknown option: xxx',
- exc_exec('call setbufvar(1, "&xxx", 0)'))
+ eq(false, api.nvim_get_option_value('autoindent', { buf = buf1 }))
+ fn.setbufvar(1, '&autoindent', true)
+ eq(true, api.nvim_get_option_value('autoindent', { buf = buf1 }))
+ eq('Vim(call):E355: Unknown option: xxx', exc_exec('call setbufvar(1, "&xxx", 0)'))
end)
it('may set variables', function()
- local buf1 = meths.get_current_buf()
+ local buf1 = api.nvim_get_current_buf()
command('split')
command('new')
- eq(2, curbufmeths.get_number())
- funcs.setbufvar(1, 'number', true)
- eq(true, bufmeths.get_var(buf1, 'number'))
- eq('Vim(call):E461: Illegal variable name: b:',
- exc_exec('call setbufvar(1, "", 0)'))
- eq(true, bufmeths.get_var(buf1, 'number'))
- eq('Vim:E46: Cannot change read-only variable "b:changedtick"',
- pcall_err(funcs.setbufvar, 1, 'changedtick', true))
- eq(2, funcs.getbufvar(1, 'changedtick'))
+ eq(2, api.nvim_buf_get_number(0))
+ fn.setbufvar(1, 'number', true)
+ eq(true, api.nvim_buf_get_var(buf1, 'number'))
+ eq('Vim(call):E461: Illegal variable name: b:', exc_exec('call setbufvar(1, "", 0)'))
+ eq(true, api.nvim_buf_get_var(buf1, 'number'))
+ eq(
+ 'Vim:E46: Cannot change read-only variable "b:changedtick"',
+ pcall_err(fn.setbufvar, 1, 'changedtick', true)
+ )
+ eq(2, fn.getbufvar(1, 'changedtick'))
end)
it('throws error when setting a string option to a boolean value vim-patch:9.0.0090', function()
- eq('Vim:E928: String required',
- pcall_err(funcs.setbufvar, '', '&errorformat', true))
+ eq('Vim:E928: String required', pcall_err(fn.setbufvar, '', '&errorformat', true))
end)
end)
diff --git a/test/functional/vimscript/changedtick_spec.lua b/test/functional/vimscript/changedtick_spec.lua
index 8533fac9ec..85928921c5 100644
--- a/test/functional/vimscript/changedtick_spec.lua
+++ b/test/functional/vimscript/changedtick_spec.lua
@@ -4,35 +4,34 @@ local eq = helpers.eq
local eval = helpers.eval
local feed = helpers.feed
local clear = helpers.clear
-local funcs = helpers.funcs
-local meths = helpers.meths
+local fn = helpers.fn
+local api = helpers.api
local command = helpers.command
local exc_exec = helpers.exc_exec
local pcall_err = helpers.pcall_err
local exec_capture = helpers.exec_capture
-local curbufmeths = helpers.curbufmeths
before_each(clear)
local function changedtick()
- local ct = curbufmeths.get_changedtick()
- eq(ct, curbufmeths.get_var('changedtick'))
- eq(ct, curbufmeths.get_var('changedtick'))
+ local ct = api.nvim_buf_get_changedtick(0)
+ eq(ct, api.nvim_buf_get_var(0, 'changedtick'))
+ eq(ct, api.nvim_buf_get_var(0, 'changedtick'))
eq(ct, eval('b:changedtick'))
eq(ct, eval('b:["changedtick"]'))
eq(ct, eval('b:.changedtick'))
- eq(ct, funcs.getbufvar('%', 'changedtick'))
- eq(ct, funcs.getbufvar('%', '').changedtick)
+ eq(ct, fn.getbufvar('%', 'changedtick'))
+ eq(ct, fn.getbufvar('%', '').changedtick)
eq(ct, eval('b:').changedtick)
return ct
end
describe('b:changedtick', function()
-- Ported tests from Vim-8.0.333
- it('increments', function() -- Test_changedtick_increments
+ it('increments', function() -- Test_changedtick_increments
-- New buffer has an empty line, tick starts at 2
eq(2, changedtick())
- funcs.setline(1, 'hello')
+ fn.setline(1, 'hello')
eq(3, changedtick())
eq(0, exc_exec('undo'))
-- Somehow undo counts as two changes
@@ -41,54 +40,74 @@ describe('b:changedtick', function()
it('is present in b: dictionary', function()
eq(2, changedtick())
command('let d = b:')
- eq(2, meths.get_var('d').changedtick)
+ eq(2, api.nvim_get_var('d').changedtick)
end)
it('increments at bdel', function()
command('new')
eq(2, changedtick())
- local bnr = curbufmeths.get_number()
+ local bnr = api.nvim_buf_get_number(0)
eq(2, bnr)
command('bdel')
- eq(3, funcs.getbufvar(bnr, 'changedtick'))
- eq(1, curbufmeths.get_number())
+ eq(3, fn.getbufvar(bnr, 'changedtick'))
+ eq(1, api.nvim_buf_get_number(0))
end)
it('fails to be changed by user', function()
local ct = changedtick()
local ctn = ct + 100500
eq(0, exc_exec('let d = b:'))
- eq('Vim(let):E46: Cannot change read-only variable "b:changedtick"',
- pcall_err(command, 'let b:changedtick = ' .. ctn))
- eq('Vim(let):E46: Cannot change read-only variable "b:["changedtick"]"',
- pcall_err(command, 'let b:["changedtick"] = ' .. ctn))
- eq('Vim(let):E46: Cannot change read-only variable "b:.changedtick"',
- pcall_err(command, 'let b:.changedtick = ' .. ctn))
- eq('Vim(let):E46: Cannot change read-only variable "d.changedtick"',
- pcall_err(command, 'let d.changedtick = ' .. ctn))
- eq('Key is read-only: changedtick',
- pcall_err(curbufmeths.set_var, 'changedtick', ctn))
+ eq(
+ 'Vim(let):E46: Cannot change read-only variable "b:changedtick"',
+ pcall_err(command, 'let b:changedtick = ' .. ctn)
+ )
+ eq(
+ 'Vim(let):E46: Cannot change read-only variable "b:["changedtick"]"',
+ pcall_err(command, 'let b:["changedtick"] = ' .. ctn)
+ )
+ eq(
+ 'Vim(let):E46: Cannot change read-only variable "b:.changedtick"',
+ pcall_err(command, 'let b:.changedtick = ' .. ctn)
+ )
+ eq(
+ 'Vim(let):E46: Cannot change read-only variable "d.changedtick"',
+ pcall_err(command, 'let d.changedtick = ' .. ctn)
+ )
+ eq('Key is read-only: changedtick', pcall_err(api.nvim_buf_set_var, 0, 'changedtick', ctn))
- eq('Vim(unlet):E795: Cannot delete variable b:changedtick',
- pcall_err(command, 'unlet b:changedtick'))
- eq('Vim(unlet):E46: Cannot change read-only variable "b:.changedtick"',
- pcall_err(command, 'unlet b:.changedtick'))
- eq('Vim(unlet):E46: Cannot change read-only variable "b:["changedtick"]"',
- pcall_err(command, 'unlet b:["changedtick"]'))
- eq('Vim(unlet):E46: Cannot change read-only variable "d.changedtick"',
- pcall_err(command, 'unlet d.changedtick'))
- eq('Key is read-only: changedtick',
- pcall_err(curbufmeths.del_var, 'changedtick'))
+ eq(
+ 'Vim(unlet):E795: Cannot delete variable b:changedtick',
+ pcall_err(command, 'unlet b:changedtick')
+ )
+ eq(
+ 'Vim(unlet):E46: Cannot change read-only variable "b:.changedtick"',
+ pcall_err(command, 'unlet b:.changedtick')
+ )
+ eq(
+ 'Vim(unlet):E46: Cannot change read-only variable "b:["changedtick"]"',
+ pcall_err(command, 'unlet b:["changedtick"]')
+ )
+ eq(
+ 'Vim(unlet):E46: Cannot change read-only variable "d.changedtick"',
+ pcall_err(command, 'unlet d.changedtick')
+ )
+ eq('Key is read-only: changedtick', pcall_err(api.nvim_buf_del_var, 0, 'changedtick'))
eq(ct, changedtick())
- eq('Vim(let):E46: Cannot change read-only variable "b:["changedtick"]"',
- pcall_err(command, 'let b:["changedtick"] += ' .. ctn))
- eq('Vim(let):E46: Cannot change read-only variable "b:["changedtick"]"',
- pcall_err(command, 'let b:["changedtick"] -= ' .. ctn))
- eq('Vim(let):E46: Cannot change read-only variable "b:["changedtick"]"',
- pcall_err(command, 'let b:["changedtick"] .= ' .. ctn))
+ eq(
+ 'Vim(let):E46: Cannot change read-only variable "b:["changedtick"]"',
+ pcall_err(command, 'let b:["changedtick"] += ' .. ctn)
+ )
+ eq(
+ 'Vim(let):E46: Cannot change read-only variable "b:["changedtick"]"',
+ pcall_err(command, 'let b:["changedtick"] -= ' .. ctn)
+ )
+ eq(
+ 'Vim(let):E46: Cannot change read-only variable "b:["changedtick"]"',
+ pcall_err(command, 'let b:["changedtick"] .= ' .. ctn)
+ )
eq(ct, changedtick())
- funcs.setline(1, 'hello')
+ fn.setline(1, 'hello')
eq(ct + 1, changedtick())
end)
@@ -97,39 +116,55 @@ describe('b:changedtick', function()
end)
it('fails to unlock b:changedtick', function()
eq(0, exc_exec('let d = b:'))
- eq(0, funcs.islocked('b:changedtick'))
- eq(0, funcs.islocked('d.changedtick'))
- eq('Vim(unlockvar):E940: Cannot lock or unlock variable b:changedtick',
- pcall_err(command, 'unlockvar b:changedtick'))
- eq('Vim(unlockvar):E46: Cannot change read-only variable "d.changedtick"',
- pcall_err(command, 'unlockvar d.changedtick'))
- eq(0, funcs.islocked('b:changedtick'))
- eq(0, funcs.islocked('d.changedtick'))
- eq('Vim(lockvar):E940: Cannot lock or unlock variable b:changedtick',
- pcall_err(command, 'lockvar b:changedtick'))
- eq('Vim(lockvar):E46: Cannot change read-only variable "d.changedtick"',
- pcall_err(command, 'lockvar d.changedtick'))
- eq(0, funcs.islocked('b:changedtick'))
- eq(0, funcs.islocked('d.changedtick'))
+ eq(0, fn.islocked('b:changedtick'))
+ eq(0, fn.islocked('d.changedtick'))
+ eq(
+ 'Vim(unlockvar):E940: Cannot lock or unlock variable b:changedtick',
+ pcall_err(command, 'unlockvar b:changedtick')
+ )
+ eq(
+ 'Vim(unlockvar):E46: Cannot change read-only variable "d.changedtick"',
+ pcall_err(command, 'unlockvar d.changedtick')
+ )
+ eq(0, fn.islocked('b:changedtick'))
+ eq(0, fn.islocked('d.changedtick'))
+ eq(
+ 'Vim(lockvar):E940: Cannot lock or unlock variable b:changedtick',
+ pcall_err(command, 'lockvar b:changedtick')
+ )
+ eq(
+ 'Vim(lockvar):E46: Cannot change read-only variable "d.changedtick"',
+ pcall_err(command, 'lockvar d.changedtick')
+ )
+ eq(0, fn.islocked('b:changedtick'))
+ eq(0, fn.islocked('d.changedtick'))
end)
it('is being completed', function()
feed(':echo b:<Tab><Home>let cmdline="<End>"<CR>')
- eq('echo b:changedtick', meths.get_var('cmdline'))
+ eq('echo b:changedtick', api.nvim_get_var('cmdline'))
end)
it('cannot be changed by filter() or map()', function()
eq(2, changedtick())
- eq('Vim(call):E795: Cannot delete variable filter() argument',
- pcall_err(command, 'call filter(b:, 0)'))
- eq('Vim(call):E742: Cannot change value of map() argument',
- pcall_err(command, 'call map(b:, 0)'))
- eq('Vim(call):E742: Cannot change value of map() argument',
- pcall_err(command, 'call map(b:, "v:val")'))
+ eq(
+ 'Vim(call):E795: Cannot delete variable filter() argument',
+ pcall_err(command, 'call filter(b:, 0)')
+ )
+ eq(
+ 'Vim(call):E742: Cannot change value of map() argument',
+ pcall_err(command, 'call map(b:, 0)')
+ )
+ eq(
+ 'Vim(call):E742: Cannot change value of map() argument',
+ pcall_err(command, 'call map(b:, "v:val")')
+ )
eq(2, changedtick())
end)
it('cannot be remove()d', function()
eq(2, changedtick())
- eq('Vim(call):E795: Cannot delete variable remove() argument',
- pcall_err(command, 'call remove(b:, "changedtick")'))
+ eq(
+ 'Vim(call):E795: Cannot delete variable remove() argument',
+ pcall_err(command, 'call remove(b:, "changedtick")')
+ )
eq(2, changedtick())
end)
it('does not inherit VAR_FIXED when copying dictionary over', function()
diff --git a/test/functional/vimscript/container_functions_spec.lua b/test/functional/vimscript/container_functions_spec.lua
index 5bef3fce05..1b34ea0165 100644
--- a/test/functional/vimscript/container_functions_spec.lua
+++ b/test/functional/vimscript/container_functions_spec.lua
@@ -2,23 +2,23 @@ local helpers = require('test.functional.helpers')(after_each)
local eq = helpers.eq
local eval = helpers.eval
-local meths = helpers.meths
+local api = helpers.api
local clear = helpers.clear
before_each(clear)
describe('extend()', function()
it('succeeds to extend list with itself', function()
- meths.set_var('l', {1, {}})
- eq({1, {}, 1, {}}, eval('extend(l, l)'))
- eq({1, {}, 1, {}}, meths.get_var('l'))
+ api.nvim_set_var('l', { 1, {} })
+ eq({ 1, {}, 1, {} }, eval('extend(l, l)'))
+ eq({ 1, {}, 1, {} }, api.nvim_get_var('l'))
- meths.set_var('l', {1, {}})
- eq({1, {}, 1, {}}, eval('extend(l, l, 0)'))
- eq({1, {}, 1, {}}, meths.get_var('l'))
+ api.nvim_set_var('l', { 1, {} })
+ eq({ 1, {}, 1, {} }, eval('extend(l, l, 0)'))
+ eq({ 1, {}, 1, {} }, api.nvim_get_var('l'))
- meths.set_var('l', {1, {}})
- eq({1, 1, {}, {}}, eval('extend(l, l, 1)'))
- eq({1, 1, {}, {}}, meths.get_var('l'))
+ api.nvim_set_var('l', { 1, {} })
+ eq({ 1, 1, {}, {} }, eval('extend(l, l, 1)'))
+ eq({ 1, 1, {}, {} }, api.nvim_get_var('l'))
end)
end)
diff --git a/test/functional/vimscript/ctx_functions_spec.lua b/test/functional/vimscript/ctx_functions_spec.lua
index 17607f0794..dc60a474f3 100644
--- a/test/functional/vimscript/ctx_functions_spec.lua
+++ b/test/functional/vimscript/ctx_functions_spec.lua
@@ -6,25 +6,24 @@ local command = helpers.command
local eq = helpers.eq
local eval = helpers.eval
local feed = helpers.feed
-local map = helpers.tbl_map
-local nvim = helpers.nvim
+local map = vim.tbl_map
+local api = helpers.api
local parse_context = helpers.parse_context
local exec_capture = helpers.exec_capture
local source = helpers.source
-local trim = helpers.trim
+local trim = vim.trim
local write_file = helpers.write_file
local pcall_err = helpers.pcall_err
describe('context functions', function()
local fname1 = 'Xtest-functional-eval-ctx1'
local fname2 = 'Xtest-functional-eval-ctx2'
- local outofbounds =
- 'Vim:E475: Invalid value for argument index: out of bounds'
+ local outofbounds = 'Vim:E475: Invalid value for argument index: out of bounds'
before_each(function()
clear()
- write_file(fname1, "1\n2\n3")
- write_file(fname2, "a\nb\nc")
+ write_file(fname1, '1\n2\n3')
+ write_file(fname2, 'a\nb\nc')
end)
after_each(function()
@@ -34,98 +33,125 @@ describe('context functions', function()
describe('ctxpush/ctxpop', function()
it('saves and restores registers properly', function()
- local regs = {'1', '2', '3', 'a'}
- local vals = {'1', '2', '3', 'hjkl'}
+ local regs = { '1', '2', '3', 'a' }
+ local vals = { '1', '2', '3', 'hjkl' }
feed('i1<cr>2<cr>3<c-[>ddddddqahjklq')
- eq(vals, map(function(r) return trim(call('getreg', r)) end, regs))
+ eq(
+ vals,
+ map(function(r)
+ return trim(call('getreg', r))
+ end, regs)
+ )
call('ctxpush')
- call('ctxpush', {'regs'})
-
- map(function(r) call('setreg', r, {}) end, regs)
- eq({'', '', '', ''},
- map(function(r) return trim(call('getreg', r)) end, regs))
+ call('ctxpush', { 'regs' })
+
+ map(function(r)
+ call('setreg', r, {})
+ end, regs)
+ eq(
+ { '', '', '', '' },
+ map(function(r)
+ return trim(call('getreg', r))
+ end, regs)
+ )
call('ctxpop')
- eq(vals, map(function(r) return trim(call('getreg', r)) end, regs))
-
- map(function(r) call('setreg', r, {}) end, regs)
- eq({'', '', '', ''},
- map(function(r) return trim(call('getreg', r)) end, regs))
+ eq(
+ vals,
+ map(function(r)
+ return trim(call('getreg', r))
+ end, regs)
+ )
+
+ map(function(r)
+ call('setreg', r, {})
+ end, regs)
+ eq(
+ { '', '', '', '' },
+ map(function(r)
+ return trim(call('getreg', r))
+ end, regs)
+ )
call('ctxpop')
- eq(vals, map(function(r) return trim(call('getreg', r)) end, regs))
+ eq(
+ vals,
+ map(function(r)
+ return trim(call('getreg', r))
+ end, regs)
+ )
end)
it('saves and restores jumplist properly', function()
- command('edit '..fname1)
+ command('edit ' .. fname1)
feed('G')
feed('gg')
- command('edit '..fname2)
+ command('edit ' .. fname2)
local jumplist = call('getjumplist')
call('ctxpush')
- call('ctxpush', {'jumps'})
+ call('ctxpush', { 'jumps' })
command('clearjumps')
- eq({{}, 0}, call('getjumplist'))
+ eq({ {}, 0 }, call('getjumplist'))
call('ctxpop')
eq(jumplist, call('getjumplist'))
command('clearjumps')
- eq({{}, 0}, call('getjumplist'))
+ eq({ {}, 0 }, call('getjumplist'))
call('ctxpop')
eq(jumplist, call('getjumplist'))
end)
it('saves and restores buffer list properly', function()
- command('edit '..fname1)
- command('edit '..fname2)
+ command('edit ' .. fname1)
+ command('edit ' .. fname2)
command('edit TEST')
local bufs = call('map', call('getbufinfo'), 'v:val.name')
call('ctxpush')
- call('ctxpush', {'bufs'})
+ call('ctxpush', { 'bufs' })
command('%bwipeout')
- eq({''}, call('map', call('getbufinfo'), 'v:val.name'))
+ eq({ '' }, call('map', call('getbufinfo'), 'v:val.name'))
call('ctxpop')
- eq({'', unpack(bufs)}, call('map', call('getbufinfo'), 'v:val.name'))
+ eq({ '', unpack(bufs) }, call('map', call('getbufinfo'), 'v:val.name'))
command('%bwipeout')
- eq({''}, call('map', call('getbufinfo'), 'v:val.name'))
+ eq({ '' }, call('map', call('getbufinfo'), 'v:val.name'))
call('ctxpop')
- eq({'', unpack(bufs)}, call('map', call('getbufinfo'), 'v:val.name'))
+ eq({ '', unpack(bufs) }, call('map', call('getbufinfo'), 'v:val.name'))
end)
it('saves and restores global variables properly', function()
- nvim('set_var', 'one', 1)
- nvim('set_var', 'Two', 2)
- nvim('set_var', 'THREE', 3)
- eq({1, 2 ,3}, eval('[g:one, g:Two, g:THREE]'))
+ api.nvim_set_var('one', 1)
+ api.nvim_set_var('Two', 2)
+ api.nvim_set_var('THREE', 3)
+ eq({ 1, 2, 3 }, eval('[g:one, g:Two, g:THREE]'))
call('ctxpush')
- call('ctxpush', {'gvars'})
+ call('ctxpush', { 'gvars' })
- nvim('del_var', 'one')
- nvim('del_var', 'Two')
- nvim('del_var', 'THREE')
+ api.nvim_del_var('one')
+ api.nvim_del_var('Two')
+ api.nvim_del_var('THREE')
eq('Vim:E121: Undefined variable: g:one', pcall_err(eval, 'g:one'))
eq('Vim:E121: Undefined variable: g:Two', pcall_err(eval, 'g:Two'))
eq('Vim:E121: Undefined variable: g:THREE', pcall_err(eval, 'g:THREE'))
call('ctxpop')
- eq({1, 2 ,3}, eval('[g:one, g:Two, g:THREE]'))
+ eq({ 1, 2, 3 }, eval('[g:one, g:Two, g:THREE]'))
- nvim('del_var', 'one')
- nvim('del_var', 'Two')
- nvim('del_var', 'THREE')
+ api.nvim_del_var('one')
+ api.nvim_del_var('Two')
+ api.nvim_del_var('THREE')
eq('Vim:E121: Undefined variable: g:one', pcall_err(eval, 'g:one'))
eq('Vim:E121: Undefined variable: g:Two', pcall_err(eval, 'g:Two'))
eq('Vim:E121: Undefined variable: g:THREE', pcall_err(eval, 'g:THREE'))
call('ctxpop')
- eq({1, 2 ,3}, eval('[g:one, g:Two, g:THREE]'))
+ eq({ 1, 2, 3 }, eval('[g:one, g:Two, g:THREE]'))
end)
it('saves and restores script functions properly', function()
@@ -164,28 +190,30 @@ describe('context functions', function()
]])
eq('Hello, World!', exec_capture([[call Greet('World')]]))
- eq('Hello, World!'..
- '\nHello, One!'..
- '\nHello, Two!'..
- '\nHello, Three!',
- exec_capture([[call GreetAll('World', 'One', 'Two', 'Three')]]))
+ eq(
+ 'Hello, World!' .. '\nHello, One!' .. '\nHello, Two!' .. '\nHello, Three!',
+ exec_capture([[call GreetAll('World', 'One', 'Two', 'Three')]])
+ )
call('SaveSFuncs')
call('DeleteSFuncs')
- eq('function Greet, line 1: Vim(call):E117: Unknown function: s:greet',
- pcall_err(command, [[call Greet('World')]]))
- eq('function GreetAll, line 1: Vim(call):E117: Unknown function: s:greet_all',
- pcall_err(command, [[call GreetAll('World', 'One', 'Two', 'Three')]]))
+ eq(
+ 'function Greet, line 1: Vim(call):E117: Unknown function: s:greet',
+ pcall_err(command, [[call Greet('World')]])
+ )
+ eq(
+ 'function GreetAll, line 1: Vim(call):E117: Unknown function: s:greet_all',
+ pcall_err(command, [[call GreetAll('World', 'One', 'Two', 'Three')]])
+ )
call('RestoreFuncs')
eq('Hello, World!', exec_capture([[call Greet('World')]]))
- eq('Hello, World!'..
- '\nHello, One!'..
- '\nHello, Two!'..
- '\nHello, Three!',
- exec_capture([[call GreetAll('World', 'One', 'Two', 'Three')]]))
+ eq(
+ 'Hello, World!' .. '\nHello, One!' .. '\nHello, Two!' .. '\nHello, Three!',
+ exec_capture([[call GreetAll('World', 'One', 'Two', 'Three')]])
+ )
end)
it('saves and restores functions properly', function()
@@ -203,28 +231,28 @@ describe('context functions', function()
]])
eq('Hello, World!', exec_capture([[call Greet('World')]]))
- eq('Hello, World!'..
- '\nHello, One!'..
- '\nHello, Two!'..
- '\nHello, Three!',
- exec_capture([[call GreetAll('World', 'One', 'Two', 'Three')]]))
+ eq(
+ 'Hello, World!' .. '\nHello, One!' .. '\nHello, Two!' .. '\nHello, Three!',
+ exec_capture([[call GreetAll('World', 'One', 'Two', 'Three')]])
+ )
- call('ctxpush', {'funcs'})
+ call('ctxpush', { 'funcs' })
command('delfunction Greet')
command('delfunction GreetAll')
eq('Vim:E117: Unknown function: Greet', pcall_err(call, 'Greet', 'World'))
- eq('Vim:E117: Unknown function: GreetAll',
- pcall_err(call, 'GreetAll', 'World', 'One', 'Two', 'Three'))
+ eq(
+ 'Vim:E117: Unknown function: GreetAll',
+ pcall_err(call, 'GreetAll', 'World', 'One', 'Two', 'Three')
+ )
call('ctxpop')
eq('Hello, World!', exec_capture([[call Greet('World')]]))
- eq('Hello, World!'..
- '\nHello, One!'..
- '\nHello, Two!'..
- '\nHello, Three!',
- exec_capture([[call GreetAll('World', 'One', 'Two', 'Three')]]))
+ eq(
+ 'Hello, World!' .. '\nHello, One!' .. '\nHello, Two!' .. '\nHello, Three!',
+ exec_capture([[call GreetAll('World', 'One', 'Two', 'Three')]])
+ )
end)
it('errors out when context stack is empty', function()
@@ -268,41 +296,41 @@ describe('context functions', function()
it('returns context dictionary at index in context stack', function()
feed('i1<cr>2<cr>3<c-[>ddddddqahjklq')
- command('edit! '..fname1)
+ command('edit! ' .. fname1)
feed('G')
feed('gg')
- command('edit '..fname2)
- nvim('set_var', 'one', 1)
- nvim('set_var', 'Two', 2)
- nvim('set_var', 'THREE', 3)
+ command('edit ' .. fname2)
+ api.nvim_set_var('one', 1)
+ api.nvim_set_var('Two', 2)
+ api.nvim_set_var('THREE', 3)
local with_regs = {
['regs'] = {
- {['rt'] = 1, ['rc'] = {'1'}, ['n'] = 49, ['ru'] = true},
- {['rt'] = 1, ['rc'] = {'2'}, ['n'] = 50},
- {['rt'] = 1, ['rc'] = {'3'}, ['n'] = 51},
- {['rc'] = {'hjkl'}, ['n'] = 97},
- }
+ { ['rt'] = 1, ['rc'] = { '1' }, ['n'] = 49, ['ru'] = true },
+ { ['rt'] = 1, ['rc'] = { '2' }, ['n'] = 50 },
+ { ['rt'] = 1, ['rc'] = { '3' }, ['n'] = 51 },
+ { ['rc'] = { 'hjkl' }, ['n'] = 97 },
+ },
}
local with_jumps = {
- ['jumps'] = eval(([[
+ ['jumps'] = eval((([[
filter(map(add(
getjumplist()[0], { 'bufnr': bufnr('%'), 'lnum': getcurpos()[1] }),
'filter(
{ "f": expand("#".v:val.bufnr.":p"), "l": v:val.lnum },
{ k, v -> k != "l" || v != 1 })'), '!empty(v:val.f)')
- ]]):gsub('\n', ''))
+ ]]):gsub('\n', ''))),
}
local with_bufs = {
['bufs'] = eval([[
filter(map(getbufinfo(), '{ "f": v:val.name }'), '!empty(v:val.f)')
- ]])
+ ]]),
}
local with_gvars = {
- ['gvars'] = {{'one', 1}, {'Two', 2}, {'THREE', 3}}
+ ['gvars'] = { { 'one', 1 }, { 'Two', 2 }, { 'THREE', 3 } },
}
local with_all = {
@@ -316,25 +344,25 @@ describe('context functions', function()
eq(with_all, parse_context(call('ctxget')))
eq(with_all, parse_context(call('ctxget', 0)))
- call('ctxpush', {'gvars'})
+ call('ctxpush', { 'gvars' })
eq(with_gvars, parse_context(call('ctxget')))
eq(with_gvars, parse_context(call('ctxget', 0)))
eq(with_all, parse_context(call('ctxget', 1)))
- call('ctxpush', {'bufs'})
+ call('ctxpush', { 'bufs' })
eq(with_bufs, parse_context(call('ctxget')))
eq(with_bufs, parse_context(call('ctxget', 0)))
eq(with_gvars, parse_context(call('ctxget', 1)))
eq(with_all, parse_context(call('ctxget', 2)))
- call('ctxpush', {'jumps'})
+ call('ctxpush', { 'jumps' })
eq(with_jumps, parse_context(call('ctxget')))
eq(with_jumps, parse_context(call('ctxget', 0)))
eq(with_bufs, parse_context(call('ctxget', 1)))
eq(with_gvars, parse_context(call('ctxget', 2)))
eq(with_all, parse_context(call('ctxget', 3)))
- call('ctxpush', {'regs'})
+ call('ctxpush', { 'regs' })
eq(with_regs, parse_context(call('ctxget')))
eq(with_regs, parse_context(call('ctxget', 0)))
eq(with_jumps, parse_context(call('ctxget', 1)))
@@ -368,43 +396,45 @@ describe('context functions', function()
describe('ctxset()', function()
it('errors out when index is out of bounds', function()
- eq(outofbounds, pcall_err(call, 'ctxset', {dummy = 1}))
+ eq(outofbounds, pcall_err(call, 'ctxset', { dummy = 1 }))
call('ctxpush')
- eq(outofbounds, pcall_err(call, 'ctxset', {dummy = 1}, 1))
+ eq(outofbounds, pcall_err(call, 'ctxset', { dummy = 1 }, 1))
call('ctxpop')
- eq(outofbounds, pcall_err(call, 'ctxset', {dummy = 1}, 0))
+ eq(outofbounds, pcall_err(call, 'ctxset', { dummy = 1 }, 0))
end)
it('errors when context dictionary is invalid', function()
call('ctxpush')
- eq('Vim:E474: Failed to convert list to msgpack string buffer',
- pcall_err(call, 'ctxset', { regs = { {} }, jumps = { {} } }))
+ eq(
+ 'Vim:E474: Failed to convert list to msgpack string buffer',
+ pcall_err(call, 'ctxset', { regs = { {} }, jumps = { {} } })
+ )
end)
it('sets context dictionary at index in context stack', function()
- nvim('set_var', 'one', 1)
- nvim('set_var', 'Two', 2)
- nvim('set_var', 'THREE', 3)
+ api.nvim_set_var('one', 1)
+ api.nvim_set_var('Two', 2)
+ api.nvim_set_var('THREE', 3)
call('ctxpush')
local ctx1 = call('ctxget')
- nvim('set_var', 'one', 'a')
- nvim('set_var', 'Two', 'b')
- nvim('set_var', 'THREE', 'c')
+ api.nvim_set_var('one', 'a')
+ api.nvim_set_var('Two', 'b')
+ api.nvim_set_var('THREE', 'c')
call('ctxpush')
call('ctxpush')
local ctx2 = call('ctxget')
- eq({'a', 'b' ,'c'}, eval('[g:one, g:Two, g:THREE]'))
+ eq({ 'a', 'b', 'c' }, eval('[g:one, g:Two, g:THREE]'))
call('ctxset', ctx1)
call('ctxset', ctx2, 2)
call('ctxpop')
- eq({1, 2 ,3}, eval('[g:one, g:Two, g:THREE]'))
+ eq({ 1, 2, 3 }, eval('[g:one, g:Two, g:THREE]'))
call('ctxpop')
- eq({'a', 'b' ,'c'}, eval('[g:one, g:Two, g:THREE]'))
- nvim('set_var', 'one', 1.5)
- eq({1.5, 'b' ,'c'}, eval('[g:one, g:Two, g:THREE]'))
+ eq({ 'a', 'b', 'c' }, eval('[g:one, g:Two, g:THREE]'))
+ api.nvim_set_var('one', 1.5)
+ eq({ 1.5, 'b', 'c' }, eval('[g:one, g:Two, g:THREE]'))
call('ctxpop')
- eq({'a', 'b' ,'c'}, eval('[g:one, g:Two, g:THREE]'))
+ eq({ 'a', 'b', 'c' }, eval('[g:one, g:Two, g:THREE]'))
end)
end)
end)
diff --git a/test/functional/vimscript/environ_spec.lua b/test/functional/vimscript/environ_spec.lua
index 52218d3cc9..0763def84e 100644
--- a/test/functional/vimscript/environ_spec.lua
+++ b/test/functional/vimscript/environ_spec.lua
@@ -1,23 +1,23 @@
local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
local eq = helpers.eq
-local environ = helpers.funcs.environ
-local exists = helpers.funcs.exists
-local system = helpers.funcs.system
+local environ = helpers.fn.environ
+local exists = helpers.fn.exists
+local system = helpers.fn.system
local nvim_prog = helpers.nvim_prog
local command = helpers.command
local eval = helpers.eval
-local setenv = helpers.funcs.setenv
+local setenv = helpers.fn.setenv
describe('environment variables', function()
it('environ() handles empty env variable', function()
- clear({env={EMPTY_VAR=""}})
- eq("", environ()['EMPTY_VAR'])
+ clear({ env = { EMPTY_VAR = '' } })
+ eq('', environ()['EMPTY_VAR'])
eq(nil, environ()['DOES_NOT_EXIST'])
end)
it('exists() handles empty env variable', function()
- clear({env={EMPTY_VAR=""}})
+ clear({ env = { EMPTY_VAR = '' } })
eq(1, exists('$EMPTY_VAR'))
eq(0, exists('$DOES_NOT_EXIST'))
end)
@@ -46,23 +46,32 @@ describe('empty $HOME', function()
end
local function write_and_test_tilde()
- system({nvim_prog, '-u', 'NONE', '-i', 'NONE', '--headless',
- '-c', 'write test_empty_home', '+q'})
+ system({
+ nvim_prog,
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--headless',
+ '-c',
+ 'write test_empty_home',
+ '+q',
+ })
eq(false, tilde_in_cwd())
end
it("'~' folder not created in cwd if $HOME and related env not defined", function()
- command("unlet $HOME")
+ command('unlet $HOME')
write_and_test_tilde()
command("let $HOMEDRIVE='C:'")
command("let $USERPROFILE='C:\\'")
write_and_test_tilde()
- command("unlet $HOMEDRIVE")
+ command('unlet $HOMEDRIVE')
write_and_test_tilde()
- command("unlet $USERPROFILE")
+ command('unlet $USERPROFILE')
write_and_test_tilde()
command("let $HOME='%USERPROFILE%'")
diff --git a/test/functional/vimscript/errorlist_spec.lua b/test/functional/vimscript/errorlist_spec.lua
index 077d816903..1e405e7e64 100644
--- a/test/functional/vimscript/errorlist_spec.lua
+++ b/test/functional/vimscript/errorlist_spec.lua
@@ -4,10 +4,10 @@ local clear = helpers.clear
local command = helpers.command
local eq = helpers.eq
local exc_exec = helpers.exc_exec
-local get_cur_win_var = helpers.curwinmeths.get_var
+local get_win_var = helpers.api.nvim_win_get_var
describe('setqflist()', function()
- local setqflist = helpers.funcs.setqflist
+ local setqflist = helpers.fn.setqflist
before_each(clear)
@@ -24,26 +24,29 @@ describe('setqflist()', function()
end)
it('sets w:quickfix_title', function()
- setqflist({''}, 'r', 'foo')
+ setqflist({ '' }, 'r', 'foo')
command('copen')
- eq('foo', get_cur_win_var('quickfix_title'))
- setqflist({}, 'r', {['title'] = 'qf_title'})
- eq('qf_title', get_cur_win_var('quickfix_title'))
+ eq('foo', get_win_var(0, 'quickfix_title'))
+ setqflist({}, 'r', { ['title'] = 'qf_title' })
+ eq('qf_title', get_win_var(0, 'quickfix_title'))
end)
it('allows string {what} for backwards compatibility', function()
setqflist({}, 'r', '5')
command('copen')
- eq('5', get_cur_win_var('quickfix_title'))
+ eq('5', get_win_var(0, 'quickfix_title'))
end)
it('requires a dict for {what}', function()
- eq('Vim(call):E715: Dictionary required', exc_exec('call setqflist([], "r", function("function"))'))
+ eq(
+ 'Vim(call):E715: Dictionary required',
+ exc_exec('call setqflist([], "r", function("function"))')
+ )
end)
end)
describe('setloclist()', function()
- local setloclist = helpers.funcs.setloclist
+ local setloclist = helpers.fn.setloclist
before_each(clear)
@@ -64,20 +67,20 @@ describe('setloclist()', function()
setloclist(1, {}, 'r', 'foo')
setloclist(2, {}, 'r', 'bar')
command('lopen')
- eq('bar', get_cur_win_var('quickfix_title'))
+ eq('bar', get_win_var(0, 'quickfix_title'))
command('lclose | wincmd w | lopen')
- eq('foo', get_cur_win_var('quickfix_title'))
+ eq('foo', get_win_var(0, 'quickfix_title'))
end)
it("doesn't crash when when window is closed in the middle #13721", function()
helpers.insert([[
hello world]])
- command("vsplit")
- command("autocmd WinLeave * :call nvim_win_close(0, v:true)")
+ command('vsplit')
+ command('autocmd WinLeave * :call nvim_win_close(0, v:true)')
- command("call setloclist(0, [])")
- command("lopen")
+ command('call setloclist(0, [])')
+ command('lopen')
helpers.assert_alive()
end)
diff --git a/test/functional/vimscript/eval_spec.lua b/test/functional/vimscript/eval_spec.lua
index ab0ffccd4d..e337959810 100644
--- a/test/functional/vimscript/eval_spec.lua
+++ b/test/functional/vimscript/eval_spec.lua
@@ -15,37 +15,39 @@ local Screen = require('test.functional.ui.screen')
local mkdir = helpers.mkdir
local clear = helpers.clear
local eq = helpers.eq
+local exec = helpers.exec
local exc_exec = helpers.exc_exec
local exec_lua = helpers.exec_lua
local exec_capture = helpers.exec_capture
local eval = helpers.eval
local command = helpers.command
local write_file = helpers.write_file
-local meths = helpers.meths
-local sleep = helpers.sleep
+local api = helpers.api
+local sleep = vim.uv.sleep
local matches = helpers.matches
local pcall_err = helpers.pcall_err
local assert_alive = helpers.assert_alive
local poke_eventloop = helpers.poke_eventloop
local feed = helpers.feed
+local expect_exit = helpers.expect_exit
describe('Up to MAX_FUNC_ARGS arguments are handled by', function()
- local max_func_args = 20 -- from eval.h
- local range = helpers.funcs.range
+ local max_func_args = 20 -- from eval.h
+ local range = helpers.fn.range
before_each(clear)
it('printf()', function()
- local printf = helpers.funcs.printf
- local rep = helpers.funcs['repeat']
+ local printf = helpers.fn.printf
+ local rep = helpers.fn['repeat']
local expected = '2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,'
- eq(expected, printf(rep('%d,', max_func_args-1), unpack(range(2, max_func_args))))
+ eq(expected, printf(rep('%d,', max_func_args - 1), unpack(range(2, max_func_args))))
local ret = exc_exec('call printf("", 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)')
eq('Vim(call):E740: Too many arguments for function printf', ret)
end)
it('rpcnotify()', function()
- local rpcnotify = helpers.funcs.rpcnotify
+ local rpcnotify = helpers.fn.rpcnotify
local ret = rpcnotify(0, 'foo', unpack(range(3, max_func_args)))
eq(1, ret)
ret = exc_exec('call rpcnotify(0, "foo", 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)')
@@ -53,15 +55,15 @@ describe('Up to MAX_FUNC_ARGS arguments are handled by', function()
end)
end)
-describe("backtick expansion", function()
+describe('backtick expansion', function()
setup(function()
clear()
- mkdir("test-backticks")
- write_file("test-backticks/file1", "test file 1")
- write_file("test-backticks/file2", "test file 2")
- write_file("test-backticks/file3", "test file 3")
- mkdir("test-backticks/subdir")
- write_file("test-backticks/subdir/file4", "test file 4")
+ mkdir('test-backticks')
+ write_file('test-backticks/file1', 'test file 1')
+ write_file('test-backticks/file2', 'test file 2')
+ write_file('test-backticks/file3', 'test file 3')
+ mkdir('test-backticks/subdir')
+ write_file('test-backticks/subdir/file4', 'test file 4')
-- Long path might cause "Press ENTER" prompt; use :silent to avoid it.
command('silent cd test-backticks')
end)
@@ -72,30 +74,30 @@ describe("backtick expansion", function()
it("with default 'shell'", function()
if helpers.is_os('win') then
- command(":silent args `dir /b *2`")
+ command(':silent args `dir /b *2`')
else
- command(":silent args `echo ***2`")
+ command(':silent args `echo ***2`')
end
- eq({ "file2", }, eval("argv()"))
+ eq({ 'file2' }, eval('argv()'))
if helpers.is_os('win') then
- command(":silent args `dir /s/b *4`")
- eq({ "subdir\\file4", }, eval("map(argv(), 'fnamemodify(v:val, \":.\")')"))
+ command(':silent args `dir /s/b *4`')
+ eq({ 'subdir\\file4' }, eval('map(argv(), \'fnamemodify(v:val, ":.")\')'))
else
- command(":silent args `echo */*4`")
- eq({ "subdir/file4", }, eval("argv()"))
+ command(':silent args `echo */*4`')
+ eq({ 'subdir/file4' }, eval('argv()'))
end
end)
- it("with shell=fish", function()
+ it('with shell=fish', function()
if eval("executable('fish')") == 0 then
pending('missing "fish" command')
return
end
- command("set shell=fish")
- command(":silent args `echo ***2`")
- eq({ "file2", }, eval("argv()"))
- command(":silent args `echo */*4`")
- eq({ "subdir/file4", }, eval("argv()"))
+ command('set shell=fish')
+ command(':silent args `echo ***2`')
+ eq({ 'file2' }, eval('argv()'))
+ command(':silent args `echo */*4`')
+ eq({ 'subdir/file4' }, eval('argv()'))
end)
end)
@@ -104,7 +106,9 @@ describe('List support code', function()
local min_dur = 8
local len = 131072
- if not pending('does not actually allows interrupting with just got_int', function() end) then return end
+ if not pending('does not actually allows interrupting with just got_int', function() end) then
+ return
+ end
-- The following tests are confirmed to work with os_breakcheck() just before
-- `if (got_int) {break;}` in tv_list_copy and list_join_inner() and not to
-- work without.
@@ -117,7 +121,7 @@ describe('List support code', function()
let bl = range(%u)
let dur = reltimestr(reltime(rt))
]]):format(len))
- dur = tonumber(meths.get_var('dur'))
+ dur = tonumber(api.nvim_get_var('dur'))
if dur >= min_dur then
-- print(('Using len %u, dur %g'):format(len, dur))
break
@@ -132,7 +136,7 @@ describe('List support code', function()
feed('<C-c>')
poke_eventloop()
command('let t_dur = reltimestr(reltime(t_rt))')
- local t_dur = tonumber(meths.get_var('t_dur'))
+ local t_dur = tonumber(api.nvim_get_var('t_dur'))
if t_dur >= dur / 8 then
eq(nil, ('Took too long to cancel: %g >= %g'):format(t_dur, dur / 8))
end
@@ -143,7 +147,7 @@ describe('List support code', function()
feed('<C-c>')
poke_eventloop()
command('let t_dur = reltimestr(reltime(t_rt))')
- local t_dur = tonumber(meths.get_var('t_dur'))
+ local t_dur = tonumber(api.nvim_get_var('t_dur'))
print(('t_dur: %g'):format(t_dur))
if t_dur >= dur / 8 then
eq(nil, ('Took too long to cancel: %g >= %g'):format(t_dur, dur / 8))
@@ -151,7 +155,7 @@ describe('List support code', function()
end)
end)
-describe("uncaught exception", function()
+describe('uncaught exception', function()
before_each(clear)
it('is not forgotten #13490', function()
@@ -162,11 +166,14 @@ describe("uncaught exception", function()
-- from processing the others.
-- Only the first thrown exception should be rethrown from the :try below, though.
for i = 1, 3 do
- write_file('throw' .. i .. '.vim', ([[
+ write_file(
+ 'throw' .. i .. '.vim',
+ ([[
let result ..= '%d'
throw 'throw%d'
let result ..= 'X'
- ]]):format(i, i))
+ ]]):format(i, i)
+ )
end
finally(function()
for i = 1, 3 do
@@ -182,9 +189,9 @@ describe("uncaught exception", function()
it('multiline exception remains multiline #25350', function()
local screen = Screen.new(80, 11)
screen:set_default_attr_ids({
- [1] = {bold = true, reverse = true}; -- MsgSeparator
- [2] = {foreground = Screen.colors.White, background = Screen.colors.Red}; -- ErrorMsg
- [3] = {bold = true, foreground = Screen.colors.SeaGreen}; -- MoreMsg
+ [1] = { bold = true, reverse = true }, -- MsgSeparator
+ [2] = { foreground = Screen.colors.White, background = Screen.colors.Red }, -- ErrorMsg
+ [3] = { bold = true, foreground = Screen.colors.SeaGreen }, -- MoreMsg
})
screen:attach()
exec_lua([[
@@ -193,7 +200,8 @@ describe("uncaught exception", function()
end
]])
feed(':try\rlua _G.Oops()\rendtry\r')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: }|
:try |
: lua _G.Oops() |
@@ -205,7 +213,8 @@ describe("uncaught exception", function()
{2: [string "<nvim>"]:2: in function 'Oops'} |
{2: [string ":lua"]:1: in main chunk} |
{3:Press ENTER or type command to continue}^ |
- ]]}
+ ]],
+ }
end)
end)
@@ -215,16 +224,23 @@ describe('listing functions using :function', function()
it('works for lambda functions with <lambda> #20466', function()
command('let A = {-> 1}')
local num = exec_capture('echo A'):match("function%('<lambda>(%d+)'%)")
- eq(([[
+ eq(
+ ([[
function <lambda>%s(...)
1 return 1
- endfunction]]):format(num), exec_capture(('function <lambda>%s'):format(num)))
+ endfunction]]):format(num),
+ exec_capture(('function <lambda>%s'):format(num))
+ )
end)
it('does not crash if another function is deleted while listing', function()
local screen = Screen.new(80, 24)
screen:attach()
- matches('Vim%(function%):E454: Function list was modified$', pcall_err(exec_lua, [=[
+ matches(
+ 'Vim%(function%):E454: Function list was modified$',
+ pcall_err(
+ exec_lua,
+ [=[
vim.cmd([[
func Func1()
endfunc
@@ -245,14 +261,20 @@ describe('listing functions using :function', function()
vim.cmd('function')
vim.ui_detach(ns)
- ]=]))
+ ]=]
+ )
+ )
assert_alive()
end)
it('does not crash if the same function is deleted while listing', function()
local screen = Screen.new(80, 24)
screen:attach()
- matches('Vim%(function%):E454: Function list was modified$', pcall_err(exec_lua, [=[
+ matches(
+ 'Vim%(function%):E454: Function list was modified$',
+ pcall_err(
+ exec_lua,
+ [=[
vim.cmd([[
func Func1()
endfunc
@@ -273,7 +295,9 @@ describe('listing functions using :function', function()
vim.cmd('function')
vim.ui_detach(ns)
- ]=]))
+ ]=]
+ )
+ )
assert_alive()
end)
end)
@@ -281,7 +305,9 @@ end)
it('no double-free in garbage collection #16287', function()
clear()
-- Don't use exec() here as using a named script reproduces the issue better.
- write_file('Xgarbagecollect.vim', [[
+ write_file(
+ 'Xgarbagecollect.vim',
+ [[
func Foo() abort
let s:args = [a:000]
let foo0 = ""
@@ -304,7 +330,8 @@ it('no double-free in garbage collection #16287', function()
set updatetime=1
call Foo()
call Foo()
- ]])
+ ]]
+ )
finally(function()
os.remove('Xgarbagecollect.vim')
end)
@@ -312,3 +339,14 @@ it('no double-free in garbage collection #16287', function()
sleep(10)
assert_alive()
end)
+
+it('no heap-use-after-free with EXITFREE and partial as prompt callback', function()
+ clear()
+ exec([[
+ func PromptCallback(text)
+ endfunc
+ setlocal buftype=prompt
+ call prompt_setcallback('', funcref('PromptCallback'))
+ ]])
+ expect_exit(command, 'qall!')
+end)
diff --git a/test/functional/vimscript/executable_spec.lua b/test/functional/vimscript/executable_spec.lua
index 2b8e3f6218..1d95f6088e 100644
--- a/test/functional/vimscript/executable_spec.lua
+++ b/test/functional/vimscript/executable_spec.lua
@@ -1,7 +1,6 @@
local helpers = require('test.functional.helpers')(after_each)
local eq, clear, call, write_file, command =
- helpers.eq, helpers.clear, helpers.call, helpers.write_file,
- helpers.command
+ helpers.eq, helpers.clear, helpers.call, helpers.write_file, helpers.command
local exc_exec = helpers.exc_exec
local eval = helpers.eval
local is_os = helpers.is_os
@@ -21,9 +20,15 @@ describe('executable()', function()
if is_os('win') then
it('exepath respects shellslash', function()
command('let $PATH = fnamemodify("./test/functional/fixtures/bin", ":p")')
- eq([[test\functional\fixtures\bin\null.CMD]], call('fnamemodify', call('exepath', 'null'), ':.'))
+ eq(
+ [[test\functional\fixtures\bin\null.CMD]],
+ call('fnamemodify', call('exepath', 'null'), ':.')
+ )
command('set shellslash')
- eq('test/functional/fixtures/bin/null.CMD', call('fnamemodify', call('exepath', 'null'), ':.'))
+ eq(
+ 'test/functional/fixtures/bin/null.CMD',
+ call('fnamemodify', call('exepath', 'null'), ':.')
+ )
end)
it('stdpath respects shellslash', function()
@@ -34,14 +39,18 @@ describe('executable()', function()
end
it('fails for invalid values', function()
- for _, input in ipairs({'v:null', 'v:true', 'v:false', '{}', '[]'}) do
- eq('Vim(call):E1174: String required for argument 1',
- exc_exec('call executable('..input..')'))
+ for _, input in ipairs({ 'v:null', 'v:true', 'v:false', '{}', '[]' }) do
+ eq(
+ 'Vim(call):E1174: String required for argument 1',
+ exc_exec('call executable(' .. input .. ')')
+ )
end
command('let $PATH = fnamemodify("./test/functional/fixtures/bin", ":p")')
- for _, input in ipairs({'v:null', 'v:true', 'v:false'}) do
- eq('Vim(call):E1174: String required for argument 1',
- exc_exec('call executable('..input..')'))
+ for _, input in ipairs({ 'v:null', 'v:true', 'v:false' }) do
+ eq(
+ 'Vim(call):E1174: String required for argument 1',
+ exc_exec('call executable(' .. input .. ')')
+ )
end
end)
@@ -59,8 +68,7 @@ describe('executable()', function()
-- Windows: siblings are in Nvim's "pseudo-$PATH".
local expected = is_os('win') and 1 or 0
if is_os('win') then
- eq('arg1=lemon;arg2=sky;arg3=tree;',
- call('system', sibling_exe..' lemon sky tree'))
+ eq('arg1=lemon;arg2=sky;arg3=tree;', call('system', sibling_exe .. ' lemon sky tree'))
end
eq(expected, call('executable', sibling_exe))
end)
@@ -70,9 +78,9 @@ describe('executable()', function()
clear()
write_file('Xtest_not_executable', 'non-executable file')
write_file('Xtest_executable', 'executable file (exec-bit set)')
- if not is_os('win') then -- N/A for Windows.
- call('system', {'chmod', '-x', 'Xtest_not_executable'})
- call('system', {'chmod', '+x', 'Xtest_executable'})
+ if not is_os('win') then -- N/A for Windows.
+ call('system', { 'chmod', '-x', 'Xtest_not_executable' })
+ call('system', { 'chmod', '+x', 'Xtest_executable' })
end
end)
@@ -103,144 +111,142 @@ describe('executable() (Windows)', function()
return
end
- local exts = {'bat', 'exe', 'com', 'cmd'}
+ local exts = { 'bat', 'exe', 'com', 'cmd' }
setup(function()
for _, ext in ipairs(exts) do
- write_file('test_executable_'..ext..'.'..ext, '')
+ write_file('test_executable_' .. ext .. '.' .. ext, '')
end
write_file('test_executable_zzz.zzz', '')
end)
teardown(function()
for _, ext in ipairs(exts) do
- os.remove('test_executable_'..ext..'.'..ext)
+ os.remove('test_executable_' .. ext .. '.' .. ext)
end
os.remove('test_executable_zzz.zzz')
end)
it('tries default extensions on a filename if $PATHEXT is empty', function()
-- Empty $PATHEXT defaults to ".com;.exe;.bat;.cmd".
- clear({env={PATHEXT=''}})
- for _,ext in ipairs(exts) do
- eq(1, call('executable', 'test_executable_'..ext))
+ clear({ env = { PATHEXT = '' } })
+ for _, ext in ipairs(exts) do
+ eq(1, call('executable', 'test_executable_' .. ext))
end
eq(0, call('executable', 'test_executable_zzz'))
end)
it('tries default extensions on a filepath if $PATHEXT is empty', function()
-- Empty $PATHEXT defaults to ".com;.exe;.bat;.cmd".
- clear({env={PATHEXT=''}})
- for _,ext in ipairs(exts) do
- eq(1, call('executable', '.\\test_executable_'..ext))
+ clear({ env = { PATHEXT = '' } })
+ for _, ext in ipairs(exts) do
+ eq(1, call('executable', '.\\test_executable_' .. ext))
end
eq(0, call('executable', '.\\test_executable_zzz'))
end)
it('system([…]), jobstart([…]) use $PATHEXT #9569', function()
-- Empty $PATHEXT defaults to ".com;.exe;.bat;.cmd".
- clear({env={PATHEXT=''}})
+ clear({ env = { PATHEXT = '' } })
-- Invoking `cmdscript` should find/execute `cmdscript.cmd`.
- eq('much success\n', call('system', {'test/functional/fixtures/cmdscript'}))
- assert(0 < call('jobstart', {'test/functional/fixtures/cmdscript'}))
+ eq('much success\n', call('system', { 'test/functional/fixtures/cmdscript' }))
+ assert(0 < call('jobstart', { 'test/functional/fixtures/cmdscript' }))
end)
it('full path with extension', function()
-- Empty $PATHEXT defaults to ".com;.exe;.bat;.cmd".
- clear({env={PATHEXT=''}})
+ clear({ env = { PATHEXT = '' } })
-- Some executable we can expect in the test env.
local exe = 'printargs-test'
local exedir = eval("fnamemodify(v:progpath, ':h')")
- local exepath = exedir..'/'..exe..'.exe'
+ local exepath = exedir .. '/' .. exe .. '.exe'
eq(1, call('executable', exepath))
- eq('arg1=lemon;arg2=sky;arg3=tree;',
- call('system', exepath..' lemon sky tree'))
+ eq('arg1=lemon;arg2=sky;arg3=tree;', call('system', exepath .. ' lemon sky tree'))
end)
it('full path without extension', function()
-- Empty $PATHEXT defaults to ".com;.exe;.bat;.cmd".
- clear({env={PATHEXT=''}})
+ clear({ env = { PATHEXT = '' } })
-- Some executable we can expect in the test env.
local exe = 'printargs-test'
local exedir = eval("fnamemodify(v:progpath, ':h')")
- local exepath = exedir..'/'..exe
- eq('arg1=lemon;arg2=sky;arg3=tree;',
- call('system', exepath..' lemon sky tree'))
- eq(1, call('executable', exepath))
+ local exepath = exedir .. '/' .. exe
+ eq('arg1=lemon;arg2=sky;arg3=tree;', call('system', exepath .. ' lemon sky tree'))
+ eq(1, call('executable', exepath))
end)
it('respects $PATHEXT when trying extensions on a filename', function()
- clear({env={PATHEXT='.zzz'}})
- for _,ext in ipairs(exts) do
- eq(0, call('executable', 'test_executable_'..ext))
+ clear({ env = { PATHEXT = '.zzz' } })
+ for _, ext in ipairs(exts) do
+ eq(0, call('executable', 'test_executable_' .. ext))
end
eq(1, call('executable', 'test_executable_zzz'))
end)
it('respects $PATHEXT when trying extensions on a filepath', function()
- clear({env={PATHEXT='.zzz'}})
- for _,ext in ipairs(exts) do
- eq(0, call('executable', '.\\test_executable_'..ext))
+ clear({ env = { PATHEXT = '.zzz' } })
+ for _, ext in ipairs(exts) do
+ eq(0, call('executable', '.\\test_executable_' .. ext))
end
eq(1, call('executable', '.\\test_executable_zzz'))
end)
- it("with weird $PATHEXT", function()
- clear({env={PATHEXT=';'}})
+ it('with weird $PATHEXT', function()
+ clear({ env = { PATHEXT = ';' } })
eq(0, call('executable', '.\\test_executable_zzz'))
- clear({env={PATHEXT=';;;.zzz;;'}})
+ clear({ env = { PATHEXT = ';;;.zzz;;' } })
eq(1, call('executable', '.\\test_executable_zzz'))
end)
it("unqualified filename, Unix-style 'shell'", function()
- clear({env={PATHEXT=''}})
+ clear({ env = { PATHEXT = '' } })
command('set shell=sh')
- for _,ext in ipairs(exts) do
- eq(1, call('executable', 'test_executable_'..ext..'.'..ext))
+ for _, ext in ipairs(exts) do
+ eq(1, call('executable', 'test_executable_' .. ext .. '.' .. ext))
end
eq(1, call('executable', 'test_executable_zzz.zzz'))
end)
it("relative path, Unix-style 'shell' (backslashes)", function()
- clear({env={PATHEXT=''}})
+ clear({ env = { PATHEXT = '' } })
command('set shell=bash.exe')
- for _,ext in ipairs(exts) do
- eq(1, call('executable', '.\\test_executable_'..ext..'.'..ext))
- eq(1, call('executable', './test_executable_'..ext..'.'..ext))
+ for _, ext in ipairs(exts) do
+ eq(1, call('executable', '.\\test_executable_' .. ext .. '.' .. ext))
+ eq(1, call('executable', './test_executable_' .. ext .. '.' .. ext))
end
eq(1, call('executable', '.\\test_executable_zzz.zzz'))
eq(1, call('executable', './test_executable_zzz.zzz'))
end)
it('unqualified filename, $PATHEXT contains dot', function()
- clear({env={PATHEXT='.;.zzz'}})
- for _,ext in ipairs(exts) do
- eq(1, call('executable', 'test_executable_'..ext..'.'..ext))
+ clear({ env = { PATHEXT = '.;.zzz' } })
+ for _, ext in ipairs(exts) do
+ eq(1, call('executable', 'test_executable_' .. ext .. '.' .. ext))
end
eq(1, call('executable', 'test_executable_zzz.zzz'))
- clear({env={PATHEXT='.zzz;.'}})
- for _,ext in ipairs(exts) do
- eq(1, call('executable', 'test_executable_'..ext..'.'..ext))
+ clear({ env = { PATHEXT = '.zzz;.' } })
+ for _, ext in ipairs(exts) do
+ eq(1, call('executable', 'test_executable_' .. ext .. '.' .. ext))
end
eq(1, call('executable', 'test_executable_zzz.zzz'))
end)
it('relative path, $PATHEXT contains dot (backslashes)', function()
- clear({env={PATHEXT='.;.zzz'}})
- for _,ext in ipairs(exts) do
- eq(1, call('executable', '.\\test_executable_'..ext..'.'..ext))
- eq(1, call('executable', './test_executable_'..ext..'.'..ext))
+ clear({ env = { PATHEXT = '.;.zzz' } })
+ for _, ext in ipairs(exts) do
+ eq(1, call('executable', '.\\test_executable_' .. ext .. '.' .. ext))
+ eq(1, call('executable', './test_executable_' .. ext .. '.' .. ext))
end
eq(1, call('executable', '.\\test_executable_zzz.zzz'))
eq(1, call('executable', './test_executable_zzz.zzz'))
end)
it('ignores case of extension', function()
- clear({env={PATHEXT='.ZZZ'}})
+ clear({ env = { PATHEXT = '.ZZZ' } })
eq(1, call('executable', 'test_executable_zzz.zzz'))
end)
it('relative path does not search $PATH', function()
- clear({env={PATHEXT=''}})
+ clear({ env = { PATHEXT = '' } })
eq(0, call('executable', './System32/notepad.exe'))
eq(0, call('executable', '.\\System32\\notepad.exe'))
eq(0, call('executable', '../notepad.exe'))
diff --git a/test/functional/vimscript/execute_spec.lua b/test/functional/vimscript/execute_spec.lua
index bb28938708..29488ed31c 100644
--- a/test/functional/vimscript/execute_spec.lua
+++ b/test/functional/vimscript/execute_spec.lua
@@ -5,7 +5,7 @@ local clear = helpers.clear
local source = helpers.source
local exc_exec = helpers.exc_exec
local pcall_err = helpers.pcall_err
-local funcs = helpers.funcs
+local fn = helpers.fn
local Screen = require('test.functional.ui.screen')
local command = helpers.command
local feed = helpers.feed
@@ -22,16 +22,16 @@ describe('execute()', function()
silent! messages
redir END
]])
- eq(eval('g:__redir_output'), funcs.execute('messages'))
+ eq(eval('g:__redir_output'), fn.execute('messages'))
end)
it('captures the concatenated outputs of a List of commands', function()
- eq("foobar", funcs.execute({'echon "foo"', 'echon "bar"'}))
- eq("\nfoo\nbar", funcs.execute({'echo "foo"', 'echo "bar"'}))
+ eq('foobar', fn.execute({ 'echon "foo"', 'echon "bar"' }))
+ eq('\nfoo\nbar', fn.execute({ 'echo "foo"', 'echo "bar"' }))
end)
it('supports nested execute("execute(...)")', function()
- eq('42', funcs.execute([[echon execute("echon execute('echon 42')")]]))
+ eq('42', fn.execute([[echon execute("echon execute('echon 42')")]]))
end)
it('supports nested :redir to a variable', function()
@@ -54,7 +54,7 @@ describe('execute()', function()
return a
endfunction
]])
- eq('top1bar1foobar2bar3', funcs.execute('echon "top1"|call g:Bar()'))
+ eq('top1bar1foobar2bar3', fn.execute('echon "top1"|call g:Bar()'))
end)
it('supports nested :redir to a register', function()
@@ -76,17 +76,17 @@ describe('execute()', function()
return @a
endfunction
]])
- eq('top1bar1foobar2bar3', funcs.execute('echon "top1"|call g:Bar()'))
+ eq('top1bar1foobar2bar3', fn.execute('echon "top1"|call g:Bar()'))
-- :redir itself doesn't nest, so the redirection ends in g:Foo
eq('bar1foo', eval('@a'))
end)
it('captures a transformed string', function()
- eq('^A', funcs.execute('echon "\\<C-a>"'))
+ eq('^A', fn.execute('echon "\\<C-a>"'))
end)
it('returns empty string if the argument list is empty', function()
- eq('', funcs.execute({}))
+ eq('', fn.execute({}))
eq(0, exc_exec('let g:ret = execute(v:_null_list)'))
eq('', eval('g:ret'))
end)
@@ -104,27 +104,31 @@ describe('execute()', function()
end)
it('captures output with highlights', function()
- eq('\nErrorMsg xxx ctermfg=15 ctermbg=1 guifg=White guibg=Red',
- eval('execute("hi ErrorMsg")'))
+ eq(
+ '\nErrorMsg xxx ctermfg=15 ctermbg=1 guifg=White guibg=Red',
+ eval('execute("hi ErrorMsg")')
+ )
end)
it('does not corrupt the command display #5422', function()
local screen = Screen.new(70, 7)
screen:attach()
feed(':echo execute("hi ErrorMsg")<CR>')
- screen:expect([[
+ screen:expect(
+ [[
|
- {1:~ }|
- {1:~ }|
+ {1:~ }|*2
{2: }|
|
ErrorMsg xxx ctermfg=15 ctermbg=1 guifg=White guibg=Red |
{3:Press ENTER or type command to continue}^ |
- ]], {
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- [2] = {bold = true, reverse = true},
- [3] = {bold = true, foreground = Screen.colors.SeaGreen4},
- })
+ ]],
+ {
+ [1] = { bold = true, foreground = Screen.colors.Blue1 },
+ [2] = { bold = true, reverse = true },
+ [3] = { bold = true, foreground = Screen.colors.SeaGreen4 },
+ }
+ )
feed('<CR>')
end)
@@ -187,30 +191,21 @@ describe('execute()', function()
feed([[:call Test1()<cr>]])
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*4
ABCD |
]])
feed([[:call Test2()<cr>]])
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*4
1234ABCD |
]])
feed([[:call Test3()<cr>]])
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*4
1234ABCDXZYZ |
]])
@@ -231,10 +226,7 @@ describe('execute()', function()
feed([[:call Test5()<cr>]])
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*4
1234ABCD |
]])
@@ -263,7 +255,7 @@ describe('execute()', function()
-- with how nvim currently displays the output.
it('captures shell-command output', function()
local win_lf = is_os('win') and '\13' or ''
- eq('\n:!echo foo\r\n\nfoo'..win_lf..'\n', funcs.execute('!echo foo'))
+ eq('\n:!echo foo\r\n\nfoo' .. win_lf .. '\n', fn.execute('!echo foo'))
end)
describe('{silent} argument', function()
@@ -273,9 +265,7 @@ describe('execute()', function()
command('let g:mes = execute("echon 42", "")')
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
+ ~ |*3
42 |
]])
eq('42', eval('g:mes'))
@@ -283,10 +273,14 @@ describe('execute()', function()
it('gives E493 instead of prompting on backwards range for ""', function()
command('split')
- eq('Vim(windo):E493: Backwards range given: 2,1windo echo',
- pcall_err(funcs.execute, '2,1windo echo', ''))
- eq('Vim(windo):E493: Backwards range given: 2,1windo echo',
- pcall_err(funcs.execute, {'2,1windo echo'}, ''))
+ eq(
+ 'Vim(windo):E493: Backwards range given: 2,1windo echo',
+ pcall_err(fn.execute, '2,1windo echo', '')
+ )
+ eq(
+ 'Vim(windo):E493: Backwards range given: 2,1windo echo',
+ pcall_err(fn.execute, { '2,1windo echo' }, '')
+ )
end)
it('captures but does not display output for "silent"', function()
@@ -295,21 +289,20 @@ describe('execute()', function()
command('let g:mes = execute("echon 42")')
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
+ ~ |*3
|
]])
eq('42', eval('g:mes'))
command('let g:mes = execute("echon 13", "silent")')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
^ |
- ~ |
- ~ |
- ~ |
+ ~ |*3
|
- ]], unchanged=true}
+ ]],
+ unchanged = true,
+ }
eq('13', eval('g:mes'))
end)
diff --git a/test/functional/vimscript/exepath_spec.lua b/test/functional/vimscript/exepath_spec.lua
index da3d61cbe0..01033a2140 100644
--- a/test/functional/vimscript/exepath_spec.lua
+++ b/test/functional/vimscript/exepath_spec.lua
@@ -1,6 +1,5 @@
local helpers = require('test.functional.helpers')(after_each)
-local eq, clear, call =
- helpers.eq, helpers.clear, helpers.call
+local eq, clear, call = helpers.eq, helpers.clear, helpers.call
local command = helpers.command
local exc_exec = helpers.exc_exec
local matches = helpers.matches
@@ -14,20 +13,26 @@ local find_dummies = function(ext_pat)
matches('null' .. ext_pat, call('exepath', 'null'))
matches('true' .. ext_pat, call('exepath', 'true'))
matches('false' .. ext_pat, call('exepath', 'false'))
- command("let $PATH = '"..tmp_path.."'")
+ command("let $PATH = '" .. tmp_path .. "'")
end
describe('exepath()', function()
before_each(clear)
it('fails for invalid values', function()
- for _, input in ipairs({'v:null', 'v:true', 'v:false', '{}', '[]'}) do
- eq('Vim(call):E1174: String required for argument 1', exc_exec('call exepath('..input..')'))
+ for _, input in ipairs({ 'v:null', 'v:true', 'v:false', '{}', '[]' }) do
+ eq(
+ 'Vim(call):E1174: String required for argument 1',
+ exc_exec('call exepath(' .. input .. ')')
+ )
end
eq('Vim(call):E1175: Non-empty string required for argument 1', exc_exec('call exepath("")'))
command('let $PATH = fnamemodify("./test/functional/fixtures/bin", ":p")')
- for _, input in ipairs({'v:null', 'v:true', 'v:false'}) do
- eq('Vim(call):E1174: String required for argument 1', exc_exec('call exepath('..input..')'))
+ for _, input in ipairs({ 'v:null', 'v:true', 'v:false' }) do
+ eq(
+ 'Vim(call):E1174: String required for argument 1',
+ exc_exec('call exepath(' .. input .. ')')
+ )
end
end)
@@ -40,24 +45,30 @@ describe('exepath()', function()
it('append extension if omitted', function()
local filename = 'cmd'
local pathext = '.exe'
- clear({env={PATHEXT=pathext}})
- eq(call('exepath', filename..pathext), call('exepath', filename))
+ clear({ env = { PATHEXT = pathext } })
+ eq(call('exepath', filename .. pathext), call('exepath', filename))
end)
- it('returns file WITH extension if files both with and without extension exist in $PATH', function()
- local ext_pat = '%.CMD$'
- find_dummies(ext_pat)
- set_shell_powershell()
- find_dummies(ext_pat)
- end)
+ it(
+ 'returns file WITH extension if files both with and without extension exist in $PATH',
+ function()
+ local ext_pat = '%.CMD$'
+ find_dummies(ext_pat)
+ set_shell_powershell()
+ find_dummies(ext_pat)
+ end
+ )
else
it('returns 1 for commands in $PATH (not Windows)', function()
local exe = 'ls'
matches(exe .. '$', call('exepath', exe))
end)
- it('returns file WITHOUT extension if files both with and without extension exist in $PATH', function()
- find_dummies('$')
- end)
+ it(
+ 'returns file WITHOUT extension if files both with and without extension exist in $PATH',
+ function()
+ find_dummies('$')
+ end
+ )
end
end)
diff --git a/test/functional/vimscript/fnamemodify_spec.lua b/test/functional/vimscript/fnamemodify_spec.lua
index c3ecdd853c..4a134fe23c 100644
--- a/test/functional/vimscript/fnamemodify_spec.lua
+++ b/test/functional/vimscript/fnamemodify_spec.lua
@@ -1,8 +1,8 @@
local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
local eq = helpers.eq
-local fnamemodify = helpers.funcs.fnamemodify
-local getcwd = helpers.funcs.getcwd
+local fnamemodify = helpers.fn.fnamemodify
+local getcwd = helpers.fn.getcwd
local command = helpers.command
local write_file = helpers.write_file
local alter_slashes = helpers.alter_slashes
@@ -31,7 +31,7 @@ describe('fnamemodify()', function()
eq(root, fnamemodify([[\]], ':p:h'))
eq(root, fnamemodify([[\]], ':p'))
command('set shellslash')
- root = string.sub(root, 1, -2)..'/'
+ root = string.sub(root, 1, -2) .. '/'
eq(root, fnamemodify([[\]], ':p:h'))
eq(root, fnamemodify([[\]], ':p'))
eq(root, fnamemodify([[/]], ':p:h'))
@@ -44,7 +44,7 @@ describe('fnamemodify()', function()
end)
it('handles examples from ":help filename-modifiers"', function()
- local filename = "src/version.c"
+ local filename = 'src/version.c'
local cwd = getcwd()
eq_slashconvert(cwd .. '/src/version.c', fnamemodify(filename, ':p'))
@@ -70,7 +70,7 @@ describe('fnamemodify()', function()
end)
it('handles advanced examples from ":help filename-modifiers"', function()
- local filename = "src/version.c.gz"
+ local filename = 'src/version.c.gz'
eq('gz', fnamemodify(filename, ':e'))
eq('c.gz', fnamemodify(filename, ':e:e'))
diff --git a/test/functional/vimscript/getline_spec.lua b/test/functional/vimscript/getline_spec.lua
index 3c56bde094..08e7711b8c 100644
--- a/test/functional/vimscript/getline_spec.lua
+++ b/test/functional/vimscript/getline_spec.lua
@@ -8,7 +8,7 @@ local expect = helpers.expect
describe('getline()', function()
before_each(function()
clear()
- call('setline', 1, {'a', 'b', 'c'})
+ call('setline', 1, { 'a', 'b', 'c' })
expect([[
a
b
@@ -33,7 +33,7 @@ describe('getline()', function()
end)
it('returns value of valid range', function()
- eq({'a', 'b'}, call('getline', 1, 2))
- eq({'a', 'b', 'c'}, call('getline', 1, 4))
+ eq({ 'a', 'b' }, call('getline', 1, 2))
+ eq({ 'a', 'b', 'c' }, call('getline', 1, 4))
end)
end)
diff --git a/test/functional/vimscript/glob_spec.lua b/test/functional/vimscript/glob_spec.lua
index 948a63f050..77351f95fa 100644
--- a/test/functional/vimscript/glob_spec.lua
+++ b/test/functional/vimscript/glob_spec.lua
@@ -1,4 +1,3 @@
-local luv = require('luv')
local helpers = require('test.functional.helpers')(after_each)
local clear, command, eval, eq = helpers.clear, helpers.command, helpers.eval, helpers.eq
local mkdir = helpers.mkdir
@@ -12,14 +11,14 @@ before_each(function()
end)
after_each(function()
- luv.fs_rmdir('test-glob')
+ vim.uv.fs_rmdir('test-glob')
end)
describe('glob()', function()
it("glob('.*') returns . and .. ", function()
- eq({'.', '..'}, eval("glob('.*', 0, 1)"))
+ eq({ '.', '..' }, eval("glob('.*', 0, 1)"))
-- Do it again to verify scandir_next_with_dots() internal state.
- eq({'.', '..'}, eval("glob('.*', 0, 1)"))
+ eq({ '.', '..' }, eval("glob('.*', 0, 1)"))
end)
it("glob('*') returns an empty list ", function()
eq({}, eval("glob('*', 0, 1)"))
diff --git a/test/functional/vimscript/has_spec.lua b/test/functional/vimscript/has_spec.lua
index 78a761d370..82b3db5b67 100644
--- a/test/functional/vimscript/has_spec.lua
+++ b/test/functional/vimscript/has_spec.lua
@@ -3,7 +3,7 @@ local Screen = require('test.functional.ui.screen')
local clear = helpers.clear
local connect = helpers.connect
local eq = helpers.eq
-local funcs = helpers.funcs
+local fn = helpers.fn
local is_os = helpers.is_os
local nvim_prog = helpers.nvim_prog
@@ -11,85 +11,83 @@ describe('has()', function()
before_each(clear)
it('"nvim-x.y.z"', function()
- eq(0, funcs.has("nvim-"))
- eq(0, funcs.has("nvim- "))
- eq(0, funcs.has("nvim- \t "))
- eq(0, funcs.has("nvim-0. 1. 1"))
- eq(0, funcs.has("nvim-0. 1.1"))
- eq(0, funcs.has("nvim-0.1. 1"))
- eq(0, funcs.has("nvim-a"))
- eq(0, funcs.has("nvim-a.b.c"))
- eq(0, funcs.has("nvim-0.b.c"))
- eq(0, funcs.has("nvim-0.0.c"))
- eq(0, funcs.has("nvim-0.b.0"))
- eq(0, funcs.has("nvim-a.b.0"))
- eq(0, funcs.has("nvim-.0.0.0"))
- eq(0, funcs.has("nvim-.0"))
- eq(0, funcs.has("nvim-0."))
- eq(0, funcs.has("nvim-0.."))
- eq(0, funcs.has("nvim-."))
- eq(0, funcs.has("nvim-.."))
- eq(0, funcs.has("nvim-..."))
- eq(0, funcs.has("nvim-42"))
- eq(0, funcs.has("nvim-9999"))
- eq(0, funcs.has("nvim-99.001.05"))
+ eq(0, fn.has('nvim-'))
+ eq(0, fn.has('nvim- '))
+ eq(0, fn.has('nvim- \t '))
+ eq(0, fn.has('nvim-0. 1. 1'))
+ eq(0, fn.has('nvim-0. 1.1'))
+ eq(0, fn.has('nvim-0.1. 1'))
+ eq(0, fn.has('nvim-a'))
+ eq(0, fn.has('nvim-a.b.c'))
+ eq(0, fn.has('nvim-0.b.c'))
+ eq(0, fn.has('nvim-0.0.c'))
+ eq(0, fn.has('nvim-0.b.0'))
+ eq(0, fn.has('nvim-a.b.0'))
+ eq(0, fn.has('nvim-.0.0.0'))
+ eq(0, fn.has('nvim-.0'))
+ eq(0, fn.has('nvim-0.'))
+ eq(0, fn.has('nvim-0..'))
+ eq(0, fn.has('nvim-.'))
+ eq(0, fn.has('nvim-..'))
+ eq(0, fn.has('nvim-...'))
+ eq(0, fn.has('nvim-42'))
+ eq(0, fn.has('nvim-9999'))
+ eq(0, fn.has('nvim-99.001.05'))
- eq(1, funcs.has("nvim"))
- eq(1, funcs.has("nvim-0"))
- eq(1, funcs.has("nvim-0.1"))
- eq(1, funcs.has("nvim-0.0.0"))
- eq(1, funcs.has("nvim-0.1.1."))
- eq(1, funcs.has("nvim-0.1.1.abc"))
- eq(1, funcs.has("nvim-0.1.1.."))
- eq(1, funcs.has("nvim-0.1.1.. .."))
- eq(1, funcs.has("nvim-0.1.1.... "))
- eq(1, funcs.has("nvim-0.0.0"))
- eq(1, funcs.has("nvim-0.0.1"))
- eq(1, funcs.has("nvim-0.1.0"))
- eq(1, funcs.has("nvim-0.1.1"))
- eq(1, funcs.has("nvim-0.1.5"))
- eq(1, funcs.has("nvim-0000.001.05"))
- eq(1, funcs.has("nvim-0.01.005"))
- eq(1, funcs.has("nvim-00.001.05"))
+ eq(1, fn.has('nvim'))
+ eq(1, fn.has('nvim-0'))
+ eq(1, fn.has('nvim-0.1'))
+ eq(1, fn.has('nvim-0.0.0'))
+ eq(1, fn.has('nvim-0.1.1.'))
+ eq(1, fn.has('nvim-0.1.1.abc'))
+ eq(1, fn.has('nvim-0.1.1..'))
+ eq(1, fn.has('nvim-0.1.1.. ..'))
+ eq(1, fn.has('nvim-0.1.1.... '))
+ eq(1, fn.has('nvim-0.0.0'))
+ eq(1, fn.has('nvim-0.0.1'))
+ eq(1, fn.has('nvim-0.1.0'))
+ eq(1, fn.has('nvim-0.1.1'))
+ eq(1, fn.has('nvim-0.1.5'))
+ eq(1, fn.has('nvim-0000.001.05'))
+ eq(1, fn.has('nvim-0.01.005'))
+ eq(1, fn.has('nvim-00.001.05'))
end)
it('"unnamedplus"', function()
- if (not is_os('win')) and funcs.has("clipboard") == 1 then
- eq(1, funcs.has("unnamedplus"))
+ if (not is_os('win')) and fn.has('clipboard') == 1 then
+ eq(1, fn.has('unnamedplus'))
else
- eq(0, funcs.has("unnamedplus"))
+ eq(0, fn.has('unnamedplus'))
end
end)
it('"wsl"', function()
- local luv = require('luv')
- local is_wsl =
- luv.os_uname()['release']:lower():match('microsoft') and true or false
+ local is_wsl = vim.uv.os_uname()['release']:lower():match('microsoft') and true or false
if is_wsl then
- eq(1, funcs.has('wsl'))
+ eq(1, fn.has('wsl'))
else
- eq(0, funcs.has('wsl'))
+ eq(0, fn.has('wsl'))
end
end)
it('"gui_running"', function()
- eq(0, funcs.has('gui_running'))
- local tui = Screen.new(50,15)
- local gui_session = connect(funcs.serverstart())
- local gui = Screen.new(50,15)
- eq(0, funcs.has('gui_running'))
- tui:attach({ext_linegrid=true, rgb=true, stdin_tty=true, stdout_tty=true})
- gui:attach({ext_multigrid=true, rgb=true}, gui_session)
- eq(1, funcs.has('gui_running'))
+ eq(0, fn.has('gui_running'))
+ local tui = Screen.new(50, 15)
+ local gui_session = connect(fn.serverstart())
+ local gui = Screen.new(50, 15)
+ eq(0, fn.has('gui_running'))
+ tui:attach({ ext_linegrid = true, rgb = true, stdin_tty = true, stdout_tty = true })
+ gui:attach({ ext_multigrid = true, rgb = true }, gui_session)
+ eq(1, fn.has('gui_running'))
tui:detach()
- eq(1, funcs.has('gui_running'))
+ eq(1, fn.has('gui_running'))
gui:detach()
- eq(0, funcs.has('gui_running'))
+ eq(0, fn.has('gui_running'))
end)
it('does not change v:shell_error', function()
- funcs.system({nvim_prog, '-es', '+73cquit'})
- funcs.has('python3') -- use a call whose implementation shells out
- eq(73, funcs.eval('v:shell_error'))
+ fn.system({ nvim_prog, '-es', '+73cquit' })
+ fn.has('python3') -- use a call whose implementation shells out
+ eq(73, fn.eval('v:shell_error'))
end)
end)
diff --git a/test/functional/vimscript/hostname_spec.lua b/test/functional/vimscript/hostname_spec.lua
index 7d4baa7213..62520e8222 100644
--- a/test/functional/vimscript/hostname_spec.lua
+++ b/test/functional/vimscript/hostname_spec.lua
@@ -13,8 +13,10 @@ describe('hostname()', function()
ok(string.len(actual) > 0)
if call('executable', 'hostname') == 1 then
local expected = string.gsub(call('system', 'hostname'), '[\n\r]', '')
- eq((is_os('win') and expected:upper() or expected),
- (is_os('win') and actual:upper() or actual))
+ eq(
+ (is_os('win') and expected:upper() or expected),
+ (is_os('win') and actual:upper() or actual)
+ )
end
end)
end)
diff --git a/test/functional/vimscript/input_spec.lua b/test/functional/vimscript/input_spec.lua
index e1179d29cc..b749d5a7f0 100644
--- a/test/functional/vimscript/input_spec.lua
+++ b/test/functional/vimscript/input_spec.lua
@@ -3,14 +3,14 @@ local Screen = require('test.functional.ui.screen')
local eq = helpers.eq
local feed = helpers.feed
-local meths = helpers.meths
+local api = helpers.api
local clear = helpers.clear
local source = helpers.source
local command = helpers.command
local exc_exec = helpers.exc_exec
local pcall_err = helpers.pcall_err
local async_meths = helpers.async_meths
-local NIL = helpers.NIL
+local NIL = vim.NIL
local screen
@@ -55,14 +55,14 @@ before_each(function()
endfunction
]])
screen:set_default_attr_ids({
- EOB={bold = true, foreground = Screen.colors.Blue1},
- T={foreground=Screen.colors.Red},
- RBP1={background=Screen.colors.Red},
- RBP2={background=Screen.colors.Yellow},
- RBP3={background=Screen.colors.Green},
- RBP4={background=Screen.colors.Blue},
- SEP={bold = true, reverse = true},
- CONFIRM={bold = true, foreground = Screen.colors.SeaGreen4},
+ EOB = { bold = true, foreground = Screen.colors.Blue1 },
+ T = { foreground = Screen.colors.Red },
+ RBP1 = { background = Screen.colors.Red },
+ RBP2 = { background = Screen.colors.Yellow },
+ RBP3 = { background = Screen.colors.Green },
+ RBP4 = { background = Screen.colors.Blue },
+ SEP = { bold = true, reverse = true },
+ CONFIRM = { bold = true, foreground = Screen.colors.SeaGreen4 },
})
end)
@@ -89,9 +89,7 @@ describe('input()', function()
command('redraw!')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo}^ |
]])
end)
@@ -100,144 +98,125 @@ describe('input()', function()
feed([[:call input(1, 2)<CR>]])
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:1}2^ |
]])
feed('<BS>')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:1}^ |
]])
end)
it('allows unequal numeric values when using {opts} dictionary', function()
command('echohl Test')
- meths.set_var('opts', {prompt=1, default=2, cancelreturn=3})
+ api.nvim_set_var('opts', { prompt = 1, default = 2, cancelreturn = 3 })
feed([[:echo input(opts)<CR>]])
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:1}2^ |
]])
feed('<BS>')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:1}^ |
]])
feed('<Esc>')
screen:expect([[
^ |
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:3} |
]])
end)
it('works with redraw', function()
command('echohl Test')
- meths.set_var('opts', {prompt='Foo>', default='Bar'})
+ api.nvim_set_var('opts', { prompt = 'Foo>', default = 'Bar' })
feed([[:echo inputdialog(opts)<CR>]])
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo>}Bar^ |
]])
command('mode')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo>}Bar^ |
- ]], reset=true}
+ ]],
+ reset = true,
+ }
feed('<BS>')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo>}Ba^ |
]])
command('mode')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo>}Ba^ |
- ]], reset=true}
+ ]],
+ reset = true,
+ }
end)
it('allows omitting everything with dictionary argument', function()
command('echohl Test')
feed([[:call input({})<CR>]])
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
^ |
]])
end)
it('supports completion', function()
feed(':let var = input("", "", "custom,CustomCompl")<CR>')
feed('<Tab><CR>')
- eq('TEST', meths.get_var('var'))
+ eq('TEST', api.nvim_get_var('var'))
feed(':let var = input({"completion": "customlist,CustomListCompl"})<CR>')
feed('<Tab><CR>')
- eq('FOO', meths.get_var('var'))
+ eq('FOO', api.nvim_get_var('var'))
end)
it('supports cancelreturn', function()
feed(':let var = input({"cancelreturn": "BAR"})<CR>')
feed('<Esc>')
- eq('BAR', meths.get_var('var'))
+ eq('BAR', api.nvim_get_var('var'))
feed(':let var = input({"cancelreturn": []})<CR>')
feed('<Esc>')
- eq({}, meths.get_var('var'))
+ eq({}, api.nvim_get_var('var'))
feed(':let var = input({"cancelreturn": v:false})<CR>')
feed('<Esc>')
- eq(false, meths.get_var('var'))
+ eq(false, api.nvim_get_var('var'))
feed(':let var = input({"cancelreturn": v:null})<CR>')
feed('<Esc>')
- eq(NIL, meths.get_var('var'))
+ eq(NIL, api.nvim_get_var('var'))
end)
it('supports default string', function()
feed(':let var = input("", "DEF1")<CR>')
feed('<CR>')
- eq('DEF1', meths.get_var('var'))
+ eq('DEF1', api.nvim_get_var('var'))
feed(':let var = input({"default": "DEF2"})<CR>')
feed('<CR>')
- eq('DEF2', meths.get_var('var'))
+ eq('DEF2', api.nvim_get_var('var'))
end)
it('errors out on invalid inputs', function()
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call input([])'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call input("", [])'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call input("", "", [])'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call input({"prompt": []})'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call input({"default": []})'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call input({"completion": []})'))
- eq('Vim(call):E5050: {opts} must be the only argument',
- exc_exec('call input({}, "default")'))
- eq('Vim(call):E118: Too many arguments for function: input',
- exc_exec('call input("prompt> ", "default", "file", "extra")'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call input([])'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call input("", [])'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call input("", "", [])'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call input({"prompt": []})'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call input({"default": []})'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call input({"completion": []})'))
+ eq('Vim(call):E5050: {opts} must be the only argument', exc_exec('call input({}, "default")'))
+ eq(
+ 'Vim(call):E118: Too many arguments for function: input',
+ exc_exec('call input("prompt> ", "default", "file", "extra")')
+ )
end)
it('supports highlighting', function()
command('nnoremap <expr> X input({"highlight": "RainBowParens"})[-1]')
@@ -245,9 +224,7 @@ describe('input()', function()
feed('(())')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{RBP1:(}{RBP2:()}{RBP1:)}^ |
]])
end)
@@ -294,9 +271,7 @@ describe('inputdialog()', function()
command('redraw!')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo}^ |
]])
end)
@@ -305,135 +280,119 @@ describe('inputdialog()', function()
feed([[:call inputdialog(1, 2)<CR>]])
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:1}2^ |
]])
feed('<BS>')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:1}^ |
]])
end)
it('allows unequal numeric values when using {opts} dictionary', function()
command('echohl Test')
- meths.set_var('opts', {prompt=1, default=2, cancelreturn=3})
+ api.nvim_set_var('opts', { prompt = 1, default = 2, cancelreturn = 3 })
feed([[:echo input(opts)<CR>]])
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:1}2^ |
]])
feed('<BS>')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:1}^ |
]])
feed('<Esc>')
screen:expect([[
^ |
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:3} |
]])
end)
it('works with redraw', function()
command('echohl Test')
- meths.set_var('opts', {prompt='Foo>', default='Bar'})
+ api.nvim_set_var('opts', { prompt = 'Foo>', default = 'Bar' })
feed([[:echo input(opts)<CR>]])
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo>}Bar^ |
]])
command('mode')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo>}Bar^ |
- ]], reset=true}
+ ]],
+ reset = true,
+ }
feed('<BS>')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo>}Ba^ |
]])
command('mode')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{T:Foo>}Ba^ |
- ]], reset=true}
+ ]],
+ reset = true,
+ }
end)
it('allows omitting everything with dictionary argument', function()
command('echohl Test')
feed(':echo inputdialog({})<CR>')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
^ |
]])
end)
it('supports completion', function()
feed(':let var = inputdialog({"completion": "customlist,CustomListCompl"})<CR>')
feed('<Tab><CR>')
- eq('FOO', meths.get_var('var'))
+ eq('FOO', api.nvim_get_var('var'))
end)
it('supports cancelreturn', function()
feed(':let var = inputdialog("", "", "CR1")<CR>')
feed('<Esc>')
- eq('CR1', meths.get_var('var'))
+ eq('CR1', api.nvim_get_var('var'))
feed(':let var = inputdialog({"cancelreturn": "BAR"})<CR>')
feed('<Esc>')
- eq('BAR', meths.get_var('var'))
+ eq('BAR', api.nvim_get_var('var'))
end)
it('supports default string', function()
feed(':let var = inputdialog("", "DEF1")<CR>')
feed('<CR>')
- eq('DEF1', meths.get_var('var'))
+ eq('DEF1', api.nvim_get_var('var'))
feed(':let var = inputdialog({"default": "DEF2"})<CR>')
feed('<CR>')
- eq('DEF2', meths.get_var('var'))
+ eq('DEF2', api.nvim_get_var('var'))
end)
it('errors out on invalid inputs', function()
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call inputdialog([])'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call inputdialog("", [])'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call inputdialog("", "", [])'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call inputdialog({"prompt": []})'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call inputdialog({"default": []})'))
- eq('Vim(call):E730: Using a List as a String',
- exc_exec('call inputdialog({"completion": []})'))
- eq('Vim(call):E5050: {opts} must be the only argument',
- exc_exec('call inputdialog({}, "default")'))
- eq('Vim(call):E118: Too many arguments for function: inputdialog',
- exc_exec('call inputdialog("prompt> ", "default", "file", "extra")'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog([])'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog("", [])'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog("", "", [])'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog({"prompt": []})'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog({"default": []})'))
+ eq('Vim(call):E730: Using a List as a String', exc_exec('call inputdialog({"completion": []})'))
+ eq(
+ 'Vim(call):E5050: {opts} must be the only argument',
+ exc_exec('call inputdialog({}, "default")')
+ )
+ eq(
+ 'Vim(call):E118: Too many arguments for function: inputdialog',
+ exc_exec('call inputdialog("prompt> ", "default", "file", "extra")')
+ )
end)
it('supports highlighting', function()
command('nnoremap <expr> X inputdialog({"highlight": "RainBowParens"})[-1]')
@@ -441,9 +400,7 @@ describe('inputdialog()', function()
feed('(())')
screen:expect([[
|
- {EOB:~ }|
- {EOB:~ }|
- {EOB:~ }|
+ {EOB:~ }|*3
{RBP1:(}{RBP2:()}{RBP1:)}^ |
]])
end)
@@ -452,84 +409,91 @@ end)
describe('confirm()', function()
-- oldtest: Test_confirm()
it('works', function()
- meths.set_option_value('more', false, {}) -- Avoid hit-enter prompt
- meths.set_option_value('laststatus', 2, {})
+ api.nvim_set_option_value('more', false, {}) -- Avoid hit-enter prompt
+ api.nvim_set_option_value('laststatus', 2, {})
-- screen:expect() calls are needed to avoid feeding input too early
- screen:expect({any = '%[No Name%]'})
+ screen:expect({ any = '%[No Name%]' })
- async_meths.command([[let a = confirm('Press O to proceed')]])
- screen:expect({any = '{CONFIRM:.+: }'})
+ async_meths.nvim_command([[let a = confirm('Press O to proceed')]])
+ screen:expect({ any = '{CONFIRM:.+: }' })
feed('o')
- screen:expect({any = '%[No Name%]'})
- eq(1, meths.get_var('a'))
+ screen:expect({ any = '%[No Name%]' })
+ eq(1, api.nvim_get_var('a'))
- async_meths.command([[let a = 'Are you sure?'->confirm("&Yes\n&No")]])
- screen:expect({any = '{CONFIRM:.+: }'})
+ async_meths.nvim_command([[let a = 'Are you sure?'->confirm("&Yes\n&No")]])
+ screen:expect({ any = '{CONFIRM:.+: }' })
feed('y')
- screen:expect({any = '%[No Name%]'})
- eq(1, meths.get_var('a'))
+ screen:expect({ any = '%[No Name%]' })
+ eq(1, api.nvim_get_var('a'))
- async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No")]])
- screen:expect({any = '{CONFIRM:.+: }'})
+ async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No")]])
+ screen:expect({ any = '{CONFIRM:.+: }' })
feed('n')
- screen:expect({any = '%[No Name%]'})
- eq(2, meths.get_var('a'))
+ screen:expect({ any = '%[No Name%]' })
+ eq(2, api.nvim_get_var('a'))
-- Not possible to match Vim's CTRL-C test here as CTRL-C always sets got_int in Nvim.
-- confirm() should return 0 when pressing ESC.
- async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No")]])
- screen:expect({any = '{CONFIRM:.+: }'})
+ async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No")]])
+ screen:expect({ any = '{CONFIRM:.+: }' })
feed('<Esc>')
- screen:expect({any = '%[No Name%]'})
- eq(0, meths.get_var('a'))
+ screen:expect({ any = '%[No Name%]' })
+ eq(0, api.nvim_get_var('a'))
-- Default choice is returned when pressing <CR>.
- async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No")]])
- screen:expect({any = '{CONFIRM:.+: }'})
+ async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No")]])
+ screen:expect({ any = '{CONFIRM:.+: }' })
feed('<CR>')
- screen:expect({any = '%[No Name%]'})
- eq(1, meths.get_var('a'))
+ screen:expect({ any = '%[No Name%]' })
+ eq(1, api.nvim_get_var('a'))
- async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No", 2)]])
- screen:expect({any = '{CONFIRM:.+: }'})
+ async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No", 2)]])
+ screen:expect({ any = '{CONFIRM:.+: }' })
feed('<CR>')
- screen:expect({any = '%[No Name%]'})
- eq(2, meths.get_var('a'))
+ screen:expect({ any = '%[No Name%]' })
+ eq(2, api.nvim_get_var('a'))
- async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No", 0)]])
- screen:expect({any = '{CONFIRM:.+: }'})
+ async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No", 0)]])
+ screen:expect({ any = '{CONFIRM:.+: }' })
feed('<CR>')
- screen:expect({any = '%[No Name%]'})
- eq(0, meths.get_var('a'))
+ screen:expect({ any = '%[No Name%]' })
+ eq(0, api.nvim_get_var('a'))
-- Test with the {type} 4th argument
- for _, type in ipairs({'Error', 'Question', 'Info', 'Warning', 'Generic'}) do
- async_meths.command(([[let a = confirm('Are you sure?', "&Yes\n&No", 1, '%s')]]):format(type))
- screen:expect({any = '{CONFIRM:.+: }'})
+ for _, type in ipairs({ 'Error', 'Question', 'Info', 'Warning', 'Generic' }) do
+ async_meths.nvim_command(
+ ([[let a = confirm('Are you sure?', "&Yes\n&No", 1, '%s')]]):format(type)
+ )
+ screen:expect({ any = '{CONFIRM:.+: }' })
feed('y')
- screen:expect({any = '%[No Name%]'})
- eq(1, meths.get_var('a'))
+ screen:expect({ any = '%[No Name%]' })
+ eq(1, api.nvim_get_var('a'))
end
- eq('Vim(call):E730: Using a List as a String',
- pcall_err(command, 'call confirm([])'))
- eq('Vim(call):E730: Using a List as a String',
- pcall_err(command, 'call confirm("Are you sure?", [])'))
- eq('Vim(call):E745: Using a List as a Number',
- pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", [])'))
- eq('Vim(call):E730: Using a List as a String',
- pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", 0, [])'))
+ eq('Vim(call):E730: Using a List as a String', pcall_err(command, 'call confirm([])'))
+ eq(
+ 'Vim(call):E730: Using a List as a String',
+ pcall_err(command, 'call confirm("Are you sure?", [])')
+ )
+ eq(
+ 'Vim(call):E745: Using a List as a Number',
+ pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", [])')
+ )
+ eq(
+ 'Vim(call):E730: Using a List as a String',
+ pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", 0, [])')
+ )
end)
- it("shows dialog even if :silent #8788", function()
+ it('shows dialog even if :silent #8788', function()
command("autocmd BufNewFile * call confirm('test')")
local function check_and_clear(edit_line)
screen:expect([[
|
{SEP: }|
- ]]..edit_line..[[
+ ]] .. edit_line .. [[
{CONFIRM:test} |
{CONFIRM:[O]k: }^ |
]])
@@ -556,7 +520,7 @@ describe('confirm()', function()
feed(':call nvim_command("edit x")<cr>')
check_and_clear(':call nvim_command("edit |\n')
- async_meths.command('edit x')
+ async_meths.nvim_command('edit x')
check_and_clear(' |\n')
end)
end)
diff --git a/test/functional/vimscript/json_functions_spec.lua b/test/functional/vimscript/json_functions_spec.lua
index a9dab8431c..ef0359263e 100644
--- a/test/functional/vimscript/json_functions_spec.lua
+++ b/test/functional/vimscript/json_functions_spec.lua
@@ -1,13 +1,13 @@
local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
-local funcs = helpers.funcs
-local meths = helpers.meths
+local fn = helpers.fn
+local api = helpers.api
local eq = helpers.eq
local eval = helpers.eval
local command = helpers.command
local exc_exec = helpers.exc_exec
local pcall_err = helpers.pcall_err
-local NIL = helpers.NIL
+local NIL = vim.NIL
local source = helpers.source
describe('json_decode() function', function()
@@ -59,467 +59,577 @@ describe('json_decode() function', function()
before_each(restart)
local speq = function(expected, actual_expr)
- eq(1, funcs.EvalEq(expected, actual_expr))
+ eq(1, fn.EvalEq(expected, actual_expr))
end
it('accepts readfile()-style list', function()
- eq({Test=1}, funcs.json_decode({
- '{',
- '\t"Test": 1',
- '}',
- }))
+ eq(
+ { Test = 1 },
+ fn.json_decode({
+ '{',
+ '\t"Test": 1',
+ '}',
+ })
+ )
end)
it('accepts strings with newlines', function()
- eq({Test=1}, funcs.json_decode([[
+ eq(
+ { Test = 1 },
+ fn.json_decode([[
{
"Test": 1
}
- ]]))
+ ]])
+ )
end)
it('parses null, true, false', function()
- eq(NIL, funcs.json_decode('null'))
- eq(true, funcs.json_decode('true'))
- eq(false, funcs.json_decode('false'))
+ eq(NIL, fn.json_decode('null'))
+ eq(true, fn.json_decode('true'))
+ eq(false, fn.json_decode('false'))
end)
it('fails to parse incomplete null, true, false', function()
- eq('Vim(call):E474: Expected null: n',
- exc_exec('call json_decode("n")'))
- eq('Vim(call):E474: Expected null: nu',
- exc_exec('call json_decode("nu")'))
- eq('Vim(call):E474: Expected null: nul',
- exc_exec('call json_decode("nul")'))
- eq('Vim(call):E474: Expected null: nul\n\t',
- exc_exec('call json_decode("nul\\n\\t")'))
-
- eq('Vim(call):E474: Expected true: t',
- exc_exec('call json_decode("t")'))
- eq('Vim(call):E474: Expected true: tr',
- exc_exec('call json_decode("tr")'))
- eq('Vim(call):E474: Expected true: tru',
- exc_exec('call json_decode("tru")'))
- eq('Vim(call):E474: Expected true: tru\t\n',
- exc_exec('call json_decode("tru\\t\\n")'))
-
- eq('Vim(call):E474: Expected false: f',
- exc_exec('call json_decode("f")'))
- eq('Vim(call):E474: Expected false: fa',
- exc_exec('call json_decode("fa")'))
- eq('Vim(call):E474: Expected false: fal',
- exc_exec('call json_decode("fal")'))
- eq('Vim(call):E474: Expected false: fal <',
- exc_exec('call json_decode(" fal <")'))
- eq('Vim(call):E474: Expected false: fals',
- exc_exec('call json_decode("fals")'))
+ eq('Vim(call):E474: Expected null: n', exc_exec('call json_decode("n")'))
+ eq('Vim(call):E474: Expected null: nu', exc_exec('call json_decode("nu")'))
+ eq('Vim(call):E474: Expected null: nul', exc_exec('call json_decode("nul")'))
+ eq('Vim(call):E474: Expected null: nul\n\t', exc_exec('call json_decode("nul\\n\\t")'))
+
+ eq('Vim(call):E474: Expected true: t', exc_exec('call json_decode("t")'))
+ eq('Vim(call):E474: Expected true: tr', exc_exec('call json_decode("tr")'))
+ eq('Vim(call):E474: Expected true: tru', exc_exec('call json_decode("tru")'))
+ eq('Vim(call):E474: Expected true: tru\t\n', exc_exec('call json_decode("tru\\t\\n")'))
+
+ eq('Vim(call):E474: Expected false: f', exc_exec('call json_decode("f")'))
+ eq('Vim(call):E474: Expected false: fa', exc_exec('call json_decode("fa")'))
+ eq('Vim(call):E474: Expected false: fal', exc_exec('call json_decode("fal")'))
+ eq('Vim(call):E474: Expected false: fal <', exc_exec('call json_decode(" fal <")'))
+ eq('Vim(call):E474: Expected false: fals', exc_exec('call json_decode("fals")'))
end)
it('parses integer numbers', function()
- eq(100000, funcs.json_decode('100000'))
- eq(-100000, funcs.json_decode('-100000'))
- eq(100000, funcs.json_decode(' 100000 '))
- eq(-100000, funcs.json_decode(' -100000 '))
- eq(0, funcs.json_decode('0'))
- eq(0, funcs.json_decode('-0'))
+ eq(100000, fn.json_decode('100000'))
+ eq(-100000, fn.json_decode('-100000'))
+ eq(100000, fn.json_decode(' 100000 '))
+ eq(-100000, fn.json_decode(' -100000 '))
+ eq(0, fn.json_decode('0'))
+ eq(0, fn.json_decode('-0'))
end)
it('fails to parse +numbers and .number', function()
- eq('Vim(call):E474: Unidentified byte: +1000',
- exc_exec('call json_decode("+1000")'))
- eq('Vim(call):E474: Unidentified byte: .1000',
- exc_exec('call json_decode(".1000")'))
+ eq('Vim(call):E474: Unidentified byte: +1000', exc_exec('call json_decode("+1000")'))
+ eq('Vim(call):E474: Unidentified byte: .1000', exc_exec('call json_decode(".1000")'))
end)
it('fails to parse numbers with leading zeroes', function()
- eq('Vim(call):E474: Leading zeroes are not allowed: 00.1',
- exc_exec('call json_decode("00.1")'))
- eq('Vim(call):E474: Leading zeroes are not allowed: 01',
- exc_exec('call json_decode("01")'))
- eq('Vim(call):E474: Leading zeroes are not allowed: -01',
- exc_exec('call json_decode("-01")'))
- eq('Vim(call):E474: Leading zeroes are not allowed: -001.0',
- exc_exec('call json_decode("-001.0")'))
+ eq('Vim(call):E474: Leading zeroes are not allowed: 00.1', exc_exec('call json_decode("00.1")'))
+ eq('Vim(call):E474: Leading zeroes are not allowed: 01', exc_exec('call json_decode("01")'))
+ eq('Vim(call):E474: Leading zeroes are not allowed: -01', exc_exec('call json_decode("-01")'))
+ eq(
+ 'Vim(call):E474: Leading zeroes are not allowed: -001.0',
+ exc_exec('call json_decode("-001.0")')
+ )
end)
it('fails to parse incomplete numbers', function()
- eq('Vim(call):E474: Missing number after minus sign: -.1',
- exc_exec('call json_decode("-.1")'))
- eq('Vim(call):E474: Missing number after minus sign: -',
- exc_exec('call json_decode("-")'))
- eq('Vim(call):E474: Missing number after decimal dot: -1.',
- exc_exec('call json_decode("-1.")'))
- eq('Vim(call):E474: Missing number after decimal dot: 0.',
- exc_exec('call json_decode("0.")'))
- eq('Vim(call):E474: Missing exponent: 0.0e',
- exc_exec('call json_decode("0.0e")'))
- eq('Vim(call):E474: Missing exponent: 0.0e+',
- exc_exec('call json_decode("0.0e+")'))
- eq('Vim(call):E474: Missing exponent: 0.0e-',
- exc_exec('call json_decode("0.0e-")'))
- eq('Vim(call):E474: Missing exponent: 0.0e-',
- exc_exec('call json_decode("0.0e-")'))
- eq('Vim(call):E474: Missing number after decimal dot: 1.e5',
- exc_exec('call json_decode("1.e5")'))
- eq('Vim(call):E474: Missing number after decimal dot: 1.e+5',
- exc_exec('call json_decode("1.e+5")'))
- eq('Vim(call):E474: Missing number after decimal dot: 1.e+',
- exc_exec('call json_decode("1.e+")'))
+ eq('Vim(call):E474: Missing number after minus sign: -.1', exc_exec('call json_decode("-.1")'))
+ eq('Vim(call):E474: Missing number after minus sign: -', exc_exec('call json_decode("-")'))
+ eq('Vim(call):E474: Missing number after decimal dot: -1.', exc_exec('call json_decode("-1.")'))
+ eq('Vim(call):E474: Missing number after decimal dot: 0.', exc_exec('call json_decode("0.")'))
+ eq('Vim(call):E474: Missing exponent: 0.0e', exc_exec('call json_decode("0.0e")'))
+ eq('Vim(call):E474: Missing exponent: 0.0e+', exc_exec('call json_decode("0.0e+")'))
+ eq('Vim(call):E474: Missing exponent: 0.0e-', exc_exec('call json_decode("0.0e-")'))
+ eq('Vim(call):E474: Missing exponent: 0.0e-', exc_exec('call json_decode("0.0e-")'))
+ eq(
+ 'Vim(call):E474: Missing number after decimal dot: 1.e5',
+ exc_exec('call json_decode("1.e5")')
+ )
+ eq(
+ 'Vim(call):E474: Missing number after decimal dot: 1.e+5',
+ exc_exec('call json_decode("1.e+5")')
+ )
+ eq(
+ 'Vim(call):E474: Missing number after decimal dot: 1.e+',
+ exc_exec('call json_decode("1.e+")')
+ )
end)
it('parses floating-point numbers', function()
-- Also test method call (->) syntax
eq('100000.0', eval('"100000.0"->json_decode()->string()'))
- eq(100000.5, funcs.json_decode('100000.5'))
- eq(-100000.5, funcs.json_decode('-100000.5'))
- eq(-100000.5e50, funcs.json_decode('-100000.5e50'))
- eq(100000.5e50, funcs.json_decode('100000.5e50'))
- eq(100000.5e50, funcs.json_decode('100000.5e+50'))
- eq(-100000.5e-50, funcs.json_decode('-100000.5e-50'))
- eq(100000.5e-50, funcs.json_decode('100000.5e-50'))
- eq(100000e-50, funcs.json_decode('100000e-50'))
- eq(0.5, funcs.json_decode('0.5'))
- eq(0.005, funcs.json_decode('0.005'))
- eq(0.005, funcs.json_decode('0.00500'))
- eq(0.5, funcs.json_decode('0.00500e+002'))
- eq(0.00005, funcs.json_decode('0.00500e-002'))
-
- eq(-0.0, funcs.json_decode('-0.0'))
- eq(-0.0, funcs.json_decode('-0.0e0'))
- eq(-0.0, funcs.json_decode('-0.0e+0'))
- eq(-0.0, funcs.json_decode('-0.0e-0'))
- eq(-0.0, funcs.json_decode('-0e-0'))
- eq(-0.0, funcs.json_decode('-0e-2'))
- eq(-0.0, funcs.json_decode('-0e+2'))
-
- eq(0.0, funcs.json_decode('0.0'))
- eq(0.0, funcs.json_decode('0.0e0'))
- eq(0.0, funcs.json_decode('0.0e+0'))
- eq(0.0, funcs.json_decode('0.0e-0'))
- eq(0.0, funcs.json_decode('0e-0'))
- eq(0.0, funcs.json_decode('0e-2'))
- eq(0.0, funcs.json_decode('0e+2'))
+ eq(100000.5, fn.json_decode('100000.5'))
+ eq(-100000.5, fn.json_decode('-100000.5'))
+ eq(-100000.5e50, fn.json_decode('-100000.5e50'))
+ eq(100000.5e50, fn.json_decode('100000.5e50'))
+ eq(100000.5e50, fn.json_decode('100000.5e+50'))
+ eq(-100000.5e-50, fn.json_decode('-100000.5e-50'))
+ eq(100000.5e-50, fn.json_decode('100000.5e-50'))
+ eq(100000e-50, fn.json_decode('100000e-50'))
+ eq(0.5, fn.json_decode('0.5'))
+ eq(0.005, fn.json_decode('0.005'))
+ eq(0.005, fn.json_decode('0.00500'))
+ eq(0.5, fn.json_decode('0.00500e+002'))
+ eq(0.00005, fn.json_decode('0.00500e-002'))
+
+ eq(-0.0, fn.json_decode('-0.0'))
+ eq(-0.0, fn.json_decode('-0.0e0'))
+ eq(-0.0, fn.json_decode('-0.0e+0'))
+ eq(-0.0, fn.json_decode('-0.0e-0'))
+ eq(-0.0, fn.json_decode('-0e-0'))
+ eq(-0.0, fn.json_decode('-0e-2'))
+ eq(-0.0, fn.json_decode('-0e+2'))
+
+ eq(0.0, fn.json_decode('0.0'))
+ eq(0.0, fn.json_decode('0.0e0'))
+ eq(0.0, fn.json_decode('0.0e+0'))
+ eq(0.0, fn.json_decode('0.0e-0'))
+ eq(0.0, fn.json_decode('0e-0'))
+ eq(0.0, fn.json_decode('0e-2'))
+ eq(0.0, fn.json_decode('0e+2'))
end)
it('fails to parse numbers with spaces inside', function()
- eq('Vim(call):E474: Missing number after minus sign: - 1000',
- exc_exec('call json_decode("- 1000")'))
- eq('Vim(call):E474: Missing number after decimal dot: 0. ',
- exc_exec('call json_decode("0. ")'))
- eq('Vim(call):E474: Missing number after decimal dot: 0. 0',
- exc_exec('call json_decode("0. 0")'))
- eq('Vim(call):E474: Missing exponent: 0.0e 1',
- exc_exec('call json_decode("0.0e 1")'))
- eq('Vim(call):E474: Missing exponent: 0.0e+ 1',
- exc_exec('call json_decode("0.0e+ 1")'))
- eq('Vim(call):E474: Missing exponent: 0.0e- 1',
- exc_exec('call json_decode("0.0e- 1")'))
+ eq(
+ 'Vim(call):E474: Missing number after minus sign: - 1000',
+ exc_exec('call json_decode("- 1000")')
+ )
+ eq('Vim(call):E474: Missing number after decimal dot: 0. ', exc_exec('call json_decode("0. ")'))
+ eq(
+ 'Vim(call):E474: Missing number after decimal dot: 0. 0',
+ exc_exec('call json_decode("0. 0")')
+ )
+ eq('Vim(call):E474: Missing exponent: 0.0e 1', exc_exec('call json_decode("0.0e 1")'))
+ eq('Vim(call):E474: Missing exponent: 0.0e+ 1', exc_exec('call json_decode("0.0e+ 1")'))
+ eq('Vim(call):E474: Missing exponent: 0.0e- 1', exc_exec('call json_decode("0.0e- 1")'))
end)
it('fails to parse "," and ":"', function()
- eq('Vim(call):E474: Comma not inside container: , ',
- exc_exec('call json_decode(" , ")'))
- eq('Vim(call):E474: Colon not inside container: : ',
- exc_exec('call json_decode(" : ")'))
+ eq('Vim(call):E474: Comma not inside container: , ', exc_exec('call json_decode(" , ")'))
+ eq('Vim(call):E474: Colon not inside container: : ', exc_exec('call json_decode(" : ")'))
end)
it('parses empty containers', function()
- eq({}, funcs.json_decode('[]'))
+ eq({}, fn.json_decode('[]'))
eq('[]', eval('string(json_decode("[]"))'))
end)
it('fails to parse "[" and "{"', function()
- eq('Vim(call):E474: Unexpected end of input: {',
- exc_exec('call json_decode("{")'))
- eq('Vim(call):E474: Unexpected end of input: [',
- exc_exec('call json_decode("[")'))
+ eq('Vim(call):E474: Unexpected end of input: {', exc_exec('call json_decode("{")'))
+ eq('Vim(call):E474: Unexpected end of input: [', exc_exec('call json_decode("[")'))
end)
it('fails to parse "}" and "]"', function()
- eq('Vim(call):E474: No container to close: ]',
- exc_exec('call json_decode("]")'))
- eq('Vim(call):E474: No container to close: }',
- exc_exec('call json_decode("}")'))
+ eq('Vim(call):E474: No container to close: ]', exc_exec('call json_decode("]")'))
+ eq('Vim(call):E474: No container to close: }', exc_exec('call json_decode("}")'))
end)
- it('fails to parse containers which are closed by different brackets',
- function()
- eq('Vim(call):E474: Closing dictionary with square bracket: ]',
- exc_exec('call json_decode("{]")'))
- eq('Vim(call):E474: Closing list with curly bracket: }',
- exc_exec('call json_decode("[}")'))
+ it('fails to parse containers which are closed by different brackets', function()
+ eq(
+ 'Vim(call):E474: Closing dictionary with square bracket: ]',
+ exc_exec('call json_decode("{]")')
+ )
+ eq('Vim(call):E474: Closing list with curly bracket: }', exc_exec('call json_decode("[}")'))
end)
it('fails to parse concat inside container', function()
- eq('Vim(call):E474: Expected comma before list item: []]',
- exc_exec('call json_decode("[[][]]")'))
- eq('Vim(call):E474: Expected comma before list item: {}]',
- exc_exec('call json_decode("[{}{}]")'))
- eq('Vim(call):E474: Expected comma before list item: ]',
- exc_exec('call json_decode("[1 2]")'))
- eq('Vim(call):E474: Expected comma before dictionary key: ": 4}',
- exc_exec('call json_decode("{\\"1\\": 2 \\"3\\": 4}")'))
- eq('Vim(call):E474: Expected colon before dictionary value: , "3" 4}',
- exc_exec('call json_decode("{\\"1\\" 2, \\"3\\" 4}")'))
+ eq(
+ 'Vim(call):E474: Expected comma before list item: []]',
+ exc_exec('call json_decode("[[][]]")')
+ )
+ eq(
+ 'Vim(call):E474: Expected comma before list item: {}]',
+ exc_exec('call json_decode("[{}{}]")')
+ )
+ eq('Vim(call):E474: Expected comma before list item: ]', exc_exec('call json_decode("[1 2]")'))
+ eq(
+ 'Vim(call):E474: Expected comma before dictionary key: ": 4}',
+ exc_exec('call json_decode("{\\"1\\": 2 \\"3\\": 4}")')
+ )
+ eq(
+ 'Vim(call):E474: Expected colon before dictionary value: , "3" 4}',
+ exc_exec('call json_decode("{\\"1\\" 2, \\"3\\" 4}")')
+ )
end)
it('fails to parse containers with leading comma or colon', function()
- eq('Vim(call):E474: Leading comma: ,}',
- exc_exec('call json_decode("{,}")'))
- eq('Vim(call):E474: Leading comma: ,]',
- exc_exec('call json_decode("[,]")'))
- eq('Vim(call):E474: Using colon not in dictionary: :]',
- exc_exec('call json_decode("[:]")'))
- eq('Vim(call):E474: Unexpected colon: :}',
- exc_exec('call json_decode("{:}")'))
+ eq('Vim(call):E474: Leading comma: ,}', exc_exec('call json_decode("{,}")'))
+ eq('Vim(call):E474: Leading comma: ,]', exc_exec('call json_decode("[,]")'))
+ eq('Vim(call):E474: Using colon not in dictionary: :]', exc_exec('call json_decode("[:]")'))
+ eq('Vim(call):E474: Unexpected colon: :}', exc_exec('call json_decode("{:}")'))
end)
it('fails to parse containers with trailing comma', function()
- eq('Vim(call):E474: Trailing comma: ]',
- exc_exec('call json_decode("[1,]")'))
- eq('Vim(call):E474: Trailing comma: }',
- exc_exec('call json_decode("{\\"1\\": 2,}")'))
+ eq('Vim(call):E474: Trailing comma: ]', exc_exec('call json_decode("[1,]")'))
+ eq('Vim(call):E474: Trailing comma: }', exc_exec('call json_decode("{\\"1\\": 2,}")'))
end)
it('fails to parse dictionaries with missing value', function()
- eq('Vim(call):E474: Expected value after colon: }',
- exc_exec('call json_decode("{\\"1\\":}")'))
- eq('Vim(call):E474: Expected value: }',
- exc_exec('call json_decode("{\\"1\\"}")'))
+ eq('Vim(call):E474: Expected value after colon: }', exc_exec('call json_decode("{\\"1\\":}")'))
+ eq('Vim(call):E474: Expected value: }', exc_exec('call json_decode("{\\"1\\"}")'))
end)
it('fails to parse containers with two commas or colons', function()
- eq('Vim(call):E474: Duplicate comma: , "2": 2}',
- exc_exec('call json_decode("{\\"1\\": 1,, \\"2\\": 2}")'))
- eq('Vim(call):E474: Duplicate comma: , "2", 2]',
- exc_exec('call json_decode("[\\"1\\", 1,, \\"2\\", 2]")'))
- eq('Vim(call):E474: Duplicate colon: : 2}',
- exc_exec('call json_decode("{\\"1\\": 1, \\"2\\":: 2}")'))
- eq('Vim(call):E474: Comma after colon: , 2}',
- exc_exec('call json_decode("{\\"1\\": 1, \\"2\\":, 2}")'))
- eq('Vim(call):E474: Unexpected colon: : "2": 2}',
- exc_exec('call json_decode("{\\"1\\": 1,: \\"2\\": 2}")'))
- eq('Vim(call):E474: Unexpected colon: :, "2": 2}',
- exc_exec('call json_decode("{\\"1\\": 1:, \\"2\\": 2}")'))
+ eq(
+ 'Vim(call):E474: Duplicate comma: , "2": 2}',
+ exc_exec('call json_decode("{\\"1\\": 1,, \\"2\\": 2}")')
+ )
+ eq(
+ 'Vim(call):E474: Duplicate comma: , "2", 2]',
+ exc_exec('call json_decode("[\\"1\\", 1,, \\"2\\", 2]")')
+ )
+ eq(
+ 'Vim(call):E474: Duplicate colon: : 2}',
+ exc_exec('call json_decode("{\\"1\\": 1, \\"2\\":: 2}")')
+ )
+ eq(
+ 'Vim(call):E474: Comma after colon: , 2}',
+ exc_exec('call json_decode("{\\"1\\": 1, \\"2\\":, 2}")')
+ )
+ eq(
+ 'Vim(call):E474: Unexpected colon: : "2": 2}',
+ exc_exec('call json_decode("{\\"1\\": 1,: \\"2\\": 2}")')
+ )
+ eq(
+ 'Vim(call):E474: Unexpected colon: :, "2": 2}',
+ exc_exec('call json_decode("{\\"1\\": 1:, \\"2\\": 2}")')
+ )
end)
it('fails to parse concat of two values', function()
- eq('Vim(call):E474: Trailing characters: []',
- exc_exec('call json_decode("{}[]")'))
+ eq('Vim(call):E474: Trailing characters: []', exc_exec('call json_decode("{}[]")'))
end)
it('parses containers', function()
- eq({1}, funcs.json_decode('[1]'))
- eq({NIL, 1}, funcs.json_decode('[null, 1]'))
- eq({['1']=2}, funcs.json_decode('{"1": 2}'))
- eq({['1']=2, ['3']={{['4']={['5']={{}, 1}}}}},
- funcs.json_decode('{"1": 2, "3": [{"4": {"5": [[], 1]}}]}'))
+ eq({ 1 }, fn.json_decode('[1]'))
+ eq({ NIL, 1 }, fn.json_decode('[null, 1]'))
+ eq({ ['1'] = 2 }, fn.json_decode('{"1": 2}'))
+ eq(
+ { ['1'] = 2, ['3'] = { { ['4'] = { ['5'] = { {}, 1 } } } } },
+ fn.json_decode('{"1": 2, "3": [{"4": {"5": [[], 1]}}]}')
+ )
end)
it('fails to parse incomplete strings', function()
- eq('Vim(call):E474: Expected string end: \t"',
- exc_exec('call json_decode("\\t\\"")'))
- eq('Vim(call):E474: Expected string end: \t"abc',
- exc_exec('call json_decode("\\t\\"abc")'))
- eq('Vim(call):E474: Unfinished escape sequence: \t"abc\\',
- exc_exec('call json_decode("\\t\\"abc\\\\")'))
- eq('Vim(call):E474: Unfinished unicode escape sequence: \t"abc\\u',
- exc_exec('call json_decode("\\t\\"abc\\\\u")'))
- eq('Vim(call):E474: Unfinished unicode escape sequence: \t"abc\\u0',
- exc_exec('call json_decode("\\t\\"abc\\\\u0")'))
- eq('Vim(call):E474: Unfinished unicode escape sequence: \t"abc\\u00',
- exc_exec('call json_decode("\\t\\"abc\\\\u00")'))
- eq('Vim(call):E474: Unfinished unicode escape sequence: \t"abc\\u000',
- exc_exec('call json_decode("\\t\\"abc\\\\u000")'))
- eq('Vim(call):E474: Expected four hex digits after \\u: \\u" ',
- exc_exec('call json_decode("\\t\\"abc\\\\u\\" ")'))
- eq('Vim(call):E474: Expected four hex digits after \\u: \\u0" ',
- exc_exec('call json_decode("\\t\\"abc\\\\u0\\" ")'))
- eq('Vim(call):E474: Expected four hex digits after \\u: \\u00" ',
- exc_exec('call json_decode("\\t\\"abc\\\\u00\\" ")'))
- eq('Vim(call):E474: Expected four hex digits after \\u: \\u000" ',
- exc_exec('call json_decode("\\t\\"abc\\\\u000\\" ")'))
- eq('Vim(call):E474: Expected string end: \t"abc\\u0000',
- exc_exec('call json_decode("\\t\\"abc\\\\u0000")'))
+ eq('Vim(call):E474: Expected string end: \t"', exc_exec('call json_decode("\\t\\"")'))
+ eq('Vim(call):E474: Expected string end: \t"abc', exc_exec('call json_decode("\\t\\"abc")'))
+ eq(
+ 'Vim(call):E474: Unfinished escape sequence: \t"abc\\',
+ exc_exec('call json_decode("\\t\\"abc\\\\")')
+ )
+ eq(
+ 'Vim(call):E474: Unfinished unicode escape sequence: \t"abc\\u',
+ exc_exec('call json_decode("\\t\\"abc\\\\u")')
+ )
+ eq(
+ 'Vim(call):E474: Unfinished unicode escape sequence: \t"abc\\u0',
+ exc_exec('call json_decode("\\t\\"abc\\\\u0")')
+ )
+ eq(
+ 'Vim(call):E474: Unfinished unicode escape sequence: \t"abc\\u00',
+ exc_exec('call json_decode("\\t\\"abc\\\\u00")')
+ )
+ eq(
+ 'Vim(call):E474: Unfinished unicode escape sequence: \t"abc\\u000',
+ exc_exec('call json_decode("\\t\\"abc\\\\u000")')
+ )
+ eq(
+ 'Vim(call):E474: Expected four hex digits after \\u: \\u" ',
+ exc_exec('call json_decode("\\t\\"abc\\\\u\\" ")')
+ )
+ eq(
+ 'Vim(call):E474: Expected four hex digits after \\u: \\u0" ',
+ exc_exec('call json_decode("\\t\\"abc\\\\u0\\" ")')
+ )
+ eq(
+ 'Vim(call):E474: Expected four hex digits after \\u: \\u00" ',
+ exc_exec('call json_decode("\\t\\"abc\\\\u00\\" ")')
+ )
+ eq(
+ 'Vim(call):E474: Expected four hex digits after \\u: \\u000" ',
+ exc_exec('call json_decode("\\t\\"abc\\\\u000\\" ")')
+ )
+ eq(
+ 'Vim(call):E474: Expected string end: \t"abc\\u0000',
+ exc_exec('call json_decode("\\t\\"abc\\\\u0000")')
+ )
end)
it('fails to parse unknown escape sequences', function()
- eq('Vim(call):E474: Unknown escape sequence: \\a"',
- exc_exec('call json_decode("\\t\\"\\\\a\\"")'))
+ eq(
+ 'Vim(call):E474: Unknown escape sequence: \\a"',
+ exc_exec('call json_decode("\\t\\"\\\\a\\"")')
+ )
end)
it('parses strings properly', function()
- eq('\n', funcs.json_decode('"\\n"'))
- eq('', funcs.json_decode('""'))
- eq('\\/"\t\b\n\r\f', funcs.json_decode([["\\\/\"\t\b\n\r\f"]]))
- eq('/a', funcs.json_decode([["\/a"]]))
+ eq('\n', fn.json_decode('"\\n"'))
+ eq('', fn.json_decode('""'))
+ eq('\\/"\t\b\n\r\f', fn.json_decode([["\\\/\"\t\b\n\r\f"]]))
+ eq('/a', fn.json_decode([["\/a"]]))
-- Unicode characters: 2-byte, 3-byte, 4-byte
- eq({
- '«',
- 'ફ',
- '\240\144\128\128',
- }, funcs.json_decode({
- '[',
- '"«",',
- '"ફ",',
- '"\240\144\128\128"',
- ']',
- }))
+ eq(
+ {
+ '«',
+ 'ફ',
+ '\240\144\128\128',
+ },
+ fn.json_decode({
+ '[',
+ '"«",',
+ '"ફ",',
+ '"\240\144\128\128"',
+ ']',
+ })
+ )
end)
it('fails on strings with invalid bytes', function()
- eq('Vim(call):E474: Only UTF-8 strings allowed: \255"',
- exc_exec('call json_decode("\\t\\"\\xFF\\"")'))
- eq('Vim(call):E474: ASCII control characters cannot be present inside string: ',
- exc_exec('call json_decode(["\\"\\n\\""])'))
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \255"',
+ exc_exec('call json_decode("\\t\\"\\xFF\\"")')
+ )
+ eq(
+ 'Vim(call):E474: ASCII control characters cannot be present inside string: ',
+ exc_exec('call json_decode(["\\"\\n\\""])')
+ )
-- 0xC2 starts 2-byte unicode character
- eq('Vim(call):E474: Only UTF-8 strings allowed: \194"',
- exc_exec('call json_decode("\\t\\"\\xC2\\"")'))
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \194"',
+ exc_exec('call json_decode("\\t\\"\\xC2\\"")')
+ )
-- 0xE0 0xAA starts 3-byte unicode character
- eq('Vim(call):E474: Only UTF-8 strings allowed: \224"',
- exc_exec('call json_decode("\\t\\"\\xE0\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \224\170"',
- exc_exec('call json_decode("\\t\\"\\xE0\\xAA\\"")'))
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \224"',
+ exc_exec('call json_decode("\\t\\"\\xE0\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \224\170"',
+ exc_exec('call json_decode("\\t\\"\\xE0\\xAA\\"")')
+ )
-- 0xF0 0x90 0x80 starts 4-byte unicode character
- eq('Vim(call):E474: Only UTF-8 strings allowed: \240"',
- exc_exec('call json_decode("\\t\\"\\xF0\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \240\144"',
- exc_exec('call json_decode("\\t\\"\\xF0\\x90\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \240\144\128"',
- exc_exec('call json_decode("\\t\\"\\xF0\\x90\\x80\\"")'))
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \240"',
+ exc_exec('call json_decode("\\t\\"\\xF0\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \240\144"',
+ exc_exec('call json_decode("\\t\\"\\xF0\\x90\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \240\144\128"',
+ exc_exec('call json_decode("\\t\\"\\xF0\\x90\\x80\\"")')
+ )
-- 0xF9 0x80 0x80 0x80 starts 5-byte unicode character
- eq('Vim(call):E474: Only UTF-8 strings allowed: \249"',
- exc_exec('call json_decode("\\t\\"\\xF9\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \249\128"',
- exc_exec('call json_decode("\\t\\"\\xF9\\x80\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \249\128\128"',
- exc_exec('call json_decode("\\t\\"\\xF9\\x80\\x80\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \249\128\128\128"',
- exc_exec('call json_decode("\\t\\"\\xF9\\x80\\x80\\x80\\"")'))
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \249"',
+ exc_exec('call json_decode("\\t\\"\\xF9\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \249\128"',
+ exc_exec('call json_decode("\\t\\"\\xF9\\x80\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \249\128\128"',
+ exc_exec('call json_decode("\\t\\"\\xF9\\x80\\x80\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \249\128\128\128"',
+ exc_exec('call json_decode("\\t\\"\\xF9\\x80\\x80\\x80\\"")')
+ )
-- 0xFC 0x90 0x80 0x80 0x80 starts 6-byte unicode character
- eq('Vim(call):E474: Only UTF-8 strings allowed: \252"',
- exc_exec('call json_decode("\\t\\"\\xFC\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \252\144"',
- exc_exec('call json_decode("\\t\\"\\xFC\\x90\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \252\144\128"',
- exc_exec('call json_decode("\\t\\"\\xFC\\x90\\x80\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \252\144\128\128"',
- exc_exec('call json_decode("\\t\\"\\xFC\\x90\\x80\\x80\\"")'))
- eq('Vim(call):E474: Only UTF-8 strings allowed: \252\144\128\128\128"',
- exc_exec('call json_decode("\\t\\"\\xFC\\x90\\x80\\x80\\x80\\"")'))
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \252"',
+ exc_exec('call json_decode("\\t\\"\\xFC\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \252\144"',
+ exc_exec('call json_decode("\\t\\"\\xFC\\x90\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \252\144\128"',
+ exc_exec('call json_decode("\\t\\"\\xFC\\x90\\x80\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \252\144\128\128"',
+ exc_exec('call json_decode("\\t\\"\\xFC\\x90\\x80\\x80\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 strings allowed: \252\144\128\128\128"',
+ exc_exec('call json_decode("\\t\\"\\xFC\\x90\\x80\\x80\\x80\\"")')
+ )
-- Specification does not allow unquoted characters above 0x10FFFF
- eq('Vim(call):E474: Only UTF-8 code points up to U+10FFFF are allowed to appear unescaped: \249\128\128\128\128"',
- exc_exec('call json_decode("\\t\\"\\xF9\\x80\\x80\\x80\\x80\\"")'))
- eq('Vim(call):E474: Only UTF-8 code points up to U+10FFFF are allowed to appear unescaped: \252\144\128\128\128\128"',
- exc_exec('call json_decode("\\t\\"\\xFC\\x90\\x80\\x80\\x80\\x80\\"")'))
+ eq(
+ 'Vim(call):E474: Only UTF-8 code points up to U+10FFFF are allowed to appear unescaped: \249\128\128\128\128"',
+ exc_exec('call json_decode("\\t\\"\\xF9\\x80\\x80\\x80\\x80\\"")')
+ )
+ eq(
+ 'Vim(call):E474: Only UTF-8 code points up to U+10FFFF are allowed to appear unescaped: \252\144\128\128\128\128"',
+ exc_exec('call json_decode("\\t\\"\\xFC\\x90\\x80\\x80\\x80\\x80\\"")')
+ )
-- '"\249\128\128\128\128"',
-- '"\252\144\128\128\128\128"',
end)
it('parses surrogate pairs properly', function()
- eq('\240\144\128\128', funcs.json_decode('"\\uD800\\uDC00"'))
- eq('\237\160\128a\237\176\128', funcs.json_decode('"\\uD800a\\uDC00"'))
- eq('\237\160\128\t\237\176\128', funcs.json_decode('"\\uD800\\t\\uDC00"'))
+ eq('\240\144\128\128', fn.json_decode('"\\uD800\\uDC00"'))
+ eq('\237\160\128a\237\176\128', fn.json_decode('"\\uD800a\\uDC00"'))
+ eq('\237\160\128\t\237\176\128', fn.json_decode('"\\uD800\\t\\uDC00"'))
- eq('\237\160\128', funcs.json_decode('"\\uD800"'))
- eq('\237\160\128a', funcs.json_decode('"\\uD800a"'))
- eq('\237\160\128\t', funcs.json_decode('"\\uD800\\t"'))
+ eq('\237\160\128', fn.json_decode('"\\uD800"'))
+ eq('\237\160\128a', fn.json_decode('"\\uD800a"'))
+ eq('\237\160\128\t', fn.json_decode('"\\uD800\\t"'))
- eq('\237\176\128', funcs.json_decode('"\\uDC00"'))
- eq('\237\176\128a', funcs.json_decode('"\\uDC00a"'))
- eq('\237\176\128\t', funcs.json_decode('"\\uDC00\\t"'))
+ eq('\237\176\128', fn.json_decode('"\\uDC00"'))
+ eq('\237\176\128a', fn.json_decode('"\\uDC00a"'))
+ eq('\237\176\128\t', fn.json_decode('"\\uDC00\\t"'))
- eq('\237\176\128', funcs.json_decode('"\\uDC00"'))
- eq('a\237\176\128', funcs.json_decode('"a\\uDC00"'))
- eq('\t\237\176\128', funcs.json_decode('"\\t\\uDC00"'))
+ eq('\237\176\128', fn.json_decode('"\\uDC00"'))
+ eq('a\237\176\128', fn.json_decode('"a\\uDC00"'))
+ eq('\t\237\176\128', fn.json_decode('"\\t\\uDC00"'))
- eq('\237\160\128¬', funcs.json_decode('"\\uD800\\u00AC"'))
+ eq('\237\160\128¬', fn.json_decode('"\\uD800\\u00AC"'))
- eq('\237\160\128\237\160\128', funcs.json_decode('"\\uD800\\uD800"'))
+ eq('\237\160\128\237\160\128', fn.json_decode('"\\uD800\\uD800"'))
end)
local sp_decode_eq = function(expected, json)
- meths.set_var('__json', json)
+ api.nvim_set_var('__json', json)
speq(expected, 'json_decode(g:__json)')
command('unlet! g:__json')
end
it('parses strings with NUL properly', function()
- sp_decode_eq({_TYPE='string', _VAL={'\n'}}, '"\\u0000"')
- sp_decode_eq({_TYPE='string', _VAL={'\n', '\n'}}, '"\\u0000\\n\\u0000"')
- sp_decode_eq({_TYPE='string', _VAL={'\n«\n'}}, '"\\u0000\\u00AB\\u0000"')
+ sp_decode_eq({ _TYPE = 'string', _VAL = { '\n' } }, '"\\u0000"')
+ sp_decode_eq({ _TYPE = 'string', _VAL = { '\n', '\n' } }, '"\\u0000\\n\\u0000"')
+ sp_decode_eq({ _TYPE = 'string', _VAL = { '\n«\n' } }, '"\\u0000\\u00AB\\u0000"')
end)
it('parses dictionaries with duplicate keys to special maps', function()
- sp_decode_eq({_TYPE='map', _VAL={{'a', 1}, {'a', 2}}},
- '{"a": 1, "a": 2}')
- sp_decode_eq({_TYPE='map', _VAL={{'b', 3}, {'a', 1}, {'a', 2}}},
- '{"b": 3, "a": 1, "a": 2}')
- sp_decode_eq({_TYPE='map', _VAL={{'b', 3}, {'a', 1}, {'c', 4}, {'a', 2}}},
- '{"b": 3, "a": 1, "c": 4, "a": 2}')
- sp_decode_eq({_TYPE='map', _VAL={{'b', 3}, {'a', 1}, {'c', 4}, {'a', 2}, {'c', 4}}},
- '{"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}')
- sp_decode_eq({{_TYPE='map', _VAL={{'b', 3}, {'a', 1}, {'c', 4}, {'a', 2}, {'c', 4}}}},
- '[{"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}]')
- sp_decode_eq({{d={_TYPE='map', _VAL={{'b', 3}, {'a', 1}, {'c', 4}, {'a', 2}, {'c', 4}}}}},
- '[{"d": {"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}}]')
- sp_decode_eq({1, {d={_TYPE='map', _VAL={{'b', 3}, {'a', 1}, {'c', 4}, {'a', 2}, {'c', 4}}}}},
- '[1, {"d": {"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}}]')
- sp_decode_eq({1, {a={}, d={_TYPE='map', _VAL={{'b', 3}, {'a', 1}, {'c', 4}, {'a', 2}, {'c', 4}}}}},
- '[1, {"a": [], "d": {"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}}]')
- end)
-
- it('parses dictionaries with empty keys to special maps', function()
- sp_decode_eq({_TYPE='map', _VAL={{'', 4}}},
- '{"": 4}')
- sp_decode_eq({_TYPE='map', _VAL={{'b', 3}, {'a', 1}, {'c', 4}, {'d', 2}, {'', 4}}},
- '{"b": 3, "a": 1, "c": 4, "d": 2, "": 4}')
- sp_decode_eq({_TYPE='map', _VAL={{'', 3}, {'a', 1}, {'c', 4}, {'d', 2}, {'', 4}}},
- '{"": 3, "a": 1, "c": 4, "d": 2, "": 4}')
- sp_decode_eq({{_TYPE='map', _VAL={{'', 3}, {'a', 1}, {'c', 4}, {'d', 2}, {'', 4}}}},
- '[{"": 3, "a": 1, "c": 4, "d": 2, "": 4}]')
+ sp_decode_eq({ _TYPE = 'map', _VAL = { { 'a', 1 }, { 'a', 2 } } }, '{"a": 1, "a": 2}')
+ sp_decode_eq(
+ { _TYPE = 'map', _VAL = { { 'b', 3 }, { 'a', 1 }, { 'a', 2 } } },
+ '{"b": 3, "a": 1, "a": 2}'
+ )
+ sp_decode_eq(
+ { _TYPE = 'map', _VAL = { { 'b', 3 }, { 'a', 1 }, { 'c', 4 }, { 'a', 2 } } },
+ '{"b": 3, "a": 1, "c": 4, "a": 2}'
+ )
+ sp_decode_eq(
+ { _TYPE = 'map', _VAL = { { 'b', 3 }, { 'a', 1 }, { 'c', 4 }, { 'a', 2 }, { 'c', 4 } } },
+ '{"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}'
+ )
+ sp_decode_eq(
+ { { _TYPE = 'map', _VAL = { { 'b', 3 }, { 'a', 1 }, { 'c', 4 }, { 'a', 2 }, { 'c', 4 } } } },
+ '[{"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}]'
+ )
+ sp_decode_eq({
+ {
+ d = {
+ _TYPE = 'map',
+ _VAL = { { 'b', 3 }, { 'a', 1 }, { 'c', 4 }, { 'a', 2 }, { 'c', 4 } },
+ },
+ },
+ }, '[{"d": {"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}}]')
+ sp_decode_eq({
+ 1,
+ {
+ d = {
+ _TYPE = 'map',
+ _VAL = { { 'b', 3 }, { 'a', 1 }, { 'c', 4 }, { 'a', 2 }, { 'c', 4 } },
+ },
+ },
+ }, '[1, {"d": {"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}}]')
+ sp_decode_eq({
+ 1,
+ {
+ a = {},
+ d = {
+ _TYPE = 'map',
+ _VAL = {
+ { 'b', 3 },
+ { 'a', 1 },
+ { 'c', 4 },
+ { 'a', 2 },
+ {
+ 'c',
+ 4,
+ },
+ },
+ },
+ },
+ }, '[1, {"a": [], "d": {"b": 3, "a": 1, "c": 4, "a": 2, "c": 4}}]')
+ sp_decode_eq(
+ { _TYPE = 'map', _VAL = { { '', 3 }, { 'a', 1 }, { 'c', 4 }, { 'd', 2 }, { '', 4 } } },
+ '{"": 3, "a": 1, "c": 4, "d": 2, "": 4}'
+ )
+ sp_decode_eq(
+ { { _TYPE = 'map', _VAL = { { '', 3 }, { 'a', 1 }, { 'c', 4 }, { 'd', 2 }, { '', 4 } } } },
+ '[{"": 3, "a": 1, "c": 4, "d": 2, "": 4}]'
+ )
+ end)
+
+ it('parses dictionaries with empty keys', function()
+ eq({ [''] = 4 }, fn.json_decode('{"": 4}'))
+ eq(
+ { b = 3, a = 1, c = 4, d = 2, [''] = 4 },
+ fn.json_decode('{"b": 3, "a": 1, "c": 4, "d": 2, "": 4}')
+ )
end)
it('parses dictionaries with keys with NUL bytes to special maps', function()
- sp_decode_eq({_TYPE='map', _VAL={{{_TYPE='string', _VAL={'a\n', 'b'}}, 4}}},
- '{"a\\u0000\\nb": 4}')
- sp_decode_eq({_TYPE='map', _VAL={{{_TYPE='string', _VAL={'a\n', 'b', ''}}, 4}}},
- '{"a\\u0000\\nb\\n": 4}')
- sp_decode_eq({_TYPE='map', _VAL={{'b', 3}, {'a', 1}, {'c', 4}, {'d', 2}, {{_TYPE='string', _VAL={'\n'}}, 4}}},
- '{"b": 3, "a": 1, "c": 4, "d": 2, "\\u0000": 4}')
+ sp_decode_eq(
+ { _TYPE = 'map', _VAL = { { { _TYPE = 'string', _VAL = { 'a\n', 'b' } }, 4 } } },
+ '{"a\\u0000\\nb": 4}'
+ )
+ sp_decode_eq(
+ { _TYPE = 'map', _VAL = { { { _TYPE = 'string', _VAL = { 'a\n', 'b', '' } }, 4 } } },
+ '{"a\\u0000\\nb\\n": 4}'
+ )
+ sp_decode_eq({
+ _TYPE = 'map',
+ _VAL = {
+ { 'b', 3 },
+ { 'a', 1 },
+ { 'c', 4 },
+ { 'd', 2 },
+ {
+ { _TYPE = 'string', _VAL = { '\n' } },
+ 4,
+ },
+ },
+ }, '{"b": 3, "a": 1, "c": 4, "d": 2, "\\u0000": 4}')
end)
it('parses U+00C3 correctly', function()
- eq('\195\131', funcs.json_decode('"\195\131"'))
+ eq('\195\131', fn.json_decode('"\195\131"'))
end)
it('fails to parse empty string', function()
- eq('Vim(call):E474: Attempt to decode a blank string',
- exc_exec('call json_decode("")'))
- eq('Vim(call):E474: Attempt to decode a blank string',
- exc_exec('call json_decode([])'))
- eq('Vim(call):E474: Attempt to decode a blank string',
- exc_exec('call json_decode([""])'))
- eq('Vim(call):E474: Attempt to decode a blank string',
- exc_exec('call json_decode(" ")'))
- eq('Vim(call):E474: Attempt to decode a blank string',
- exc_exec('call json_decode("\\t")'))
- eq('Vim(call):E474: Attempt to decode a blank string',
- exc_exec('call json_decode("\\n")'))
- eq('Vim(call):E474: Attempt to decode a blank string',
- exc_exec('call json_decode(" \\t\\n \\n\\t\\t \\n\\t\\n \\n \\t\\n\\t ")'))
+ eq('Vim(call):E474: Attempt to decode a blank string', exc_exec('call json_decode("")'))
+ eq('Vim(call):E474: Attempt to decode a blank string', exc_exec('call json_decode([])'))
+ eq('Vim(call):E474: Attempt to decode a blank string', exc_exec('call json_decode([""])'))
+ eq('Vim(call):E474: Attempt to decode a blank string', exc_exec('call json_decode(" ")'))
+ eq('Vim(call):E474: Attempt to decode a blank string', exc_exec('call json_decode("\\t")'))
+ eq('Vim(call):E474: Attempt to decode a blank string', exc_exec('call json_decode("\\n")'))
+ eq(
+ 'Vim(call):E474: Attempt to decode a blank string',
+ exc_exec('call json_decode(" \\t\\n \\n\\t\\t \\n\\t\\n \\n \\t\\n\\t ")')
+ )
end)
it('accepts all spaces in every position where space may be put', function()
- local s = ' \t\n\r \t\r\n \n\t\r \n\r\t \r\t\n \r\n\t\t \n\r\t \r\n\t\n \r\t\n\r \t\r \n\t\r\n \n \t\r\n \r\t\n\t \r\n\t\r \n\r \t\n\r\t \r \t\n\r \n\t\r\t \n\r\t\n \r\n \t\r\n\t'
+ local s =
+ ' \t\n\r \t\r\n \n\t\r \n\r\t \r\t\n \r\n\t\t \n\r\t \r\n\t\n \r\t\n\r \t\r \n\t\r\n \n \t\r\n \r\t\n\t \r\n\t\r \n\r \t\n\r\t \r \t\n\r \n\t\r\t \n\r\t\n \r\n \t\r\n\t'
local str = ('%s{%s"key"%s:%s[%s"val"%s,%s"val2"%s]%s,%s"key2"%s:%s1%s}%s'):gsub('%%s', s)
- eq({key={'val', 'val2'}, key2=1}, funcs.json_decode(str))
+ eq({ key = { 'val', 'val2' }, key2 = 1 }, fn.json_decode(str))
end)
- it('does not overflow when writing error message about decoding ["", ""]',
- function()
- eq('Vim(call):E474: Attempt to decode a blank string',
- pcall_err(command, 'call json_decode(["", ""])'))
+ it('does not overflow when writing error message about decoding ["", ""]', function()
+ eq(
+ 'Vim(call):E474: Attempt to decode a blank string',
+ pcall_err(command, 'call json_decode(["", ""])')
+ )
end)
end)
@@ -530,12 +640,12 @@ describe('json_encode() function', function()
end)
it('dumps strings', function()
- eq('"Test"', funcs.json_encode('Test'))
- eq('""', funcs.json_encode(''))
- eq('"\\t"', funcs.json_encode('\t'))
- eq('"\\n"', funcs.json_encode('\n'))
- eq('"\\u001B"', funcs.json_encode('\27'))
- eq('"þÿþ"', funcs.json_encode('þÿþ'))
+ eq('"Test"', fn.json_encode('Test'))
+ eq('""', fn.json_encode(''))
+ eq('"\\t"', fn.json_encode('\t'))
+ eq('"\\n"', fn.json_encode('\n'))
+ eq('"\\u001B"', fn.json_encode('\27'))
+ eq('"þÿþ"', fn.json_encode('þÿþ'))
end)
it('dumps blobs', function()
@@ -544,43 +654,50 @@ describe('json_encode() function', function()
end)
it('dumps numbers', function()
- eq('0', funcs.json_encode(0))
- eq('10', funcs.json_encode(10))
- eq('-10', funcs.json_encode(-10))
+ eq('0', fn.json_encode(0))
+ eq('10', fn.json_encode(10))
+ eq('-10', fn.json_encode(-10))
end)
it('dumps floats', function()
-- Also test method call (->) syntax
eq('0.0', eval('0.0->json_encode()'))
- eq('10.5', funcs.json_encode(10.5))
- eq('-10.5', funcs.json_encode(-10.5))
- eq('-1.0e-5', funcs.json_encode(-1e-5))
+ eq('10.5', fn.json_encode(10.5))
+ eq('-10.5', fn.json_encode(-10.5))
+ eq('-1.0e-5', fn.json_encode(-1e-5))
eq('1.0e50', eval('1.0e50->json_encode()'))
end)
it('fails to dump NaN and infinite values', function()
- eq('Vim(call):E474: Unable to represent NaN value in JSON',
- exc_exec('call json_encode(str2float("nan"))'))
- eq('Vim(call):E474: Unable to represent infinity in JSON',
- exc_exec('call json_encode(str2float("inf"))'))
- eq('Vim(call):E474: Unable to represent infinity in JSON',
- exc_exec('call json_encode(-str2float("inf"))'))
+ eq(
+ 'Vim(call):E474: Unable to represent NaN value in JSON',
+ exc_exec('call json_encode(str2float("nan"))')
+ )
+ eq(
+ 'Vim(call):E474: Unable to represent infinity in JSON',
+ exc_exec('call json_encode(str2float("inf"))')
+ )
+ eq(
+ 'Vim(call):E474: Unable to represent infinity in JSON',
+ exc_exec('call json_encode(-str2float("inf"))')
+ )
end)
it('dumps lists', function()
- eq('[]', funcs.json_encode({}))
- eq('[[]]', funcs.json_encode({{}}))
- eq('[[], []]', funcs.json_encode({{}, {}}))
+ eq('[]', fn.json_encode({}))
+ eq('[[]]', fn.json_encode({ {} }))
+ eq('[[], []]', fn.json_encode({ {}, {} }))
end)
it('dumps dictionaries', function()
eq('{}', eval('json_encode({})'))
- eq('{"d": []}', funcs.json_encode({d={}}))
- eq('{"d": [], "e": []}', funcs.json_encode({d={}, e={}}))
+ eq('{"d": []}', fn.json_encode({ d = {} }))
+ eq('{"d": [], "e": []}', fn.json_encode({ d = {}, e = {} }))
+ -- Empty keys are allowed per JSON spec (and Vim dicts, and msgpack).
+ eq('{"": []}', fn.json_encode({ [''] = {} }))
end)
- it('cannot dump generic mapping with generic mapping keys and values',
- function()
+ it('cannot dump generic mapping with generic mapping keys and values', function()
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
command('let todumpv1 = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
command('let todumpv2 = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
@@ -673,33 +790,43 @@ describe('json_encode() function', function()
end)
it('fails to dump a function reference', function()
- eq('Vim(call):E474: Error while dumping encode_tv2json() argument, itself: attempt to dump function reference',
- exc_exec('call json_encode(function("tr"))'))
+ eq(
+ 'Vim(call):E474: Error while dumping encode_tv2json() argument, itself: attempt to dump function reference',
+ exc_exec('call json_encode(function("tr"))')
+ )
end)
it('fails to dump a partial', function()
command('function T() dict\nendfunction')
- eq('Vim(call):E474: Error while dumping encode_tv2json() argument, itself: attempt to dump function reference',
- exc_exec('call json_encode(function("T", [1, 2], {}))'))
+ eq(
+ 'Vim(call):E474: Error while dumping encode_tv2json() argument, itself: attempt to dump function reference',
+ exc_exec('call json_encode(function("T", [1, 2], {}))')
+ )
end)
it('fails to dump a function reference in a list', function()
- eq('Vim(call):E474: Error while dumping encode_tv2json() argument, index 0: attempt to dump function reference',
- exc_exec('call json_encode([function("tr")])'))
+ eq(
+ 'Vim(call):E474: Error while dumping encode_tv2json() argument, index 0: attempt to dump function reference',
+ exc_exec('call json_encode([function("tr")])')
+ )
end)
it('fails to dump a recursive list', function()
command('let todump = [[[]]]')
command('call add(todump[0][0], todump)')
- eq('Vim(call):E724: unable to correctly dump variable with self-referencing container',
- exc_exec('call json_encode(todump)'))
+ eq(
+ 'Vim(call):E724: unable to correctly dump variable with self-referencing container',
+ exc_exec('call json_encode(todump)')
+ )
end)
it('fails to dump a recursive dict', function()
command('let todump = {"d": {"d": {}}}')
command('call extend(todump.d.d, {"d": todump})')
- eq('Vim(call):E724: unable to correctly dump variable with self-referencing container',
- exc_exec('call json_encode([todump])'))
+ eq(
+ 'Vim(call):E724: unable to correctly dump variable with self-referencing container',
+ exc_exec('call json_encode([todump])')
+ )
end)
it('can dump dict with two same dicts inside', function()
@@ -717,58 +844,77 @@ describe('json_encode() function', function()
it('fails to dump a recursive list in a special dict', function()
command('let todump = {"_TYPE": v:msgpack_types.array, "_VAL": []}')
command('call add(todump._VAL, todump)')
- eq('Vim(call):E724: unable to correctly dump variable with self-referencing container',
- exc_exec('call json_encode(todump)'))
+ eq(
+ 'Vim(call):E724: unable to correctly dump variable with self-referencing container',
+ exc_exec('call json_encode(todump)')
+ )
end)
it('fails to dump a recursive (val) map in a special dict', function()
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
command('call add(todump._VAL, ["", todump])')
- eq('Vim(call):E724: unable to correctly dump variable with self-referencing container',
- exc_exec('call json_encode([todump])'))
+ eq(
+ 'Vim(call):E724: unable to correctly dump variable with self-referencing container',
+ exc_exec('call json_encode([todump])')
+ )
end)
it('fails to dump a recursive (val) map in a special dict, _VAL reference', function()
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": [["", []]]}')
command('call add(todump._VAL[0][1], todump._VAL)')
- eq('Vim(call):E724: unable to correctly dump variable with self-referencing container',
- exc_exec('call json_encode(todump)'))
+ eq(
+ 'Vim(call):E724: unable to correctly dump variable with self-referencing container',
+ exc_exec('call json_encode(todump)')
+ )
end)
- it('fails to dump a recursive (val) special list in a special dict',
- function()
+ it('fails to dump a recursive (val) special list in a special dict', function()
command('let todump = {"_TYPE": v:msgpack_types.array, "_VAL": []}')
command('call add(todump._VAL, ["", todump._VAL])')
- eq('Vim(call):E724: unable to correctly dump variable with self-referencing container',
- exc_exec('call json_encode(todump)'))
+ eq(
+ 'Vim(call):E724: unable to correctly dump variable with self-referencing container',
+ exc_exec('call json_encode(todump)')
+ )
end)
it('fails when called with no arguments', function()
- eq('Vim(call):E119: Not enough arguments for function: json_encode',
- exc_exec('call json_encode()'))
+ eq(
+ 'Vim(call):E119: Not enough arguments for function: json_encode',
+ exc_exec('call json_encode()')
+ )
end)
it('fails when called with two arguments', function()
- eq('Vim(call):E118: Too many arguments for function: json_encode',
- exc_exec('call json_encode(["", ""], 1)'))
+ eq(
+ 'Vim(call):E118: Too many arguments for function: json_encode',
+ exc_exec('call json_encode(["", ""], 1)')
+ )
end)
it('ignores improper values in &isprint', function()
- meths.set_option_value('isprint', '1', {})
+ api.nvim_set_option_value('isprint', '1', {})
eq(1, eval('"\1" =~# "\\\\p"'))
- eq('"\\u0001"', funcs.json_encode('\1'))
+ eq('"\\u0001"', fn.json_encode('\1'))
end)
it('fails when using surrogate character in a UTF-8 string', function()
- eq('Vim(call):E474: UTF-8 string contains code point which belongs to a surrogate pair: \237\160\128',
- exc_exec('call json_encode("\237\160\128")'))
- eq('Vim(call):E474: UTF-8 string contains code point which belongs to a surrogate pair: \237\175\191',
- exc_exec('call json_encode("\237\175\191")'))
+ eq(
+ 'Vim(call):E474: UTF-8 string contains code point which belongs to a surrogate pair: \237\160\128',
+ exc_exec('call json_encode("\237\160\128")')
+ )
+ eq(
+ 'Vim(call):E474: UTF-8 string contains code point which belongs to a surrogate pair: \237\175\191',
+ exc_exec('call json_encode("\237\175\191")')
+ )
end)
it('dumps control characters as expected', function()
- eq([["\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000B\f\r\u000E\u000F\u0010\u0011\u0012\u0013"]],
- eval('json_encode({"_TYPE": v:msgpack_types.string, "_VAL": ["\n\1\2\3\4\5\6\7\8\9", "\11\12\13\14\15\16\17\18\19"]})'))
+ eq(
+ [["\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000B\f\r\u000E\u000F\u0010\u0011\u0012\u0013"]],
+ eval(
+ 'json_encode({"_TYPE": v:msgpack_types.string, "_VAL": ["\n\1\2\3\4\5\6\7\8\9", "\11\12\13\14\15\16\17\18\19"]})'
+ )
+ )
end)
it('can dump NULL string', function()
@@ -788,9 +934,13 @@ describe('json_encode() function', function()
end)
it('fails to parse NULL strings and lists', function()
- eq('Vim(call):E474: Attempt to decode a blank string',
- exc_exec('call json_decode($XXX_UNEXISTENT_VAR_XXX)'))
- eq('Vim(call):E474: Attempt to decode a blank string',
- exc_exec('call json_decode(v:_null_list)'))
+ eq(
+ 'Vim(call):E474: Attempt to decode a blank string',
+ exc_exec('call json_decode($XXX_UNEXISTENT_VAR_XXX)')
+ )
+ eq(
+ 'Vim(call):E474: Attempt to decode a blank string',
+ exc_exec('call json_decode(v:_null_list)')
+ )
end)
end)
diff --git a/test/functional/vimscript/lang_spec.lua b/test/functional/vimscript/lang_spec.lua
index 90437f2ee1..2dde90e334 100644
--- a/test/functional/vimscript/lang_spec.lua
+++ b/test/functional/vimscript/lang_spec.lua
@@ -7,7 +7,7 @@ describe('vimscript', function()
it('parses `<SID>` with turkish locale', function()
if exc_exec('lang ctype tr_TR.UTF-8') ~= 0 then
- pending("Locale tr_TR.UTF-8 not supported")
+ pending('Locale tr_TR.UTF-8 not supported')
return
end
source([[
@@ -22,10 +22,10 @@ describe('vimscript', function()
it('str2float is not affected by locale', function()
if exc_exec('lang ctype sv_SE.UTF-8') ~= 0 then
- pending("Locale sv_SE.UTF-8 not supported")
+ pending('Locale sv_SE.UTF-8 not supported')
return
end
- clear{env={LANG="", LC_NUMERIC="sv_SE.UTF-8"}}
+ clear { env = { LANG = '', LC_NUMERIC = 'sv_SE.UTF-8' } }
eq(2.2, eval('str2float("2.2")'))
end)
end)
diff --git a/test/functional/vimscript/let_spec.lua b/test/functional/vimscript/let_spec.lua
index 11417c5846..15d4b189b8 100644
--- a/test/functional/vimscript/let_spec.lua
+++ b/test/functional/vimscript/let_spec.lua
@@ -4,7 +4,7 @@ local eq = helpers.eq
local clear = helpers.clear
local command = helpers.command
local eval = helpers.eval
-local meths = helpers.meths
+local api = helpers.api
local exec = helpers.exec
local exec_capture = helpers.exec_capture
local expect_exit = helpers.expect_exit
@@ -15,21 +15,24 @@ before_each(clear)
describe(':let', function()
it('correctly lists variables with curly-braces', function()
- meths.set_var('v', {0})
+ api.nvim_set_var('v', { 0 })
eq('v [0]', exec_capture('let {"v"}'))
end)
it('correctly lists variables with subscript', function()
- meths.set_var('v', {0})
+ api.nvim_set_var('v', { 0 })
eq('v[0] #0', exec_capture('let v[0]'))
eq('g:["v"][0] #0', exec_capture('let g:["v"][0]'))
eq('{"g:"}["v"][0] #0', exec_capture('let {"g:"}["v"][0]'))
end)
- it(":unlet self-referencing node in a List graph #6070", function()
+ it(':unlet self-referencing node in a List graph #6070', function()
-- :unlet-ing a self-referencing List must not allow GC on indirectly
-- referenced in-scope Lists. Before #6070 this caused use-after-free.
- expect_exit(1000, source, [=[
+ expect_exit(
+ 1000,
+ source,
+ [=[
let [l1, l2] = [[], []]
echo 'l1:' . id(l1)
echo 'l2:' . id(l2)
@@ -45,10 +48,11 @@ describe(':let', function()
unlet l4
call garbagecollect(1)
call feedkeys(":\e:echo l1 l3\n:echo 42\n:cq\n", "t")
- ]=])
+ ]=]
+ )
end)
- it("multibyte env var #8398 #9267", function()
+ it('multibyte env var #8398 #9267', function()
command("let $NVIM_TEST_LET = 'AìaB'")
eq('AìaB', eval('$NVIM_TEST_LET'))
command("let $NVIM_TEST_LET = 'AaあB'")
@@ -56,12 +60,14 @@ describe(':let', function()
local mbyte = [[\p* .ม .ม .ม .ม่ .ม่ .ม่ ֹ ֹ ֹ .ֹ .ֹ .ֹ ֹֻ ֹֻ ֹֻ
.ֹֻ .ֹֻ .ֹֻ ֹֻ ֹֻ ֹֻ .ֹֻ .ֹֻ .ֹֻ ֹ ֹ ֹ .ֹ .ֹ .ֹ ֹ ֹ ֹ .ֹ .ֹ .ֹ ֹֻ ֹֻ
.ֹֻ .ֹֻ .ֹֻ a a a ca ca ca à à à]]
- command("let $NVIM_TEST_LET = '"..mbyte.."'")
+ command("let $NVIM_TEST_LET = '" .. mbyte .. "'")
eq(mbyte, eval('$NVIM_TEST_LET'))
end)
- it("multibyte env var to child process #8398 #9267", function()
- local cmd_get_child_env = ("let g:env_from_child = system(['%s', 'NVIM_TEST_LET'])"):format(testprg('printenv-test'))
+ it('multibyte env var to child process #8398 #9267', function()
+ local cmd_get_child_env = ("let g:env_from_child = system(['%s', 'NVIM_TEST_LET'])"):format(
+ testprg('printenv-test')
+ )
command("let $NVIM_TEST_LET = 'AìaB'")
command(cmd_get_child_env)
eq(eval('$NVIM_TEST_LET'), eval('g:env_from_child'))
@@ -73,12 +79,12 @@ describe(':let', function()
local mbyte = [[\p* .ม .ม .ม .ม่ .ม่ .ม่ ֹ ֹ ֹ .ֹ .ֹ .ֹ ֹֻ ֹֻ ֹֻ
.ֹֻ .ֹֻ .ֹֻ ֹֻ ֹֻ ֹֻ .ֹֻ .ֹֻ .ֹֻ ֹ ֹ ֹ .ֹ .ֹ .ֹ ֹ ֹ ֹ .ֹ .ֹ .ֹ ֹֻ ֹֻ
.ֹֻ .ֹֻ .ֹֻ a a a ca ca ca à à à]]
- command("let $NVIM_TEST_LET = '"..mbyte.."'")
+ command("let $NVIM_TEST_LET = '" .. mbyte .. "'")
command(cmd_get_child_env)
eq(eval('$NVIM_TEST_LET'), eval('g:env_from_child'))
end)
- it("release of list assigned to l: variable does not trigger assertion #12387, #12430", function()
+ it('release of list assigned to l: variable does not trigger assertion #12387, #12430', function()
source([[
func! s:f()
let l:x = [1]
@@ -94,17 +100,17 @@ describe(':let', function()
end)
it('can apply operator to boolean option', function()
- eq(true, meths.get_option_value('equalalways', {}))
+ eq(true, api.nvim_get_option_value('equalalways', {}))
command('let &equalalways -= 1')
- eq(false, meths.get_option_value('equalalways', {}))
+ eq(false, api.nvim_get_option_value('equalalways', {}))
command('let &equalalways += 1')
- eq(true, meths.get_option_value('equalalways', {}))
+ eq(true, api.nvim_get_option_value('equalalways', {}))
command('let &equalalways *= 1')
- eq(true, meths.get_option_value('equalalways', {}))
+ eq(true, api.nvim_get_option_value('equalalways', {}))
command('let &equalalways /= 1')
- eq(true, meths.get_option_value('equalalways', {}))
+ eq(true, api.nvim_get_option_value('equalalways', {}))
command('let &equalalways %= 1')
- eq(false, meths.get_option_value('equalalways', {}))
+ eq(false, api.nvim_get_option_value('equalalways', {}))
end)
end)
diff --git a/test/functional/vimscript/map_functions_spec.lua b/test/functional/vimscript/map_functions_spec.lua
index acba5e9708..59d427ca90 100644
--- a/test/functional/vimscript/map_functions_spec.lua
+++ b/test/functional/vimscript/map_functions_spec.lua
@@ -7,9 +7,8 @@ local exec = helpers.exec
local exec_lua = helpers.exec_lua
local expect = helpers.expect
local feed = helpers.feed
-local funcs = helpers.funcs
-local meths = helpers.meths
-local nvim = helpers.nvim
+local fn = helpers.fn
+local api = helpers.api
local source = helpers.source
local command = helpers.command
local exec_capture = helpers.exec_capture
@@ -19,65 +18,65 @@ describe('maparg()', function()
before_each(clear)
local foo_bar_map_table = {
- lhs='foo',
- lhsraw='foo',
- script=0,
- silent=0,
- rhs='bar',
- expr=0,
- sid=0,
- scriptversion=1,
- buffer=0,
- nowait=0,
- mode='n',
- mode_bits=0x01,
- abbr=0,
- noremap=1,
- lnum=0,
- }
+ lhs = 'foo',
+ lhsraw = 'foo',
+ script = 0,
+ silent = 0,
+ rhs = 'bar',
+ expr = 0,
+ sid = 0,
+ scriptversion = 1,
+ buffer = 0,
+ nowait = 0,
+ mode = 'n',
+ mode_bits = 0x01,
+ abbr = 0,
+ noremap = 1,
+ lnum = 0,
+ }
it('returns a dictionary', function()
- nvim('command', 'nnoremap foo bar')
- eq('bar', funcs.maparg('foo'))
- eq(foo_bar_map_table, funcs.maparg('foo', 'n', false, true))
+ command('nnoremap foo bar')
+ eq('bar', fn.maparg('foo'))
+ eq(foo_bar_map_table, fn.maparg('foo', 'n', false, true))
end)
it('returns 1 for silent when <silent> is used', function()
- nvim('command', 'nnoremap <silent> foo bar')
- eq(1, funcs.maparg('foo', 'n', false, true)['silent'])
+ command('nnoremap <silent> foo bar')
+ eq(1, fn.maparg('foo', 'n', false, true)['silent'])
- nvim('command', 'nnoremap baz bat')
- eq(0, funcs.maparg('baz', 'n', false, true)['silent'])
+ command('nnoremap baz bat')
+ eq(0, fn.maparg('baz', 'n', false, true)['silent'])
end)
it('returns an empty string when no map is present', function()
- eq('', funcs.maparg('not a mapping'))
+ eq('', fn.maparg('not a mapping'))
end)
it('returns an empty dictionary when no map is present and dict is requested', function()
- eq({}, funcs.maparg('not a mapping', 'n', false, true))
+ eq({}, fn.maparg('not a mapping', 'n', false, true))
end)
it('returns the same value for noremap and <script>', function()
- nvim('command', 'inoremap <script> hello world')
- nvim('command', 'inoremap this that')
+ command('inoremap <script> hello world')
+ command('inoremap this that')
eq(
- funcs.maparg('hello', 'i', false, true)['noremap'],
- funcs.maparg('this', 'i', false, true)['noremap']
- )
+ fn.maparg('hello', 'i', false, true)['noremap'],
+ fn.maparg('this', 'i', false, true)['noremap']
+ )
end)
it('returns a boolean for buffer', function()
-- Open enough windows to know we aren't on buffer number 1
- nvim('command', 'new')
- nvim('command', 'new')
- nvim('command', 'new')
- nvim('command', 'cnoremap <buffer> this that')
- eq(1, funcs.maparg('this', 'c', false, true)['buffer'])
+ command('new')
+ command('new')
+ command('new')
+ command('cnoremap <buffer> this that')
+ eq(1, fn.maparg('this', 'c', false, true)['buffer'])
-- Global will return 0 always
- nvim('command', 'nnoremap other another')
- eq(0, funcs.maparg('other', 'n', false, true)['buffer'])
+ command('nnoremap other another')
+ eq(0, fn.maparg('other', 'n', false, true)['buffer'])
end)
it('returns script numbers', function()
@@ -88,8 +87,8 @@ describe('maparg()', function()
nnoremap fizz :call <SID>maparg_test_function()<CR>
]])
- eq(1, funcs.maparg('fizz', 'n', false, true)['sid'])
- eq('testing', nvim('call_function', '<SNR>1_maparg_test_function', {}))
+ eq(1, fn.maparg('fizz', 'n', false, true)['sid'])
+ eq('testing', api.nvim_call_function('<SNR>1_maparg_test_function', {}))
end)
it('works with <F12> and others', function()
@@ -104,7 +103,7 @@ describe('maparg()', function()
]])
eq(1, eval('g:maparg_test_var'))
- eq(':let g:maparg_test_var = 1<CR>', funcs.maparg('<F12>', 'n', false, true)['rhs'])
+ eq(':let g:maparg_test_var = 1<CR>', fn.maparg('<F12>', 'n', false, true)['rhs'])
end)
it('works with <expr>', function()
@@ -127,7 +126,7 @@ describe('maparg()', function()
]])
eq(1, eval('g:counter'))
- local map_dict = funcs.maparg('<C-L>', 'i', false, true)
+ local map_dict = fn.maparg('<C-L>', 'i', false, true)
eq(1, map_dict['expr'])
eq('i', map_dict['mode'])
end)
@@ -135,7 +134,7 @@ describe('maparg()', function()
it('works with combining characters', function()
-- Using addacutes to make combining character better visible
local function ac(s)
- local acute = '\204\129' -- U+0301 COMBINING ACUTE ACCENT
+ local acute = '\204\129' -- U+0301 COMBINING ACUTE ACCENT
local ret = s:gsub('`', acute)
return ret
end
@@ -144,10 +143,10 @@ describe('maparg()', function()
nnoremap c` d
nnoremap e` f`
]]))
- eq(ac('b`'), funcs.maparg(ac('a')))
- eq(ac(''), funcs.maparg(ac('c')))
- eq(ac('d'), funcs.maparg(ac('c`')))
- eq(ac('f`'), funcs.maparg(ac('e`')))
+ eq(ac('b`'), fn.maparg(ac('a')))
+ eq(ac(''), fn.maparg(ac('c')))
+ eq(ac('d'), fn.maparg(ac('c`')))
+ eq(ac('f`'), fn.maparg(ac('e`')))
local function acmap(lhs, rhs)
return {
@@ -170,35 +169,45 @@ describe('maparg()', function()
}
end
- eq({}, funcs.maparg(ac('c'), 'n', 0, 1))
- eq(acmap('a', 'b`'), funcs.maparg(ac('a'), 'n', 0, 1))
- eq(acmap('c`', 'd'), funcs.maparg(ac('c`'), 'n', 0, 1))
- eq(acmap('e`', 'f`'), funcs.maparg(ac('e`'), 'n', 0, 1))
+ eq({}, fn.maparg(ac('c'), 'n', 0, 1))
+ eq(acmap('a', 'b`'), fn.maparg(ac('a'), 'n', 0, 1))
+ eq(acmap('c`', 'd'), fn.maparg(ac('c`'), 'n', 0, 1))
+ eq(acmap('e`', 'f`'), fn.maparg(ac('e`'), 'n', 0, 1))
end)
end)
describe('mapset()', function()
before_each(clear)
+ it('can restore mapping with backslash in lhs', function()
+ api.nvim_set_keymap('n', '\\ab', 'a', {})
+ eq('\nn \\ab a', exec_capture('nmap \\ab'))
+ local mapargs = fn.maparg('\\ab', 'n', false, true)
+ api.nvim_set_keymap('n', '\\ab', 'b', {})
+ eq('\nn \\ab b', exec_capture('nmap \\ab'))
+ fn.mapset('n', false, mapargs)
+ eq('\nn \\ab a', exec_capture('nmap \\ab'))
+ end)
+
it('can restore mapping description from the dict returned by maparg()', function()
- meths.set_keymap('n', 'lhs', 'rhs', {desc = 'map description'})
- eq('\nn lhs rhs\n map description', exec_capture("nmap lhs"))
- local mapargs = funcs.maparg('lhs', 'n', false, true)
- meths.set_keymap('n', 'lhs', 'rhs', {desc = 'MAP DESCRIPTION'})
- eq('\nn lhs rhs\n MAP DESCRIPTION', exec_capture("nmap lhs"))
- funcs.mapset('n', false, mapargs)
- eq('\nn lhs rhs\n map description', exec_capture("nmap lhs"))
+ api.nvim_set_keymap('n', 'lhs', 'rhs', { desc = 'map description' })
+ eq('\nn lhs rhs\n map description', exec_capture('nmap lhs'))
+ local mapargs = fn.maparg('lhs', 'n', false, true)
+ api.nvim_set_keymap('n', 'lhs', 'rhs', { desc = 'MAP DESCRIPTION' })
+ eq('\nn lhs rhs\n MAP DESCRIPTION', exec_capture('nmap lhs'))
+ fn.mapset('n', false, mapargs)
+ eq('\nn lhs rhs\n map description', exec_capture('nmap lhs'))
end)
it('can restore "replace_keycodes" from the dict returned by maparg()', function()
- meths.set_keymap('i', 'foo', [['<l' .. 't>']], {expr = true, replace_keycodes = true})
+ api.nvim_set_keymap('i', 'foo', [['<l' .. 't>']], { expr = true, replace_keycodes = true })
feed('Afoo')
expect('<')
- local mapargs = funcs.maparg('foo', 'i', false, true)
- meths.set_keymap('i', 'foo', [['<l' .. 't>']], {expr = true})
+ local mapargs = fn.maparg('foo', 'i', false, true)
+ api.nvim_set_keymap('i', 'foo', [['<l' .. 't>']], { expr = true })
feed('foo')
expect('<<lt>')
- funcs.mapset('i', false, mapargs)
+ fn.mapset('i', false, mapargs)
feed('foo')
expect('<<lt><')
end)
@@ -208,23 +217,26 @@ describe('mapset()', function()
eq('\ni foo * bar', exec_capture('iabbr foo'))
feed('ifoo ')
expect('bar ')
- local mapargs = funcs.maparg('foo', 'i', true, true)
+ local mapargs = fn.maparg('foo', 'i', true, true)
command('inoreabbr foo BAR')
eq('\ni foo * BAR', exec_capture('iabbr foo'))
feed('foo ')
expect('bar BAR ')
- funcs.mapset('i', true, mapargs)
+ fn.mapset('i', true, mapargs)
eq('\ni foo * bar', exec_capture('iabbr foo'))
feed('foo<Esc>')
expect('bar BAR bar')
end)
it('can restore Lua callback from the dict returned by maparg()', function()
- eq(0, exec_lua([[
+ eq(
+ 0,
+ exec_lua([[
GlobalCount = 0
vim.api.nvim_set_keymap('n', 'asdf', '', {callback = function() GlobalCount = GlobalCount + 1 end })
return GlobalCount
- ]]))
+ ]])
+ )
feed('asdf')
eq(1, exec_lua([[return GlobalCount]]))
@@ -252,9 +264,13 @@ describe('mapset()', function()
end)
it('does not leak memory if lhs is missing', function()
- eq('Vim:E460: Entries missing in mapset() dict argument',
- pcall_err(exec_lua, [[vim.fn.mapset('n', false, {rhs = 'foo'})]]))
- eq('Vim:E460: Entries missing in mapset() dict argument',
- pcall_err(exec_lua, [[vim.fn.mapset('n', false, {callback = function() end})]]))
+ eq(
+ 'Vim:E460: Entries missing in mapset() dict argument',
+ pcall_err(exec_lua, [[vim.fn.mapset('n', false, {rhs = 'foo'})]])
+ )
+ eq(
+ 'Vim:E460: Entries missing in mapset() dict argument',
+ pcall_err(exec_lua, [[vim.fn.mapset('n', false, {callback = function() end})]])
+ )
end)
end)
diff --git a/test/functional/vimscript/match_functions_spec.lua b/test/functional/vimscript/match_functions_spec.lua
index 9f168c913a..3db612e472 100644
--- a/test/functional/vimscript/match_functions_spec.lua
+++ b/test/functional/vimscript/match_functions_spec.lua
@@ -3,155 +3,198 @@ local Screen = require('test.functional.ui.screen')
local eq = helpers.eq
local clear = helpers.clear
-local funcs = helpers.funcs
+local fn = helpers.fn
local command = helpers.command
local exc_exec = helpers.exc_exec
before_each(clear)
describe('setmatches()', function()
- it('correctly handles case when both group and pattern entries are numbers',
- function()
+ it('correctly handles case when both group and pattern entries are numbers', function()
command('hi def link 1 PreProc')
- eq(0, funcs.setmatches({{group=1, pattern=2, id=3, priority=4}}))
- eq({{
- group='1',
- pattern='2',
- id=3,
- priority=4,
- }}, funcs.getmatches())
- eq(0, funcs.setmatches({{group=1, pattern=2, id=3, priority=4, conceal=5}}))
- eq({{
- group='1',
- pattern='2',
- id=3,
- priority=4,
- conceal='5',
- }}, funcs.getmatches())
- eq(0, funcs.setmatches({{group=1, pos1={2}, pos2={6}, id=3, priority=4, conceal=5}}))
- eq({{
- group='1',
- pos1={2},
- pos2={6},
- id=3,
- priority=4,
- conceal='5',
- }}, funcs.getmatches())
+ eq(0, fn.setmatches({ { group = 1, pattern = 2, id = 3, priority = 4 } }))
+ eq({
+ {
+ group = '1',
+ pattern = '2',
+ id = 3,
+ priority = 4,
+ },
+ }, fn.getmatches())
+ eq(0, fn.setmatches({ { group = 1, pattern = 2, id = 3, priority = 4, conceal = 5 } }))
+ eq({
+ {
+ group = '1',
+ pattern = '2',
+ id = 3,
+ priority = 4,
+ conceal = '5',
+ },
+ }, fn.getmatches())
+ eq(
+ 0,
+ fn.setmatches({
+ { group = 1, pos1 = { 2 }, pos2 = { 6 }, id = 3, priority = 4, conceal = 5 },
+ })
+ )
+ eq({
+ {
+ group = '1',
+ pos1 = { 2 },
+ pos2 = { 6 },
+ id = 3,
+ priority = 4,
+ conceal = '5',
+ },
+ }, fn.getmatches())
end)
it('does not fail if highlight group is not defined', function()
- eq(0, funcs.setmatches{{group=1, pattern=2, id=3, priority=4}})
- eq({{group='1', pattern='2', id=3, priority=4}},
- funcs.getmatches())
- eq(0, funcs.setmatches{{group=1, pos1={2}, pos2={6}, id=3, priority=4, conceal=5}})
- eq({{group='1', pos1={2}, pos2={6}, id=3, priority=4, conceal='5'}},
- funcs.getmatches())
+ eq(0, fn.setmatches { { group = 1, pattern = 2, id = 3, priority = 4 } })
+ eq({ { group = '1', pattern = '2', id = 3, priority = 4 } }, fn.getmatches())
+ eq(
+ 0,
+ fn.setmatches {
+ { group = 1, pos1 = { 2 }, pos2 = { 6 }, id = 3, priority = 4, conceal = 5 },
+ }
+ )
+ eq(
+ { { group = '1', pos1 = { 2 }, pos2 = { 6 }, id = 3, priority = 4, conceal = '5' } },
+ fn.getmatches()
+ )
end)
end)
describe('matchadd()', function()
- it('correctly works when first two arguments and conceal are numbers at once',
- function()
+ it('correctly works when first two arguments and conceal are numbers at once', function()
command('hi def link 1 PreProc')
- eq(4, funcs.matchadd(1, 2, 3, 4, {conceal=5}))
- eq({{
- group='1',
- pattern='2',
- priority=3,
- id=4,
- conceal='5',
- }}, funcs.getmatches())
+ eq(4, fn.matchadd(1, 2, 3, 4, { conceal = 5 }))
+ eq({
+ {
+ group = '1',
+ pattern = '2',
+ priority = 3,
+ id = 4,
+ conceal = '5',
+ },
+ }, fn.getmatches())
end)
end)
describe('matchaddpos()', function()
it('errors out on invalid input', function()
command('hi clear PreProc')
- eq('Vim(let):E5030: Empty list at position 0',
- exc_exec('let val = matchaddpos("PreProc", [[]])'))
- eq('Vim(let):E5030: Empty list at position 1',
- exc_exec('let val = matchaddpos("PreProc", [1, v:_null_list])'))
- eq('Vim(let):E5031: List or number required at position 1',
- exc_exec('let val = matchaddpos("PreProc", [1, v:_null_dict])'))
+ eq(
+ 'Vim(let):E5030: Empty list at position 0',
+ exc_exec('let val = matchaddpos("PreProc", [[]])')
+ )
+ eq(
+ 'Vim(let):E5030: Empty list at position 1',
+ exc_exec('let val = matchaddpos("PreProc", [1, v:_null_list])')
+ )
+ eq(
+ 'Vim(let):E5031: List or number required at position 1',
+ exc_exec('let val = matchaddpos("PreProc", [1, v:_null_dict])')
+ )
end)
it('works with 0 lnum', function()
command('hi clear PreProc')
- eq(4, funcs.matchaddpos('PreProc', {1}, 3, 4))
- eq({{
- group='PreProc',
- pos1 = {1},
- priority=3,
- id=4,
- }}, funcs.getmatches())
- funcs.matchdelete(4)
- eq(4, funcs.matchaddpos('PreProc', {{0}, 1}, 3, 4))
- eq({{
- group='PreProc',
- pos1 = {1},
- priority=3,
- id=4,
- }}, funcs.getmatches())
- funcs.matchdelete(4)
- eq(4, funcs.matchaddpos('PreProc', {0, 1}, 3, 4))
- eq({{
- group='PreProc',
- pos1 = {1},
- priority=3,
- id=4,
- }}, funcs.getmatches())
+ eq(4, fn.matchaddpos('PreProc', { 1 }, 3, 4))
+ eq({
+ {
+ group = 'PreProc',
+ pos1 = { 1 },
+ priority = 3,
+ id = 4,
+ },
+ }, fn.getmatches())
+ fn.matchdelete(4)
+ eq(4, fn.matchaddpos('PreProc', { { 0 }, 1 }, 3, 4))
+ eq({
+ {
+ group = 'PreProc',
+ pos1 = { 1 },
+ priority = 3,
+ id = 4,
+ },
+ }, fn.getmatches())
+ fn.matchdelete(4)
+ eq(4, fn.matchaddpos('PreProc', { 0, 1 }, 3, 4))
+ eq({
+ {
+ group = 'PreProc',
+ pos1 = { 1 },
+ priority = 3,
+ id = 4,
+ },
+ }, fn.getmatches())
end)
it('works with negative numbers', function()
command('hi clear PreProc')
- eq(4, funcs.matchaddpos('PreProc', {-10, 1}, 3, 4))
- eq({{
- group='PreProc',
- pos1 = {1},
- priority=3,
- id=4,
- }}, funcs.getmatches())
- funcs.matchdelete(4)
- eq(4, funcs.matchaddpos('PreProc', {{-10}, 1}, 3, 4))
- eq({{
- group='PreProc',
- pos1 = {1},
- priority=3,
- id=4,
- }}, funcs.getmatches())
- funcs.matchdelete(4)
- eq(4, funcs.matchaddpos('PreProc', {{2, -1}, 1}, 3, 4))
- eq({{
- group='PreProc',
- pos1 = {1},
- priority=3,
- id=4,
- }}, funcs.getmatches())
- funcs.matchdelete(4)
- eq(4, funcs.matchaddpos('PreProc', {{2, 0, -1}, 1}, 3, 4))
- eq({{
- group='PreProc',
- pos1 = {1},
- priority=3,
- id=4,
- }}, funcs.getmatches())
+ eq(4, fn.matchaddpos('PreProc', { -10, 1 }, 3, 4))
+ eq({
+ {
+ group = 'PreProc',
+ pos1 = { 1 },
+ priority = 3,
+ id = 4,
+ },
+ }, fn.getmatches())
+ fn.matchdelete(4)
+ eq(4, fn.matchaddpos('PreProc', { { -10 }, 1 }, 3, 4))
+ eq({
+ {
+ group = 'PreProc',
+ pos1 = { 1 },
+ priority = 3,
+ id = 4,
+ },
+ }, fn.getmatches())
+ fn.matchdelete(4)
+ eq(4, fn.matchaddpos('PreProc', { { 2, -1 }, 1 }, 3, 4))
+ eq({
+ {
+ group = 'PreProc',
+ pos1 = { 1 },
+ priority = 3,
+ id = 4,
+ },
+ }, fn.getmatches())
+ fn.matchdelete(4)
+ eq(4, fn.matchaddpos('PreProc', { { 2, 0, -1 }, 1 }, 3, 4))
+ eq({
+ {
+ group = 'PreProc',
+ pos1 = { 1 },
+ priority = 3,
+ id = 4,
+ },
+ }, fn.getmatches())
end)
it('works with zero length', function()
local screen = Screen.new(40, 5)
screen:attach()
- funcs.setline(1, 'abcdef')
+ fn.setline(1, 'abcdef')
command('hi PreProc guifg=Red')
- eq(4, funcs.matchaddpos('PreProc', {{1, 2, 0}}, 3, 4))
- eq({{
- group='PreProc',
- pos1 = {1, 2, 0},
- priority=3,
- id=4,
- }}, funcs.getmatches())
- screen:expect([[
+ eq(4, fn.matchaddpos('PreProc', { { 1, 2, 0 } }, 3, 4))
+ eq({
+ {
+ group = 'PreProc',
+ pos1 = { 1, 2, 0 },
+ priority = 3,
+ id = 4,
+ },
+ }, fn.getmatches())
+ screen:expect(
+ [[
^a{1:b}cdef |
- {2:~ }|
- {2:~ }|
- {2:~ }|
+ {2:~ }|*3
|
- ]], {[1] = {foreground = Screen.colors.Red}, [2] = {bold = true, foreground = Screen.colors.Blue1}})
+ ]],
+ {
+ [1] = { foreground = Screen.colors.Red },
+ [2] = { bold = true, foreground = Screen.colors.Blue1 },
+ }
+ )
end)
end)
diff --git a/test/functional/vimscript/minmax_functions_spec.lua b/test/functional/vimscript/minmax_functions_spec.lua
index 91106bef1e..c4a986bc8c 100644
--- a/test/functional/vimscript/minmax_functions_spec.lua
+++ b/test/functional/vimscript/minmax_functions_spec.lua
@@ -4,18 +4,21 @@ local eq = helpers.eq
local eval = helpers.eval
local command = helpers.command
local clear = helpers.clear
-local funcs = helpers.funcs
+local fn = helpers.fn
local pcall_err = helpers.pcall_err
before_each(clear)
-for _, func in ipairs({'min', 'max'}) do
+for _, func in ipairs({ 'min', 'max' }) do
describe(func .. '()', function()
- it('gives a single error message when multiple values failed conversions',
- function()
- eq('Vim(echo):E745: Using a List as a Number',
- pcall_err(command, 'echo ' .. func .. '([-5, [], [], [], 5])'))
- eq('Vim(echo):E745: Using a List as a Number',
- pcall_err(command, 'echo ' .. func .. '({1:-5, 2:[], 3:[], 4:[], 5:5})'))
+ it('gives a single error message when multiple values failed conversions', function()
+ eq(
+ 'Vim(echo):E745: Using a List as a Number',
+ pcall_err(command, 'echo ' .. func .. '([-5, [], [], [], 5])')
+ )
+ eq(
+ 'Vim(echo):E745: Using a List as a Number',
+ pcall_err(command, 'echo ' .. func .. '({1:-5, 2:[], 3:[], 4:[], 5:5})')
+ )
for errmsg, errinput in pairs({
['Vim(echo):E745: Using a List as a Number'] = '[]',
['Vim(echo):E805: Using a Float as a Number'] = '0.0',
@@ -27,22 +30,30 @@ for _, func in ipairs({'min', 'max'}) do
end
end)
it('works with arrays/dictionaries with zero items', function()
- eq(0, funcs[func]({}))
+ eq(0, fn[func]({}))
eq(0, eval(func .. '({})'))
end)
it('works with arrays/dictionaries with one item', function()
- eq(5, funcs[func]({5}))
- eq(5, funcs[func]({test=5}))
+ eq(5, fn[func]({ 5 }))
+ eq(5, fn[func]({ test = 5 }))
end)
it('works with NULL arrays/dictionaries', function()
eq(0, eval(func .. '(v:_null_list)'))
eq(0, eval(func .. '(v:_null_dict)'))
end)
it('errors out for invalid types', function()
- for _, errinput in ipairs({'1', 'v:true', 'v:false', 'v:null',
- 'function("tr")', '""'}) do
- eq(('Vim(echo):E712: Argument of %s() must be a List or Dictionary'):format(func),
- pcall_err(command, 'echo ' .. func .. '(' .. errinput .. ')'))
+ for _, errinput in ipairs({
+ '1',
+ 'v:true',
+ 'v:false',
+ 'v:null',
+ 'function("tr")',
+ '""',
+ }) do
+ eq(
+ ('Vim(echo):E712: Argument of %s() must be a List or Dictionary'):format(func),
+ pcall_err(command, 'echo ' .. func .. '(' .. errinput .. ')')
+ )
end
end)
end)
diff --git a/test/functional/vimscript/modeline_spec.lua b/test/functional/vimscript/modeline_spec.lua
index b2346079a1..ae63a66f43 100644
--- a/test/functional/vimscript/modeline_spec.lua
+++ b/test/functional/vimscript/modeline_spec.lua
@@ -2,7 +2,7 @@ local helpers = require('test.functional.helpers')(after_each)
local assert_alive = helpers.assert_alive
local clear, command, write_file = helpers.clear, helpers.command, helpers.write_file
-describe("modeline", function()
+describe('modeline', function()
local tempfile = helpers.tmpname()
before_each(clear)
diff --git a/test/functional/vimscript/msgpack_functions_spec.lua b/test/functional/vimscript/msgpack_functions_spec.lua
index de5a721efe..609a706155 100644
--- a/test/functional/vimscript/msgpack_functions_spec.lua
+++ b/test/functional/vimscript/msgpack_functions_spec.lua
@@ -1,9 +1,9 @@
local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
-local funcs = helpers.funcs
+local fn = helpers.fn
local eval, eq = helpers.eval, helpers.eq
local command = helpers.command
-local nvim = helpers.nvim
+local api = helpers.api
local exc_exec = helpers.exc_exec
local is_os = helpers.is_os
@@ -12,7 +12,7 @@ describe('msgpack*() functions', function()
local obj_test = function(msg, obj)
it(msg, function()
- nvim('set_var', 'obj', obj)
+ api.nvim_set_var('obj', obj)
eq(obj, eval('msgpackparse(msgpackdump(g:obj))'))
eq(obj, eval('msgpackparse(msgpackdump(g:obj, "B"))'))
end)
@@ -20,17 +20,18 @@ describe('msgpack*() functions', function()
-- Regression test: msgpack_list_write was failing to write buffer with zero
-- length.
- obj_test('are able to dump and restore {"file": ""}', {{file=''}})
+ obj_test('are able to dump and restore {"file": ""}', { { file = '' } })
-- Regression test: msgpack_list_write was failing to write buffer with NL at
-- the end.
- obj_test('are able to dump and restore {0, "echo mpack"}', {{0, 'echo mpack'}})
- obj_test('are able to dump and restore "Test\\n"', {'Test\n'})
+ obj_test('are able to dump and restore {0, "echo mpack"}', { { 0, 'echo mpack' } })
+ obj_test('are able to dump and restore "Test\\n"', { 'Test\n' })
-- Regression test: msgpack_list_write was failing to write buffer with NL
-- inside.
- obj_test('are able to dump and restore "Test\\nTest 2"', {'Test\nTest 2'})
+ obj_test('are able to dump and restore "Test\\nTest 2"', { 'Test\nTest 2' })
-- Test that big objects (requirement: dump to something that is bigger then
-- IOSIZE) are also fine. This particular object is obtained by concatenating
-- 5 identical shada files.
+ -- stylua: ignore
local big_obj = {
1, 1436711454, 78, {
encoding="utf-8",
@@ -330,19 +331,18 @@ describe('msgpack*() functions', function()
}
obj_test('are able to dump and restore rather big object', big_obj)
- obj_test('are able to dump and restore floating-point value', {0.125})
+ obj_test('are able to dump and restore floating-point value', { 0.125 })
it('can restore and dump UINT64_MAX', function()
command('let dumped = ["\\xCF" . repeat("\\xFF", 8)]')
command('let parsed = msgpackparse(dumped)')
command('let dumped2 = msgpackdump(parsed)')
- eq(1, eval('type(parsed[0]) == type(0) ' ..
- '|| parsed[0]._TYPE is v:msgpack_types.integer'))
+ eq(1, eval('type(parsed[0]) == type(0) ' .. '|| parsed[0]._TYPE is v:msgpack_types.integer'))
if eval('type(parsed[0]) == type(0)') == 1 then
command('call assert_equal(0xFFFFFFFFFFFFFFFF, parsed[0])')
eq({}, eval('v:errors'))
else
- eq({_TYPE={}, _VAL={1, 3, 0x7FFFFFFF, 0x7FFFFFFF}}, eval('parsed[0]'))
+ eq({ _TYPE = {}, _VAL = { 1, 3, 0x7FFFFFFF, 0x7FFFFFFF } }, eval('parsed[0]'))
end
eq(1, eval('dumped ==# dumped2'))
end)
@@ -351,13 +351,12 @@ describe('msgpack*() functions', function()
command('let dumped = ["\\xD3\\x80" . repeat("\\n", 7)]')
command('let parsed = msgpackparse(dumped)')
command('let dumped2 = msgpackdump(parsed)')
- eq(1, eval('type(parsed[0]) == type(0) ' ..
- '|| parsed[0]._TYPE is v:msgpack_types.integer'))
+ eq(1, eval('type(parsed[0]) == type(0) ' .. '|| parsed[0]._TYPE is v:msgpack_types.integer'))
if eval('type(parsed[0]) == type(0)') == 1 then
command('call assert_equal(-0x7fffffffffffffff - 1, parsed[0])')
eq({}, eval('v:errors'))
else
- eq({_TYPE={}, _VAL={-1, 2, 0, 0}}, eval('parsed[0]'))
+ eq({ _TYPE = {}, _VAL = { -1, 2, 0, 0 } }, eval('parsed[0]'))
end
eq(1, eval('dumped ==# dumped2'))
end)
@@ -366,7 +365,7 @@ describe('msgpack*() functions', function()
command('let dumped = ["\\xC4\\x01\\n"]')
command('let parsed = msgpackparse(dumped)')
command('let dumped2 = msgpackdump(parsed)')
- eq({'\000'}, eval('parsed'))
+ eq({ '\000' }, eval('parsed'))
eq(1, eval('dumped ==# dumped2'))
end)
@@ -374,7 +373,7 @@ describe('msgpack*() functions', function()
command('let dumped = ["\\xA1\\n"]')
command('let parsed = msgpackparse(dumped)')
command('let dumped2 = msgpackdump(parsed)')
- eq({{_TYPE={}, _VAL={'\n'}}}, eval('parsed'))
+ eq({ { _TYPE = {}, _VAL = { '\n' } } }, eval('parsed'))
eq(1, eval('parsed[0]._TYPE is v:msgpack_types.string'))
eq(1, eval('dumped ==# dumped2'))
end)
@@ -383,19 +382,19 @@ describe('msgpack*() functions', function()
command('let dumped = ["\\xC4\\x01", ""]')
command('let parsed = msgpackparse(dumped)')
command('let dumped2 = msgpackdump(parsed)')
- eq({"\n"}, eval('parsed'))
+ eq({ '\n' }, eval('parsed'))
eq(1, eval('dumped ==# dumped2'))
end)
it('dump and restore special mapping with floating-point value', function()
command('let todump = {"_TYPE": v:msgpack_types.float, "_VAL": 0.125}')
- eq({0.125}, eval('msgpackparse(msgpackdump([todump]))'))
+ eq({ 0.125 }, eval('msgpackparse(msgpackdump([todump]))'))
end)
end)
local blobstr = function(list)
local l = {}
- for i,v in ipairs(list) do
+ for i, v in ipairs(list) do
l[i] = v:gsub('\n', '\000')
end
return table.concat(l, '\n')
@@ -403,10 +402,11 @@ end
-- Test msgpackparse() with a readfile()-style list and a blob argument
local parse_eq = function(expect, list_arg)
- local blob_expr = '0z' .. blobstr(list_arg):gsub('(.)', function(c)
- return ('%.2x'):format(c:byte())
- end)
- eq(expect, funcs.msgpackparse(list_arg))
+ local blob_expr = '0z'
+ .. blobstr(list_arg):gsub('(.)', function(c)
+ return ('%.2x'):format(c:byte())
+ end)
+ eq(expect, fn.msgpackparse(list_arg))
command('let g:parsed = msgpackparse(' .. blob_expr .. ')')
eq(expect, eval('g:parsed'))
end
@@ -415,33 +415,33 @@ describe('msgpackparse() function', function()
before_each(clear)
it('restores nil as v:null', function()
- parse_eq(eval('[v:null]'), {'\192'})
+ parse_eq(eval('[v:null]'), { '\192' })
end)
it('restores boolean false as v:false', function()
- parse_eq({false}, {'\194'})
+ parse_eq({ false }, { '\194' })
end)
it('restores boolean true as v:true', function()
- parse_eq({true}, {'\195'})
+ parse_eq({ true }, { '\195' })
end)
it('restores FIXSTR as special dict', function()
- parse_eq({{_TYPE={}, _VAL={'ab'}}}, {'\162ab'})
+ parse_eq({ { _TYPE = {}, _VAL = { 'ab' } } }, { '\162ab' })
eq(1, eval('g:parsed[0]._TYPE is v:msgpack_types.string'))
end)
it('restores BIN 8 as string', function()
- parse_eq({'ab'}, {'\196\002ab'})
+ parse_eq({ 'ab' }, { '\196\002ab' })
end)
it('restores FIXEXT1 as special dictionary', function()
- parse_eq({{_TYPE={}, _VAL={0x10, {"", ""}}}}, {'\212\016', ''})
+ parse_eq({ { _TYPE = {}, _VAL = { 0x10, { '', '' } } } }, { '\212\016', '' })
eq(1, eval('g:parsed[0]._TYPE is v:msgpack_types.ext'))
end)
it('restores MAP with BIN key as special dictionary', function()
- parse_eq({{_TYPE={}, _VAL={{'a', ''}}}}, {'\129\196\001a\196\n'})
+ parse_eq({ { _TYPE = {}, _VAL = { { 'a', '' } } } }, { '\129\196\001a\196\n' })
eq(1, eval('g:parsed[0]._TYPE is v:msgpack_types.map'))
end)
@@ -449,72 +449,93 @@ describe('msgpackparse() function', function()
command('let dumped = ["\\x82\\xA1a\\xC4\\n\\xA1a\\xC4\\n"]')
-- FIXME Internal error bug, can't use parse_eq() here
command('silent! let parsed = msgpackparse(dumped)')
- eq({{_TYPE={}, _VAL={ {{_TYPE={}, _VAL={'a'}}, ''},
- {{_TYPE={}, _VAL={'a'}}, ''}}} }, eval('parsed'))
+ eq({
+ {
+ _TYPE = {},
+ _VAL = {
+ { { _TYPE = {}, _VAL = { 'a' } }, '' },
+ { { _TYPE = {}, _VAL = { 'a' } }, '' },
+ },
+ },
+ }, eval('parsed'))
eq(1, eval('g:parsed[0]._TYPE is v:msgpack_types.map'))
eq(1, eval('g:parsed[0]._VAL[0][0]._TYPE is v:msgpack_types.string'))
eq(1, eval('g:parsed[0]._VAL[1][0]._TYPE is v:msgpack_types.string'))
end)
it('restores MAP with MAP key as special dictionary', function()
- parse_eq({{_TYPE={}, _VAL={{{}, ''}}}}, {'\129\128\196\n'})
+ parse_eq({ { _TYPE = {}, _VAL = { { {}, '' } } } }, { '\129\128\196\n' })
eq(1, eval('g:parsed[0]._TYPE is v:msgpack_types.map'))
end)
it('msgpackparse(systemlist(...)) does not segfault. #3135', function()
- local cmd = "sort(keys(msgpackparse(systemlist('"
- ..helpers.nvim_prog.." --api-info'))[0]))"
+ local cmd = "sort(keys(msgpackparse(systemlist('" .. helpers.nvim_prog .. " --api-info'))[0]))"
eval(cmd)
- eval(cmd) -- do it again (try to force segfault)
- local api_info = eval(cmd) -- do it again
+ eval(cmd) -- do it again (try to force segfault)
+ local api_info = eval(cmd) -- do it again
if is_os('win') then
helpers.assert_alive()
pending('msgpackparse() has a bug on windows')
return
end
- eq({'error_types', 'functions', 'types',
- 'ui_events', 'ui_options', 'version'}, api_info)
+ eq({ 'error_types', 'functions', 'types', 'ui_events', 'ui_options', 'version' }, api_info)
end)
it('fails when called with no arguments', function()
- eq('Vim(call):E119: Not enough arguments for function: msgpackparse',
- exc_exec('call msgpackparse()'))
+ eq(
+ 'Vim(call):E119: Not enough arguments for function: msgpackparse',
+ exc_exec('call msgpackparse()')
+ )
end)
it('fails when called with two arguments', function()
- eq('Vim(call):E118: Too many arguments for function: msgpackparse',
- exc_exec('call msgpackparse(["", ""], 1)'))
+ eq(
+ 'Vim(call):E118: Too many arguments for function: msgpackparse',
+ exc_exec('call msgpackparse(["", ""], 1)')
+ )
end)
it('fails to parse a string', function()
- eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
- exc_exec('call msgpackparse("abcdefghijklmnopqrstuvwxyz")'))
+ eq(
+ 'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
+ exc_exec('call msgpackparse("abcdefghijklmnopqrstuvwxyz")')
+ )
end)
it('fails to parse a number', function()
- eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
- exc_exec('call msgpackparse(127)'))
+ eq(
+ 'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
+ exc_exec('call msgpackparse(127)')
+ )
end)
it('fails to parse a dictionary', function()
- eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
- exc_exec('call msgpackparse({})'))
+ eq(
+ 'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
+ exc_exec('call msgpackparse({})')
+ )
end)
it('fails to parse a funcref', function()
- eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
- exc_exec('call msgpackparse(function("tr"))'))
+ eq(
+ 'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
+ exc_exec('call msgpackparse(function("tr"))')
+ )
end)
it('fails to parse a partial', function()
command('function T() dict\nendfunction')
- eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
- exc_exec('call msgpackparse(function("T", [1, 2], {}))'))
+ eq(
+ 'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
+ exc_exec('call msgpackparse(function("T", [1, 2], {}))')
+ )
end)
it('fails to parse a float', function()
- eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
- exc_exec('call msgpackparse(0.0)'))
+ eq(
+ 'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
+ exc_exec('call msgpackparse(0.0)')
+ )
end)
it('fails on incomplete msgpack string', function()
@@ -541,11 +562,11 @@ describe('msgpackdump() function', function()
end
it('dumps string as BIN 8', function()
- dump_eq({'\196\004Test'}, '["Test"]')
+ dump_eq({ '\196\004Test' }, '["Test"]')
end)
it('dumps blob as BIN 8', function()
- dump_eq({'\196\005Bl\nb!'}, '[0z426c006221]')
+ dump_eq({ '\196\005Bl\nb!' }, '[0z426c006221]')
end)
it('can dump generic mapping with generic mapping keys and values', function()
@@ -553,209 +574,245 @@ describe('msgpackdump() function', function()
command('let todumpv1 = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
command('let todumpv2 = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
command('call add(todump._VAL, [todumpv1, todumpv2])')
- dump_eq({'\129\128\128'}, '[todump]')
+ dump_eq({ '\129\128\128' }, '[todump]')
end)
it('can dump v:true', function()
- dump_eq({'\195'}, '[v:true]')
+ dump_eq({ '\195' }, '[v:true]')
end)
it('can dump v:false', function()
- dump_eq({'\194'}, '[v:false]')
+ dump_eq({ '\194' }, '[v:false]')
end)
it('can dump v:null', function()
- dump_eq({'\192'}, '[v:null]')
+ dump_eq({ '\192' }, '[v:null]')
end)
it('can dump special bool mapping (true)', function()
command('let todump = {"_TYPE": v:msgpack_types.boolean, "_VAL": 1}')
- dump_eq({'\195'}, '[todump]')
+ dump_eq({ '\195' }, '[todump]')
end)
it('can dump special bool mapping (false)', function()
command('let todump = {"_TYPE": v:msgpack_types.boolean, "_VAL": 0}')
- dump_eq({'\194'}, '[todump]')
+ dump_eq({ '\194' }, '[todump]')
end)
it('can dump special nil mapping', function()
command('let todump = {"_TYPE": v:msgpack_types.nil, "_VAL": 0}')
- dump_eq({'\192'}, '[todump]')
+ dump_eq({ '\192' }, '[todump]')
end)
it('can dump special ext mapping', function()
command('let todump = {"_TYPE": v:msgpack_types.ext, "_VAL": [5, ["",""]]}')
- dump_eq({'\212\005', ''}, '[todump]')
+ dump_eq({ '\212\005', '' }, '[todump]')
end)
it('can dump special array mapping', function()
command('let todump = {"_TYPE": v:msgpack_types.array, "_VAL": [5, [""]]}')
- dump_eq({'\146\005\145\196\n'}, '[todump]')
+ dump_eq({ '\146\005\145\196\n' }, '[todump]')
end)
it('can dump special UINT64_MAX mapping', function()
command('let todump = {"_TYPE": v:msgpack_types.integer}')
command('let todump._VAL = [1, 3, 0x7FFFFFFF, 0x7FFFFFFF]')
- dump_eq({'\207\255\255\255\255\255\255\255\255'}, '[todump]')
+ dump_eq({ '\207\255\255\255\255\255\255\255\255' }, '[todump]')
end)
it('can dump special INT64_MIN mapping', function()
command('let todump = {"_TYPE": v:msgpack_types.integer}')
command('let todump._VAL = [-1, 2, 0, 0]')
- dump_eq({'\211\128\n\n\n\n\n\n\n'}, '[todump]')
+ dump_eq({ '\211\128\n\n\n\n\n\n\n' }, '[todump]')
end)
it('fails to dump a function reference', function()
command('let Todump = function("tr")')
- eq('Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference',
- exc_exec('call msgpackdump([Todump])'))
+ eq(
+ 'Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference',
+ exc_exec('call msgpackdump([Todump])')
+ )
end)
it('fails to dump a partial', function()
command('function T() dict\nendfunction')
command('let Todump = function("T", [1, 2], {})')
- eq('Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference',
- exc_exec('call msgpackdump([Todump])'))
+ eq(
+ 'Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference',
+ exc_exec('call msgpackdump([Todump])')
+ )
end)
it('fails to dump a function reference in a list', function()
command('let todump = [function("tr")]')
- eq('Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, index 0: attempt to dump function reference',
- exc_exec('call msgpackdump([todump])'))
+ eq(
+ 'Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, index 0: attempt to dump function reference',
+ exc_exec('call msgpackdump([todump])')
+ )
end)
it('fails to dump a recursive list', function()
command('let todump = [[[]]]')
command('call add(todump[0][0], todump)')
- eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 0, index 0',
- exc_exec('call msgpackdump([todump])'))
+ eq(
+ 'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 0, index 0',
+ exc_exec('call msgpackdump([todump])')
+ )
end)
it('fails to dump a recursive dict', function()
command('let todump = {"d": {"d": {}}}')
command('call extend(todump.d.d, {"d": todump})')
- eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key \'d\', key \'d\', key \'d\'',
- exc_exec('call msgpackdump([todump])'))
+ eq(
+ "Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key 'd', key 'd', key 'd'",
+ exc_exec('call msgpackdump([todump])')
+ )
end)
it('can dump dict with two same dicts inside', function()
command('let inter = {}')
command('let todump = {"a": inter, "b": inter}')
- dump_eq({"\130\161a\128\161b\128"}, '[todump]')
+ dump_eq({ '\130\161a\128\161b\128' }, '[todump]')
end)
it('can dump list with two same lists inside', function()
command('let inter = []')
command('let todump = [inter, inter]')
- dump_eq({"\146\144\144"}, '[todump]')
+ dump_eq({ '\146\144\144' }, '[todump]')
end)
it('fails to dump a recursive list in a special dict', function()
command('let todump = {"_TYPE": v:msgpack_types.array, "_VAL": []}')
command('call add(todump._VAL, todump)')
- eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0',
- exc_exec('call msgpackdump([todump])'))
+ eq(
+ 'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0',
+ exc_exec('call msgpackdump([todump])')
+ )
end)
it('fails to dump a recursive (key) map in a special dict', function()
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
command('call add(todump._VAL, [todump, 0])')
- eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0',
- exc_exec('call msgpackdump([todump])'))
+ eq(
+ 'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0',
+ exc_exec('call msgpackdump([todump])')
+ )
end)
it('fails to dump a recursive (val) map in a special dict', function()
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
command('call add(todump._VAL, [0, todump])')
- eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key 0 at index 0 from special map',
- exc_exec('call msgpackdump([todump])'))
+ eq(
+ 'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key 0 at index 0 from special map',
+ exc_exec('call msgpackdump([todump])')
+ )
end)
it('fails to dump a recursive (key) map in a special dict, _VAL reference', function()
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": [[[], []]]}')
command('call add(todump._VAL[0][0], todump._VAL)')
- eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [[[[...@0], []]]] at index 0 from special map, index 0',
- exc_exec('call msgpackdump([todump])'))
+ eq(
+ 'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [[[[...@0], []]]] at index 0 from special map, index 0',
+ exc_exec('call msgpackdump([todump])')
+ )
end)
it('fails to dump a recursive (val) map in a special dict, _VAL reference', function()
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": [[[], []]]}')
command('call add(todump._VAL[0][1], todump._VAL)')
- eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [] at index 0 from special map, index 0',
- exc_exec('call msgpackdump([todump])'))
+ eq(
+ 'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [] at index 0 from special map, index 0',
+ exc_exec('call msgpackdump([todump])')
+ )
end)
- it('fails to dump a recursive (val) special list in a special dict',
- function()
+ it('fails to dump a recursive (val) special list in a special dict', function()
command('let todump = {"_TYPE": v:msgpack_types.array, "_VAL": []}')
command('call add(todump._VAL, [0, todump._VAL])')
- eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 1',
- exc_exec('call msgpackdump([todump])'))
+ eq(
+ 'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 1',
+ exc_exec('call msgpackdump([todump])')
+ )
end)
it('fails when called with no arguments', function()
- eq('Vim(call):E119: Not enough arguments for function: msgpackdump',
- exc_exec('call msgpackdump()'))
+ eq(
+ 'Vim(call):E119: Not enough arguments for function: msgpackdump',
+ exc_exec('call msgpackdump()')
+ )
end)
it('fails when called with three arguments', function()
- eq('Vim(call):E118: Too many arguments for function: msgpackdump',
- exc_exec('call msgpackdump(["", ""], 1, 2)'))
+ eq(
+ 'Vim(call):E118: Too many arguments for function: msgpackdump',
+ exc_exec('call msgpackdump(["", ""], 1, 2)')
+ )
end)
it('fails to dump a string', function()
- eq('Vim(call):E686: Argument of msgpackdump() must be a List',
- exc_exec('call msgpackdump("abcdefghijklmnopqrstuvwxyz")'))
+ eq(
+ 'Vim(call):E686: Argument of msgpackdump() must be a List',
+ exc_exec('call msgpackdump("abcdefghijklmnopqrstuvwxyz")')
+ )
end)
it('fails to dump a number', function()
- eq('Vim(call):E686: Argument of msgpackdump() must be a List',
- exc_exec('call msgpackdump(127)'))
+ eq(
+ 'Vim(call):E686: Argument of msgpackdump() must be a List',
+ exc_exec('call msgpackdump(127)')
+ )
end)
it('fails to dump a dictionary', function()
- eq('Vim(call):E686: Argument of msgpackdump() must be a List',
- exc_exec('call msgpackdump({})'))
+ eq('Vim(call):E686: Argument of msgpackdump() must be a List', exc_exec('call msgpackdump({})'))
end)
it('fails to dump a funcref', function()
- eq('Vim(call):E686: Argument of msgpackdump() must be a List',
- exc_exec('call msgpackdump(function("tr"))'))
+ eq(
+ 'Vim(call):E686: Argument of msgpackdump() must be a List',
+ exc_exec('call msgpackdump(function("tr"))')
+ )
end)
it('fails to dump a partial', function()
command('function T() dict\nendfunction')
- eq('Vim(call):E686: Argument of msgpackdump() must be a List',
- exc_exec('call msgpackdump(function("T", [1, 2], {}))'))
+ eq(
+ 'Vim(call):E686: Argument of msgpackdump() must be a List',
+ exc_exec('call msgpackdump(function("T", [1, 2], {}))')
+ )
end)
it('fails to dump a float', function()
- eq('Vim(call):E686: Argument of msgpackdump() must be a List',
- exc_exec('call msgpackdump(0.0)'))
+ eq(
+ 'Vim(call):E686: Argument of msgpackdump() must be a List',
+ exc_exec('call msgpackdump(0.0)')
+ )
end)
it('fails to dump special value', function()
- for _, val in ipairs({'v:true', 'v:false', 'v:null'}) do
- eq('Vim(call):E686: Argument of msgpackdump() must be a List',
- exc_exec('call msgpackdump(' .. val .. ')'))
+ for _, val in ipairs({ 'v:true', 'v:false', 'v:null' }) do
+ eq(
+ 'Vim(call):E686: Argument of msgpackdump() must be a List',
+ exc_exec('call msgpackdump(' .. val .. ')')
+ )
end
end)
it('can dump NULL string', function()
- dump_eq({'\196\n'}, '[$XXX_UNEXISTENT_VAR_XXX]')
- dump_eq({'\196\n'}, '[{"_TYPE": v:msgpack_types.binary, "_VAL": [$XXX_UNEXISTENT_VAR_XXX]}]')
- dump_eq({'\160'}, '[{"_TYPE": v:msgpack_types.string, "_VAL": [$XXX_UNEXISTENT_VAR_XXX]}]')
+ dump_eq({ '\196\n' }, '[$XXX_UNEXISTENT_VAR_XXX]')
+ dump_eq({ '\196\n' }, '[{"_TYPE": v:msgpack_types.binary, "_VAL": [$XXX_UNEXISTENT_VAR_XXX]}]')
+ dump_eq({ '\160' }, '[{"_TYPE": v:msgpack_types.string, "_VAL": [$XXX_UNEXISTENT_VAR_XXX]}]')
end)
it('can dump NULL blob', function()
- eq({'\196\n'}, eval('msgpackdump([v:_null_blob])'))
+ eq({ '\196\n' }, eval('msgpackdump([v:_null_blob])'))
end)
it('can dump NULL list', function()
- eq({'\144'}, eval('msgpackdump([v:_null_list])'))
+ eq({ '\144' }, eval('msgpackdump([v:_null_list])'))
end)
it('can dump NULL dictionary', function()
- eq({'\128'}, eval('msgpackdump([v:_null_dict])'))
+ eq({ '\128' }, eval('msgpackdump([v:_null_dict])'))
end)
end)
diff --git a/test/functional/vimscript/null_spec.lua b/test/functional/vimscript/null_spec.lua
index d4c36d835b..805cd13844 100644
--- a/test/functional/vimscript/null_spec.lua
+++ b/test/functional/vimscript/null_spec.lua
@@ -1,23 +1,22 @@
local helpers = require('test.functional.helpers')(after_each)
-local curbufmeths = helpers.curbufmeths
local exc_exec = helpers.exc_exec
local command = helpers.command
local clear = helpers.clear
-local meths = helpers.meths
-local funcs = helpers.funcs
+local api = helpers.api
+local fn = helpers.fn
local eq = helpers.eq
local function redir_exec(cmd)
- meths.set_var('__redir_exec_cmd', cmd)
+ api.nvim_set_var('__redir_exec_cmd', cmd)
command([[
redir => g:__redir_exec_output
silent! execute g:__redir_exec_cmd
redir END
]])
- local ret = meths.get_var('__redir_exec_output')
- meths.del_var('__redir_exec_output')
- meths.del_var('__redir_exec_cmd')
+ local ret = api.nvim_get_var('__redir_exec_output')
+ api.nvim_del_var('__redir_exec_output')
+ api.nvim_del_var('__redir_exec_cmd')
return ret
end
@@ -40,12 +39,11 @@ describe('NULL', function()
end
local null_expr_test = function(name, expr, err, val, after)
it(name, function()
- eq((err == 0) and ('') or ('\n' .. err),
- redir_exec('let g:_var = ' .. expr))
+ eq((err == 0) and '' or ('\n' .. err), redir_exec('let g:_var = ' .. expr))
if val == nil then
- eq(0, funcs.exists('g:_var'))
+ eq(0, fn.exists('g:_var'))
else
- eq(val, meths.get_var('_var'))
+ eq(val, api.nvim_get_var('_var'))
end
if after ~= nil then
after()
@@ -58,25 +56,31 @@ describe('NULL', function()
null_expr_test('is equal to empty list (reverse order)', '[] == L', 0, 1)
-- Correct behaviour
- null_test('can be :unlet item with error message for empty list', ':unlet L[0]',
- 'Vim(unlet):E684: List index out of range: 0')
- null_expr_test('can be indexed with error message for empty list', 'L[0]',
- 'E684: List index out of range: 0', nil)
+ null_test(
+ 'can be :unlet item with error message for empty list',
+ ':unlet L[0]',
+ 'Vim(unlet):E684: List index out of range: 0'
+ )
+ null_expr_test(
+ 'can be indexed with error message for empty list',
+ 'L[0]',
+ 'E684: List index out of range: 0',
+ nil
+ )
null_expr_test('can be splice-indexed', 'L[:]', 0, {})
null_expr_test('is not locked', 'islocked("v:_null_list")', 0, 0)
null_test('is accepted by :for', 'for x in L|throw x|endfor', 0)
null_expr_test('does not crash append()', 'append(0, L)', 0, 0, function()
- eq({''}, curbufmeths.get_lines(0, -1, false))
+ eq({ '' }, api.nvim_buf_get_lines(0, 0, -1, false))
end)
null_expr_test('does not crash setline()', 'setline(1, L)', 0, 0, function()
- eq({''}, curbufmeths.get_lines(0, -1, false))
+ eq({ '' }, api.nvim_buf_get_lines(0, 0, -1, false))
end)
null_expr_test('is identical to itself', 'L is L', 0, 1)
null_expr_test('can be sliced', 'L[:]', 0, {})
null_expr_test('can be copied', 'copy(L)', 0, {})
null_expr_test('can be deepcopied', 'deepcopy(L)', 0, {})
- null_expr_test('does not crash when indexed', 'L[1]',
- 'E684: List index out of range: 1', nil)
+ null_expr_test('does not crash when indexed', 'L[1]', 'E684: List index out of range: 1', nil)
null_expr_test('does not crash call()', 'call("arglistid", L)', 0, 0)
null_expr_test('does not crash col()', 'col(L)', 0, 0)
null_expr_test('does not crash virtcol()', 'virtcol(L)', 0, 0)
@@ -96,44 +100,92 @@ describe('NULL', function()
null_test('does not crash lockvar', 'lockvar! L', 0)
null_expr_test('can be added to itself', '(L + L)', 0, {})
null_expr_test('can be added to itself', '(L + L) is L', 0, 1)
- null_expr_test('can be added to non-empty list', '([1] + L)', 0, {1})
- null_expr_test('can be added to non-empty list (reversed)', '(L + [1])', 0, {1})
+ null_expr_test('can be added to non-empty list', '([1] + L)', 0, { 1 })
+ null_expr_test('can be added to non-empty list (reversed)', '(L + [1])', 0, { 1 })
null_expr_test('is equal to itself', 'L == L', 0, 1)
null_expr_test('is not not equal to itself', 'L != L', 0, 0)
null_expr_test('counts correctly', 'count([L], L)', 0, 1)
null_expr_test('makes map() return v:_null_list', 'map(L, "v:val") is# L', 0, 1)
null_expr_test('makes filter() return v:_null_list', 'filter(L, "1") is# L', 0, 1)
- null_test('is treated by :let as empty list', ':let [l] = L', 'Vim(let):E688: More targets than List items')
- null_expr_test('is accepted as an empty list by inputlist()', '[feedkeys("\\n"), inputlist(L)]',
- 'Type number and <Enter> or click with the mouse (q or empty cancels): ', {0, 0})
- null_expr_test('is accepted as an empty list by writefile()',
- ('[writefile(L, "%s"), readfile("%s")]'):format(tmpfname, tmpfname),
- 0, {0, {}})
- null_expr_test('makes add() error out', 'add(L, 0)',
- 'E742: Cannot change value of add() argument', 1)
- null_expr_test('makes insert() error out', 'insert(L, 1)',
- 'E742: Cannot change value of insert() argument', 0)
- null_expr_test('does not crash remove()', 'remove(L, 0)',
- 'E742: Cannot change value of remove() argument', 0)
- null_expr_test('makes reverse() error out', 'reverse(L)',
- 'E742: Cannot change value of reverse() argument', 0)
- null_expr_test('makes sort() error out', 'sort(L)',
- 'E742: Cannot change value of sort() argument', 0)
- null_expr_test('makes uniq() error out', 'uniq(L)',
- 'E742: Cannot change value of uniq() argument', 0)
- null_expr_test('does not crash extend()', 'extend(L, [1])', 'E742: Cannot change value of extend() argument', 0)
- null_expr_test('does not crash extend() (second position)', 'extend([1], L)', 0, {1})
+ null_test(
+ 'is treated by :let as empty list',
+ ':let [l] = L',
+ 'Vim(let):E688: More targets than List items'
+ )
+ null_expr_test(
+ 'is accepted as an empty list by inputlist()',
+ '[feedkeys("\\n"), inputlist(L)]',
+ 'Type number and <Enter> or click with the mouse (q or empty cancels): ',
+ { 0, 0 }
+ )
+ null_expr_test(
+ 'is accepted as an empty list by writefile()',
+ ('[writefile(L, "%s"), readfile("%s")]'):format(tmpfname, tmpfname),
+ 0,
+ { 0, {} }
+ )
+ null_expr_test(
+ 'makes add() error out',
+ 'add(L, 0)',
+ 'E742: Cannot change value of add() argument',
+ 1
+ )
+ null_expr_test(
+ 'makes insert() error out',
+ 'insert(L, 1)',
+ 'E742: Cannot change value of insert() argument',
+ 0
+ )
+ null_expr_test(
+ 'does not crash remove()',
+ 'remove(L, 0)',
+ 'E742: Cannot change value of remove() argument',
+ 0
+ )
+ null_expr_test(
+ 'makes reverse() error out',
+ 'reverse(L)',
+ 'E742: Cannot change value of reverse() argument',
+ 0
+ )
+ null_expr_test(
+ 'makes sort() error out',
+ 'sort(L)',
+ 'E742: Cannot change value of sort() argument',
+ 0
+ )
+ null_expr_test(
+ 'makes uniq() error out',
+ 'uniq(L)',
+ 'E742: Cannot change value of uniq() argument',
+ 0
+ )
+ null_expr_test(
+ 'does not crash extend()',
+ 'extend(L, [1])',
+ 'E742: Cannot change value of extend() argument',
+ 0
+ )
+ null_expr_test('does not crash extend() (second position)', 'extend([1], L)', 0, { 1 })
null_expr_test('makes join() return empty string', 'join(L, "")', 0, '')
null_expr_test('makes msgpackdump() return empty list', 'msgpackdump(L)', 0, {})
null_expr_test('does not crash system()', 'system("cat", L)', 0, '')
null_expr_test('does not crash setreg', 'setreg("x", L)', 0, 0)
null_expr_test('does not crash systemlist()', 'systemlist("cat", L)', 0, {})
- null_test('does not make Neovim crash when v:oldfiles gets assigned to that', ':let v:oldfiles = L|oldfiles', 0)
- null_expr_test('does not make complete() crash or error out',
- 'execute(":normal i\\<C-r>=complete(1, L)[-1]\\n")',
- 0, '', function()
- eq({''}, curbufmeths.get_lines(0, -1, false))
- end)
+ null_test(
+ 'does not make Neovim crash when v:oldfiles gets assigned to that',
+ ':let v:oldfiles = L|oldfiles',
+ 0
+ )
+ null_expr_test(
+ 'does not make complete() crash or error out',
+ 'execute(":normal i\\<C-r>=complete(1, L)[-1]\\n")',
+ 0,
+ '',
+ function()
+ eq({ '' }, api.nvim_buf_get_lines(0, 0, -1, false))
+ end
+ )
null_expr_test('is accepted by setmatches()', 'setmatches(L)', 0, 0)
null_expr_test('is accepted by setqflist()', 'setqflist(L)', 0, 0)
null_expr_test('is accepted by setloclist()', 'setloclist(1, L)', 0, 0)
@@ -143,11 +195,15 @@ describe('NULL', function()
end)
describe('dict', function()
it('does not crash when indexing NULL dict', function()
- eq('\nE716: Key not present in Dictionary: "test"',
- redir_exec('echo v:_null_dict.test'))
+ eq('\nE716: Key not present in Dictionary: "test"', redir_exec('echo v:_null_dict.test'))
end)
- null_expr_test('makes extend error out', 'extend(D, {})', 'E742: Cannot change value of extend() argument', 0)
- null_expr_test('makes extend do nothing', 'extend({1: 2}, D)', 0, {['1']=2})
+ null_expr_test(
+ 'makes extend error out',
+ 'extend(D, {})',
+ 'E742: Cannot change value of extend() argument',
+ 0
+ )
+ null_expr_test('makes extend do nothing', 'extend({1: 2}, D)', 0, { ['1'] = 2 })
null_expr_test('does not crash map()', 'map(D, "v:val")', 0, {})
null_expr_test('does not crash filter()', 'filter(D, "1")', 0, {})
null_expr_test('makes map() return v:_null_dict', 'map(D, "v:val") is# D', 0, 1)
@@ -158,7 +214,12 @@ describe('NULL', function()
null_test('does not crash :execute', 'execute S', 0)
null_expr_test('does not crash execute()', 'execute(S)', 0, '')
null_expr_test('does not crash executable()', 'executable(S)', 0, 0)
- null_expr_test('makes timer_start() error out', 'timer_start(0, S)', 'E921: Invalid callback argument', -1)
+ null_expr_test(
+ 'makes timer_start() error out',
+ 'timer_start(0, S)',
+ 'E921: Invalid callback argument',
+ -1
+ )
null_expr_test('does not crash filereadable()', 'filereadable(S)', 0, 0)
null_expr_test('does not crash filewritable()', 'filewritable(S)', 0, 0)
null_expr_test('does not crash fnamemodify()', 'fnamemodify(S, S)', 0, '')
@@ -169,7 +230,7 @@ describe('NULL', function()
null_expr_test('does not crash glob()', 'glob(S)', 0, '')
null_expr_test('does not crash globpath()', 'globpath(S, S)', 0, '')
null_expr_test('does not crash mkdir()', 'mkdir(S)', 0, 0)
- null_expr_test('does not crash sort()', 'sort(["b", S, "a"])', 0, {'', 'a', 'b'})
+ null_expr_test('does not crash sort()', 'sort(["b", S, "a"])', 0, { '', 'a', 'b' })
null_expr_test('does not crash split()', 'split(S)', 0, {})
null_test('can be used to set an option', 'let &grepprg = S', 0)
diff --git a/test/functional/vimscript/operators_spec.lua b/test/functional/vimscript/operators_spec.lua
index 4d07bc1b05..64f6b60238 100644
--- a/test/functional/vimscript/operators_spec.lua
+++ b/test/functional/vimscript/operators_spec.lua
@@ -7,22 +7,22 @@ describe('Division operator', function()
before_each(clear)
it('returns infinity on {positive}/0.0', function()
- eq('str2float(\'inf\')', eval('string(1.0/0.0)'))
- eq('str2float(\'inf\')', eval('string(1.0e-100/0.0)'))
- eq('str2float(\'inf\')', eval('string(1.0e+100/0.0)'))
- eq('str2float(\'inf\')', eval('string((1.0/0.0)/0.0)'))
+ eq("str2float('inf')", eval('string(1.0/0.0)'))
+ eq("str2float('inf')", eval('string(1.0e-100/0.0)'))
+ eq("str2float('inf')", eval('string(1.0e+100/0.0)'))
+ eq("str2float('inf')", eval('string((1.0/0.0)/0.0)'))
end)
it('returns -infinity on {negative}/0.0', function()
- eq('-str2float(\'inf\')', eval('string((-1.0)/0.0)'))
- eq('-str2float(\'inf\')', eval('string((-1.0e-100)/0.0)'))
- eq('-str2float(\'inf\')', eval('string((-1.0e+100)/0.0)'))
- eq('-str2float(\'inf\')', eval('string((-1.0/0.0)/0.0)'))
+ eq("-str2float('inf')", eval('string((-1.0)/0.0)'))
+ eq("-str2float('inf')", eval('string((-1.0e-100)/0.0)'))
+ eq("-str2float('inf')", eval('string((-1.0e+100)/0.0)'))
+ eq("-str2float('inf')", eval('string((-1.0/0.0)/0.0)'))
end)
it('returns NaN on 0.0/0.0', function()
- eq('str2float(\'nan\')', eval('string(0.0/0.0)'))
- eq('str2float(\'nan\')', eval('string(-(0.0/0.0))'))
- eq('str2float(\'nan\')', eval('string((-0.0)/0.0)'))
+ eq("str2float('nan')", eval('string(0.0/0.0)'))
+ eq("str2float('nan')", eval('string(-(0.0/0.0))'))
+ eq("str2float('nan')", eval('string((-0.0)/0.0)'))
end)
end)
diff --git a/test/functional/vimscript/printf_spec.lua b/test/functional/vimscript/printf_spec.lua
index 27e24c4118..4fa4ea7f4c 100644
--- a/test/functional/vimscript/printf_spec.lua
+++ b/test/functional/vimscript/printf_spec.lua
@@ -3,56 +3,56 @@ local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
local eq = helpers.eq
local eval = helpers.eval
-local funcs = helpers.funcs
-local meths = helpers.meths
+local fn = helpers.fn
+local api = helpers.api
local exc_exec = helpers.exc_exec
describe('printf()', function()
before_each(clear)
it('works with zero and %b', function()
- eq('0', funcs.printf('%lb', 0))
- eq('0', funcs.printf('%llb', 0))
- eq('0', funcs.printf('%zb', 0))
+ eq('0', fn.printf('%lb', 0))
+ eq('0', fn.printf('%llb', 0))
+ eq('0', fn.printf('%zb', 0))
end)
it('works with one and %b', function()
- eq('1', funcs.printf('%b', 1))
- eq('1', funcs.printf('%lb', 1))
- eq('1', funcs.printf('%llb', 1))
- eq('1', funcs.printf('%zb', 1))
+ eq('1', fn.printf('%b', 1))
+ eq('1', fn.printf('%lb', 1))
+ eq('1', fn.printf('%llb', 1))
+ eq('1', fn.printf('%zb', 1))
end)
it('works with 0xff and %b', function()
- eq('11111111', funcs.printf('%b', 0xff))
- eq('11111111', funcs.printf('%lb', 0xff))
- eq('11111111', funcs.printf('%llb', 0xff))
- eq('11111111', funcs.printf('%zb', 0xff))
+ eq('11111111', fn.printf('%b', 0xff))
+ eq('11111111', fn.printf('%lb', 0xff))
+ eq('11111111', fn.printf('%llb', 0xff))
+ eq('11111111', fn.printf('%zb', 0xff))
end)
it('accepts width modifier with %b', function()
- eq(' 1', funcs.printf('%3b', 1))
+ eq(' 1', fn.printf('%3b', 1))
end)
it('accepts prefix modifier with %b', function()
- eq('0b1', funcs.printf('%#b', 1))
+ eq('0b1', fn.printf('%#b', 1))
end)
it('writes capital B with %B', function()
- eq('0B1', funcs.printf('%#B', 1))
+ eq('0B1', fn.printf('%#B', 1))
end)
it('accepts prefix, zero-fill and width modifiers with %b', function()
- eq('0b001', funcs.printf('%#05b', 1))
+ eq('0b001', fn.printf('%#05b', 1))
end)
it('accepts prefix and width modifiers with %b', function()
- eq(' 0b1', funcs.printf('%#5b', 1))
+ eq(' 0b1', fn.printf('%#5b', 1))
end)
it('does not write prefix for zero with prefix and width modifier used with %b', function()
- eq(' 0', funcs.printf('%#5b', 0))
+ eq(' 0', fn.printf('%#5b', 0))
end)
it('accepts precision modifier with %b', function()
- eq('00000', funcs.printf('%.5b', 0))
+ eq('00000', fn.printf('%.5b', 0))
end)
it('accepts all modifiers with %b at once', function()
-- zero-fill modifier is ignored when used with left-align
-- force-sign and add-blank are ignored
-- use-grouping-characters modifier is ignored always
- eq('0b00011 ', funcs.printf('% \'+#0-10.5b', 3))
+ eq('0b00011 ', fn.printf("% '+#0-10.5b", 3))
end)
it('errors out when %b modifier is used for a list', function()
eq('Vim(call):E745: Using a List as a Number', exc_exec('call printf("%b", [])'))
@@ -65,12 +65,12 @@ describe('printf()', function()
local seen_rets = {}
-- Collect all args in an array to avoid possible allocation of the same
-- address after freeing unreferenced values.
- meths.set_var('__args', {})
+ api.nvim_set_var('__args', {})
local function check_printf(expr, is_null)
eq(0, exc_exec('call add(__args, ' .. expr .. ')'))
eq(0, exc_exec('let __result = printf("%p", __args[-1])'))
local id_ret = eval('id(__args[-1])')
- eq(id_ret, meths.get_var('__result'))
+ eq(id_ret, api.nvim_get_var('__result'))
if is_null then
if null_ret then
eq(null_ret, id_ret)
@@ -81,7 +81,7 @@ describe('printf()', function()
eq(nil, seen_rets[id_ret])
seen_rets[id_ret] = expr
end
- meths.del_var('__result')
+ api.nvim_del_var('__result')
end
check_printf('v:_null_list', true)
check_printf('v:_null_dict', true)
diff --git a/test/functional/vimscript/reltime_spec.lua b/test/functional/vimscript/reltime_spec.lua
index 6d661402a6..7cdb78e4ce 100644
--- a/test/functional/vimscript/reltime_spec.lua
+++ b/test/functional/vimscript/reltime_spec.lua
@@ -1,7 +1,7 @@
local helpers = require('test.functional.helpers')(after_each)
-local clear, eq, ok = helpers.clear, helpers.eq, helpers.ok
-local neq, command, funcs = helpers.neq, helpers.command, helpers.funcs
-local reltime, reltimestr, reltimefloat = funcs.reltime, funcs.reltimestr, funcs.reltimefloat
+local clear, eq, ok = helpers.clear, helpers.eq, helpers.ok
+local neq, command, fn = helpers.neq, helpers.command, helpers.fn
+local reltime, reltimestr, reltimefloat = fn.reltime, fn.reltimestr, fn.reltimefloat
describe('reltimestr(), reltimefloat()', function()
before_each(clear)
@@ -15,7 +15,7 @@ describe('reltimestr(), reltimefloat()', function()
neq('0.0', reltimestr(elapsed))
ok(reltimefloat(elapsed) > 0.0)
-- original vim test for < 0.1, but easily fails on travis
- ok(nil ~= string.match(reltimestr(elapsed), "0%."))
+ ok(nil ~= string.match(reltimestr(elapsed), '0%.'))
ok(reltimefloat(elapsed) < 1.0)
local same = reltime(now, now)
@@ -29,7 +29,7 @@ describe('reltimestr(), reltimefloat()', function()
neq('0.0', reltimestr(differs))
ok(reltimefloat(differs) > 0.0)
-- original vim test for < 0.1, but easily fails on travis
- ok(nil ~= string.match(reltimestr(differs), "0%."))
+ ok(nil ~= string.match(reltimestr(differs), '0%.'))
ok(reltimefloat(differs) < 1.0)
end)
diff --git a/test/functional/vimscript/screenchar_spec.lua b/test/functional/vimscript/screenchar_spec.lua
index 767e3c57ef..48b6893865 100644
--- a/test/functional/vimscript/screenchar_spec.lua
+++ b/test/functional/vimscript/screenchar_spec.lua
@@ -1,7 +1,7 @@
local helpers = require('test.functional.helpers')(after_each)
local clear, eq, neq = helpers.clear, helpers.eq, helpers.neq
-local command, meths, funcs = helpers.command, helpers.meths, helpers.funcs
-local tbl_deep_extend = helpers.tbl_deep_extend
+local command, api, fn = helpers.command, helpers.api, helpers.fn
+local tbl_deep_extend = vim.tbl_deep_extend
-- Set up two overlapping floating windows
local setup_floating_windows = function()
@@ -14,15 +14,15 @@ local setup_floating_windows = function()
border = 'none',
}
- local bufnr_1 = meths.create_buf(false, true)
- meths.buf_set_lines(bufnr_1, 0, -1, true, { 'aa' })
+ local bufnr_1 = api.nvim_create_buf(false, true)
+ api.nvim_buf_set_lines(bufnr_1, 0, -1, true, { 'aa' })
local opts_1 = tbl_deep_extend('force', { row = 0, col = 0, zindex = 11 }, base_opts)
- meths.open_win(bufnr_1, false, opts_1)
+ api.nvim_open_win(bufnr_1, false, opts_1)
- local bufnr_2 = meths.create_buf(false, true)
- meths.buf_set_lines(bufnr_2, 0, -1, true, { 'bb' })
+ local bufnr_2 = api.nvim_create_buf(false, true)
+ api.nvim_buf_set_lines(bufnr_2, 0, -1, true, { 'bb' })
local opts_2 = tbl_deep_extend('force', { row = 0, col = 1, zindex = 10 }, base_opts)
- meths.open_win(bufnr_2, false, opts_2)
+ api.nvim_open_win(bufnr_2, false, opts_2)
command('redraw')
end
@@ -32,38 +32,38 @@ describe('screenchar() and family respect floating windows', function()
clear()
-- These commands result into visible text `aabc`.
-- `aab` - from floating windows, `c` - from text in regular window.
- meths.buf_set_lines(0, 0, -1, true, { 'cccc' })
+ api.nvim_buf_set_lines(0, 0, -1, true, { 'cccc' })
setup_floating_windows()
end)
it('screenattr()', function()
- local attr_1 = funcs.screenattr(1, 1)
- local attr_2 = funcs.screenattr(1, 2)
- local attr_3 = funcs.screenattr(1, 3)
- local attr_4 = funcs.screenattr(1, 4)
+ local attr_1 = fn.screenattr(1, 1)
+ local attr_2 = fn.screenattr(1, 2)
+ local attr_3 = fn.screenattr(1, 3)
+ local attr_4 = fn.screenattr(1, 4)
eq(attr_1, attr_2)
eq(attr_1, attr_3)
neq(attr_1, attr_4)
end)
it('screenchar()', function()
- eq(97, funcs.screenchar(1, 1))
- eq(97, funcs.screenchar(1, 2))
- eq(98, funcs.screenchar(1, 3))
- eq(99, funcs.screenchar(1, 4))
+ eq(97, fn.screenchar(1, 1))
+ eq(97, fn.screenchar(1, 2))
+ eq(98, fn.screenchar(1, 3))
+ eq(99, fn.screenchar(1, 4))
end)
it('screenchars()', function()
- eq({ 97 }, funcs.screenchars(1, 1))
- eq({ 97 }, funcs.screenchars(1, 2))
- eq({ 98 }, funcs.screenchars(1, 3))
- eq({ 99 }, funcs.screenchars(1, 4))
+ eq({ 97 }, fn.screenchars(1, 1))
+ eq({ 97 }, fn.screenchars(1, 2))
+ eq({ 98 }, fn.screenchars(1, 3))
+ eq({ 99 }, fn.screenchars(1, 4))
end)
it('screenstring()', function()
- eq('a', funcs.screenstring(1, 1))
- eq('a', funcs.screenstring(1, 2))
- eq('b', funcs.screenstring(1, 3))
- eq('c', funcs.screenstring(1, 4))
+ eq('a', fn.screenstring(1, 1))
+ eq('a', fn.screenstring(1, 2))
+ eq('b', fn.screenstring(1, 3))
+ eq('c', fn.screenstring(1, 4))
end)
end)
diff --git a/test/functional/vimscript/screenpos_spec.lua b/test/functional/vimscript/screenpos_spec.lua
index 8b8276457d..b951d830a6 100644
--- a/test/functional/vimscript/screenpos_spec.lua
+++ b/test/functional/vimscript/screenpos_spec.lua
@@ -1,6 +1,6 @@
local helpers = require('test.functional.helpers')(after_each)
-local clear, eq, meths = helpers.clear, helpers.eq, helpers.meths
-local command, funcs = helpers.command, helpers.funcs
+local clear, eq, api = helpers.clear, helpers.eq, helpers.api
+local command, fn = helpers.command, helpers.fn
local feed = helpers.feed
before_each(clear)
@@ -8,66 +8,72 @@ before_each(clear)
describe('screenpos() function', function()
it('works in floating window with border', function()
local opts = {
- relative='editor',
- height=8,
- width=12,
- row=6,
- col=8,
- anchor='NW',
- style='minimal',
- border='none',
- focusable=1
+ relative = 'editor',
+ height = 8,
+ width = 12,
+ row = 6,
+ col = 8,
+ anchor = 'NW',
+ style = 'minimal',
+ border = 'none',
+ focusable = 1,
}
- local float = meths.open_win(meths.create_buf(false, true), false, opts)
+ local float = api.nvim_open_win(api.nvim_create_buf(false, true), false, opts)
command('redraw')
- eq({row = 7, col = 9, endcol = 9, curscol = 9}, funcs.screenpos(float, 1, 1))
+ eq({ row = 7, col = 9, endcol = 9, curscol = 9 }, fn.screenpos(float, 1, 1))
-- only left border
- opts.border = {'', '', '', '', '', '', '', '|'}
- meths.win_set_config(float, opts)
+ opts.border = { '', '', '', '', '', '', '', '|' }
+ api.nvim_win_set_config(float, opts)
command('redraw')
- eq({row = 7, col = 10, endcol = 10, curscol = 10}, funcs.screenpos(float, 1, 1))
+ eq({ row = 7, col = 10, endcol = 10, curscol = 10 }, fn.screenpos(float, 1, 1))
-- only top border
- opts.border = {'', '_', '', '', '', '', '', ''}
- meths.win_set_config(float, opts)
+ opts.border = { '', '_', '', '', '', '', '', '' }
+ api.nvim_win_set_config(float, opts)
command('redraw')
- eq({row = 8, col = 9, endcol = 9, curscol = 9}, funcs.screenpos(float, 1, 1))
+ eq({ row = 8, col = 9, endcol = 9, curscol = 9 }, fn.screenpos(float, 1, 1))
-- both left and top border
opts.border = 'single'
- meths.win_set_config(float, opts)
+ api.nvim_win_set_config(float, opts)
command('redraw')
- eq({row = 8, col = 10, endcol = 10, curscol = 10}, funcs.screenpos(float, 1, 1))
+ eq({ row = 8, col = 10, endcol = 10, curscol = 10 }, fn.screenpos(float, 1, 1))
end)
it('works for folded line with virt_lines attached to line above', function()
- meths.buf_set_lines(0, 0, -1, true, {'aaa', 'bbb', 'ccc', 'ddd'})
- local ns = meths.create_namespace('')
- meths.buf_set_extmark(0, ns, 0, 0, { virt_lines = {{{'abb'}}, {{'acc'}}, {{'add'}}} })
+ api.nvim_buf_set_lines(0, 0, -1, true, { 'aaa', 'bbb', 'ccc', 'ddd' })
+ local ns = api.nvim_create_namespace('')
+ api.nvim_buf_set_extmark(
+ 0,
+ ns,
+ 0,
+ 0,
+ { virt_lines = { { { 'abb' } }, { { 'acc' } }, { { 'add' } } } }
+ )
command('2,3fold')
- eq({row = 5, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 2, 1))
- eq({row = 5, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 3, 1))
- eq({row = 6, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 4, 1))
+ eq({ row = 5, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 2, 1))
+ eq({ row = 5, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 3, 1))
+ eq({ row = 6, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 4, 1))
feed('<C-E>')
- eq({row = 4, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 2, 1))
- eq({row = 4, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 3, 1))
- eq({row = 5, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 4, 1))
+ eq({ row = 4, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 2, 1))
+ eq({ row = 4, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 3, 1))
+ eq({ row = 5, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 4, 1))
feed('<C-E>')
- eq({row = 3, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 2, 1))
- eq({row = 3, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 3, 1))
- eq({row = 4, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 4, 1))
+ eq({ row = 3, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 2, 1))
+ eq({ row = 3, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 3, 1))
+ eq({ row = 4, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 4, 1))
feed('<C-E>')
- eq({row = 2, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 2, 1))
- eq({row = 2, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 3, 1))
- eq({row = 3, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 4, 1))
+ eq({ row = 2, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 2, 1))
+ eq({ row = 2, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 3, 1))
+ eq({ row = 3, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 4, 1))
feed('<C-E>')
- eq({row = 1, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 2, 1))
- eq({row = 1, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 3, 1))
- eq({row = 2, col = 1, endcol = 1, curscol = 1}, funcs.screenpos(0, 4, 1))
+ eq({ row = 1, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 2, 1))
+ eq({ row = 1, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 3, 1))
+ eq({ row = 2, col = 1, endcol = 1, curscol = 1 }, fn.screenpos(0, 4, 1))
end)
end)
diff --git a/test/functional/vimscript/server_spec.lua b/test/functional/vimscript/server_spec.lua
index c89a0c4e93..360fcf0dfe 100644
--- a/test/functional/vimscript/server_spec.lua
+++ b/test/functional/vimscript/server_spec.lua
@@ -1,7 +1,7 @@
local helpers = require('test.functional.helpers')(after_each)
local assert_log = helpers.assert_log
local eq, neq, eval = helpers.eq, helpers.neq, helpers.eval
-local clear, funcs, meths = helpers.clear, helpers.funcs, helpers.meths
+local clear, fn, api = helpers.clear, helpers.fn, helpers.api
local ok = helpers.ok
local matches = helpers.matches
local pcall_err = helpers.pcall_err
@@ -11,8 +11,8 @@ local is_os = helpers.is_os
local testlog = 'Xtest-server-log'
local function clear_serverlist()
- for _, server in pairs(funcs.serverlist()) do
- funcs.serverstop(server)
+ for _, server in pairs(fn.serverlist()) do
+ fn.serverstop(server)
end
end
@@ -24,120 +24,119 @@ describe('server', function()
it('serverstart() stores sockets in $XDG_RUNTIME_DIR', function()
local dir = 'Xtest_xdg_run'
mkdir(dir)
- clear({ env={ XDG_RUNTIME_DIR=dir } })
- matches(dir, funcs.stdpath('run'))
+ clear({ env = { XDG_RUNTIME_DIR = dir } })
+ matches(dir, fn.stdpath('run'))
if not is_os('win') then
- matches(dir, funcs.serverstart())
+ matches(dir, fn.serverstart())
end
end)
-
it('serverstart(), serverstop() does not set $NVIM', function()
clear()
local s = eval('serverstart()')
- assert(s ~= nil and s:len() > 0, "serverstart() returned empty")
+ assert(s ~= nil and s:len() > 0, 'serverstart() returned empty')
eq('', eval('$NVIM'))
eq('', eval('$NVIM_LISTEN_ADDRESS'))
- eq(1, eval("serverstop('"..s.."')"))
+ eq(1, eval("serverstop('" .. s .. "')"))
eq('', eval('$NVIM_LISTEN_ADDRESS'))
end)
it('sets new v:servername if $NVIM_LISTEN_ADDRESS is invalid', function()
- clear({env={NVIM_LISTEN_ADDRESS='.'}})
+ clear({ env = { NVIM_LISTEN_ADDRESS = '.' } })
-- Cleared on startup.
eq('', eval('$NVIM_LISTEN_ADDRESS'))
- local servers = funcs.serverlist()
+ local servers = fn.serverlist()
eq(1, #servers)
- ok(string.len(servers[1]) > 4) -- "~/.local/state/nvim…/…" or "\\.\pipe\…"
+ ok(string.len(servers[1]) > 4) -- "~/.local/state/nvim…/…" or "\\.\pipe\…"
end)
it('sets v:servername at startup or if all servers were stopped', function()
clear()
- local initial_server = meths.get_vvar('servername')
- assert(initial_server ~= nil and initial_server:len() > 0,
- 'v:servername was not initialized')
+ local initial_server = api.nvim_get_vvar('servername')
+ assert(initial_server ~= nil and initial_server:len() > 0, 'v:servername was not initialized')
-- v:servername is readonly so we cannot unset it--but we can test that it
-- does not get set again thereafter.
- local s = funcs.serverstart()
- assert(s ~= nil and s:len() > 0, "serverstart() returned empty")
+ local s = fn.serverstart()
+ assert(s ~= nil and s:len() > 0, 'serverstart() returned empty')
neq(initial_server, s)
-- serverstop() does _not_ modify v:servername...
- eq(1, funcs.serverstop(s))
- eq(initial_server, meths.get_vvar('servername'))
+ eq(1, fn.serverstop(s))
+ eq(initial_server, api.nvim_get_vvar('servername'))
-- ...unless we stop _all_ servers.
- eq(1, funcs.serverstop(funcs.serverlist()[1]))
- eq('', meths.get_vvar('servername'))
+ eq(1, fn.serverstop(fn.serverlist()[1]))
+ eq('', api.nvim_get_vvar('servername'))
-- v:servername and $NVIM take the next available server.
- local servername = (is_os('win') and [[\\.\pipe\Xtest-functional-server-pipe]]
- or './Xtest-functional-server-socket')
- funcs.serverstart(servername)
- eq(servername, meths.get_vvar('servername'))
+ local servername = (
+ is_os('win') and [[\\.\pipe\Xtest-functional-server-pipe]]
+ or './Xtest-functional-server-socket'
+ )
+ fn.serverstart(servername)
+ eq(servername, api.nvim_get_vvar('servername'))
-- Not set in the current process, only in children.
eq('', eval('$NVIM'))
end)
it('serverstop() returns false for invalid input', function()
- clear{env={
- NVIM_LOG_FILE=testlog,
- NVIM_LISTEN_ADDRESS='.',
- }}
+ clear { env = {
+ NVIM_LOG_FILE = testlog,
+ NVIM_LISTEN_ADDRESS = '.',
+ } }
eq(0, eval("serverstop('')"))
eq(0, eval("serverstop('bogus-socket-name')"))
assert_log('Not listening on bogus%-socket%-name', testlog, 10)
end)
it('parses endpoints', function()
- clear{env={
- NVIM_LOG_FILE=testlog,
- NVIM_LISTEN_ADDRESS='.',
- }}
+ clear { env = {
+ NVIM_LOG_FILE = testlog,
+ NVIM_LISTEN_ADDRESS = '.',
+ } }
clear_serverlist()
- eq({}, funcs.serverlist())
+ eq({}, fn.serverlist())
- local s = funcs.serverstart('127.0.0.1:0') -- assign random port
+ local s = fn.serverstart('127.0.0.1:0') -- assign random port
if #s > 0 then
assert(string.match(s, '127.0.0.1:%d+'))
- eq(s, funcs.serverlist()[1])
+ eq(s, fn.serverlist()[1])
clear_serverlist()
end
- s = funcs.serverstart('127.0.0.1:') -- assign random port
+ s = fn.serverstart('127.0.0.1:') -- assign random port
if #s > 0 then
assert(string.match(s, '127.0.0.1:%d+'))
- eq(s, funcs.serverlist()[1])
+ eq(s, fn.serverlist()[1])
clear_serverlist()
end
local expected = {}
local v4 = '127.0.0.1:12345'
- local status, _ = pcall(funcs.serverstart, v4)
+ local status, _ = pcall(fn.serverstart, v4)
if status then
table.insert(expected, v4)
- pcall(funcs.serverstart, v4) -- exists already; ignore
+ pcall(fn.serverstart, v4) -- exists already; ignore
assert_log('Failed to start server: address already in use: 127%.0%.0%.1', testlog, 10)
end
local v6 = '::1:12345'
- status, _ = pcall(funcs.serverstart, v6)
+ status, _ = pcall(fn.serverstart, v6)
if status then
table.insert(expected, v6)
- pcall(funcs.serverstart, v6) -- exists already; ignore
+ pcall(fn.serverstart, v6) -- exists already; ignore
assert_log('Failed to start server: address already in use: ::1', testlog, 10)
end
- eq(expected, funcs.serverlist())
+ eq(expected, fn.serverlist())
clear_serverlist()
-- Address without slashes is a "name" which is appended to a generated path. #8519
- matches([[.*[/\\]xtest1%.2%.3%.4[^/\\]*]], funcs.serverstart('xtest1.2.3.4'))
+ matches([[.*[/\\]xtest1%.2%.3%.4[^/\\]*]], fn.serverstart('xtest1.2.3.4'))
clear_serverlist()
- eq('Vim:Failed to start server: invalid argument',
- pcall_err(funcs.serverstart, '127.0.0.1:65536')) -- invalid port
- eq({}, funcs.serverlist())
+ eq('Vim:Failed to start server: invalid argument', pcall_err(fn.serverstart, '127.0.0.1:65536')) -- invalid port
+ eq({}, fn.serverlist())
end)
it('serverlist() returns the list of servers', function()
@@ -146,11 +145,12 @@ describe('server', function()
local n = eval('len(serverlist())')
-- Add some servers.
- local servs = (is_os('win')
- and { [[\\.\pipe\Xtest-pipe0934]], [[\\.\pipe\Xtest-pipe4324]] }
- or { [[./Xtest-pipe0934]], [[./Xtest-pipe4324]] })
+ local servs = (
+ is_os('win') and { [[\\.\pipe\Xtest-pipe0934]], [[\\.\pipe\Xtest-pipe4324]] }
+ or { [[./Xtest-pipe0934]], [[./Xtest-pipe4324]] }
+ )
for _, s in ipairs(servs) do
- eq(s, eval("serverstart('"..s.."')"))
+ eq(s, eval("serverstart('" .. s .. "')"))
end
local new_servs = eval('serverlist()')
@@ -160,7 +160,7 @@ describe('server', function()
-- The new servers should be at the end of the list.
for i = 1, #servs do
eq(servs[i], new_servs[i + n])
- eq(1, eval("serverstop('"..servs[i].."')"))
+ eq(1, eval("serverstop('" .. servs[i] .. "')"))
end
-- After serverstop() the servers should NOT be in the list.
eq(n, eval('len(serverlist())'))
@@ -172,22 +172,20 @@ describe('startup --listen', function()
clear()
local cmd = { unpack(helpers.nvim_argv) }
table.insert(cmd, '--listen')
- matches('nvim.*: Argument missing after: "%-%-listen"', funcs.system(cmd))
+ matches('nvim.*: Argument missing after: "%-%-listen"', fn.system(cmd))
cmd = { unpack(helpers.nvim_argv) }
table.insert(cmd, '--listen2')
- matches('nvim.*: Garbage after option argument: "%-%-listen2"', funcs.system(cmd))
+ matches('nvim.*: Garbage after option argument: "%-%-listen2"', fn.system(cmd))
end)
it('sets v:servername, overrides $NVIM_LISTEN_ADDRESS', function()
- local addr = (is_os('win') and [[\\.\pipe\Xtest-listen-pipe]]
- or './Xtest-listen-pipe')
- clear({ env={ NVIM_LISTEN_ADDRESS='./Xtest-env-pipe' },
- args={ '--listen', addr } })
- eq(addr, meths.get_vvar('servername'))
+ local addr = (is_os('win') and [[\\.\pipe\Xtest-listen-pipe]] or './Xtest-listen-pipe')
+ clear({ env = { NVIM_LISTEN_ADDRESS = './Xtest-env-pipe' }, args = { '--listen', addr } })
+ eq(addr, api.nvim_get_vvar('servername'))
-- Address without slashes is a "name" which is appended to a generated path. #8519
- clear({ args={ '--listen', 'test-name' } })
- matches([[.*[/\\]test%-name[^/\\]*]], meths.get_vvar('servername'))
+ clear({ args = { '--listen', 'test-name' } })
+ matches([[.*[/\\]test%-name[^/\\]*]], api.nvim_get_vvar('servername'))
end)
end)
diff --git a/test/functional/vimscript/setpos_spec.lua b/test/functional/vimscript/setpos_spec.lua
index 02e550dcc0..a26e48f469 100644
--- a/test/functional/vimscript/setpos_spec.lua
+++ b/test/functional/vimscript/setpos_spec.lua
@@ -1,6 +1,6 @@
local helpers = require('test.functional.helpers')(after_each)
-local setpos = helpers.funcs.setpos
-local getpos = helpers.funcs.getpos
+local setpos = helpers.fn.setpos
+local getpos = helpers.fn.getpos
local insert = helpers.insert
local clear = helpers.clear
local command = helpers.command
@@ -8,7 +8,6 @@ local eval = helpers.eval
local eq = helpers.eq
local exc_exec = helpers.exc_exec
-
describe('setpos() function', function()
before_each(function()
clear()
@@ -23,42 +22,42 @@ describe('setpos() function', function()
Line of text 3]])
end)
it('can set the current cursor position', function()
- setpos(".", {0, 2, 1, 0})
- eq({0, 2, 1, 0}, getpos("."))
- setpos(".", {2, 1, 1, 0})
- eq({0, 1, 1, 0}, getpos("."))
+ setpos('.', { 0, 2, 1, 0 })
+ eq({ 0, 2, 1, 0 }, getpos('.'))
+ setpos('.', { 2, 1, 1, 0 })
+ eq({ 0, 1, 1, 0 }, getpos('.'))
local ret = exc_exec('call setpos(".", [1, 1, 1, 0])')
eq(0, ret)
end)
it('can set lowercase marks in the current buffer', function()
- setpos("'d", {0, 2, 1, 0})
- eq({0, 2, 1, 0}, getpos("'d"))
+ setpos("'d", { 0, 2, 1, 0 })
+ eq({ 0, 2, 1, 0 }, getpos("'d"))
command('undo')
command('call setpos("\'d", [2, 3, 1, 0])')
- eq({0, 3, 1, 0}, getpos("'d"))
+ eq({ 0, 3, 1, 0 }, getpos("'d"))
end)
it('can set lowercase marks in other buffers', function()
- local retval = setpos("'d", {1, 2, 1, 0})
+ local retval = setpos("'d", { 1, 2, 1, 0 })
eq(0, retval)
- setpos("'d", {1, 2, 1, 0})
- eq({0, 0, 0, 0}, getpos("'d"))
+ setpos("'d", { 1, 2, 1, 0 })
+ eq({ 0, 0, 0, 0 }, getpos("'d"))
command('wincmd w')
eq(1, eval('bufnr("%")'))
- eq({0, 2, 1, 0}, getpos("'d"))
+ eq({ 0, 2, 1, 0 }, getpos("'d"))
end)
it("fails when setting a mark in a buffer that doesn't exist", function()
- local retval = setpos("'d", {3, 2, 1, 0})
+ local retval = setpos("'d", { 3, 2, 1, 0 })
eq(-1, retval)
- eq({0, 0, 0, 0}, getpos("'d"))
- retval = setpos("'D", {3, 2, 1, 0})
+ eq({ 0, 0, 0, 0 }, getpos("'d"))
+ retval = setpos("'D", { 3, 2, 1, 0 })
eq(-1, retval)
- eq({0, 0, 0, 0}, getpos("'D"))
+ eq({ 0, 0, 0, 0 }, getpos("'D"))
end)
it('can set uppercase marks', function()
- setpos("'D", {2, 2, 3, 0})
- eq({2, 2, 3, 0}, getpos("'D"))
+ setpos("'D", { 2, 2, 3, 0 })
+ eq({ 2, 2, 3, 0 }, getpos("'D"))
-- Can set a mark in another buffer
- setpos("'D", {1, 2, 2, 0})
- eq({1, 2, 2, 0}, getpos("'D"))
+ setpos("'D", { 1, 2, 2, 0 })
+ eq({ 1, 2, 2, 0 }, getpos("'D"))
end)
end)
diff --git a/test/functional/vimscript/sort_spec.lua b/test/functional/vimscript/sort_spec.lua
index e09949a0f2..bd3d0da146 100644
--- a/test/functional/vimscript/sort_spec.lua
+++ b/test/functional/vimscript/sort_spec.lua
@@ -1,11 +1,11 @@
local helpers = require('test.functional.helpers')(after_each)
local eq = helpers.eq
-local NIL = helpers.NIL
+local NIL = vim.NIL
local eval = helpers.eval
local clear = helpers.clear
-local meths = helpers.meths
-local funcs = helpers.funcs
+local api = helpers.api
+local fn = helpers.fn
local command = helpers.command
local exc_exec = helpers.exc_exec
local pcall_err = helpers.pcall_err
@@ -14,31 +14,41 @@ before_each(clear)
describe('sort()', function()
it('errors out when sorting special values', function()
- eq('Vim(call):E362: Using a boolean value as a Float',
- exc_exec('call sort([v:true, v:false], "f")'))
+ eq(
+ 'Vim(call):E362: Using a boolean value as a Float',
+ exc_exec('call sort([v:true, v:false], "f")')
+ )
end)
- it('sorts “wrong” values between -0.0001 and 0.0001, preserving order',
- function()
- meths.set_var('list', {true, false, NIL, {}, {a=42}, 'check',
- 0.0001, -0.0001})
+ it('sorts “wrong” values between -0.0001 and 0.0001, preserving order', function()
+ api.nvim_set_var('list', {
+ true,
+ false,
+ NIL,
+ {},
+ { a = 42 },
+ 'check',
+ 0.0001,
+ -0.0001,
+ })
command('call insert(g:list, function("tr"))')
- local error_lines = funcs.split(
- funcs.execute('silent! call sort(g:list, "f")'), '\n')
+ local error_lines = fn.split(fn.execute('silent! call sort(g:list, "f")'), '\n')
local errors = {}
for _, err in ipairs(error_lines) do
errors[err] = true
end
eq({
- ['E362: Using a boolean value as a Float']=true,
- ['E891: Using a Funcref as a Float']=true,
- ['E892: Using a String as a Float']=true,
- ['E893: Using a List as a Float']=true,
- ['E894: Using a Dictionary as a Float']=true,
- ['E907: Using a special value as a Float']=true,
+ ['E362: Using a boolean value as a Float'] = true,
+ ['E891: Using a Funcref as a Float'] = true,
+ ['E892: Using a String as a Float'] = true,
+ ['E893: Using a List as a Float'] = true,
+ ['E894: Using a Dictionary as a Float'] = true,
+ ['E907: Using a special value as a Float'] = true,
}, errors)
- eq('[-1.0e-4, function(\'tr\'), v:true, v:false, v:null, [], {\'a\': 42}, \'check\', 1.0e-4]',
- eval('string(g:list)'))
+ eq(
+ "[-1.0e-4, function('tr'), v:true, v:false, v:null, [], {'a': 42}, 'check', 1.0e-4]",
+ eval('string(g:list)')
+ )
end)
it('can yield E702 and stop sorting after that', function()
@@ -50,7 +60,9 @@ describe('sort()', function()
return (a:a > a:b) - (a:a < a:b)
endfunction
]])
- eq('Vim(let):E745: Using a List as a Number',
- pcall_err(command, 'let sl = sort([1, 0, [], 3, 2], "Cmp")'))
+ eq(
+ 'Vim(let):E745: Using a List as a Number',
+ pcall_err(command, 'let sl = sort([1, 0, [], 3, 2], "Cmp")')
+ )
end)
end)
diff --git a/test/functional/vimscript/special_vars_spec.lua b/test/functional/vimscript/special_vars_spec.lua
index 217f0b2c2b..590d409141 100644
--- a/test/functional/vimscript/special_vars_spec.lua
+++ b/test/functional/vimscript/special_vars_spec.lua
@@ -1,12 +1,12 @@
local helpers = require('test.functional.helpers')(after_each)
local exc_exec = helpers.exc_exec
local command = helpers.command
-local funcs = helpers.funcs
+local fn = helpers.fn
local clear = helpers.clear
local eval = helpers.eval
local eq = helpers.eq
-local meths = helpers.meths
-local NIL = helpers.NIL
+local api = helpers.api
+local NIL = vim.NIL
describe('Special values', function()
before_each(clear)
@@ -25,15 +25,15 @@ describe('Special values', function()
end)
it('work with empty()', function()
- eq(0, funcs.empty(true))
- eq(1, funcs.empty(false))
- eq(1, funcs.empty(NIL))
+ eq(0, fn.empty(true))
+ eq(1, fn.empty(false))
+ eq(1, fn.empty(NIL))
end)
it('can be stringified and eval’ed back', function()
- eq(true, funcs.eval(funcs.string(true)))
- eq(false, funcs.eval(funcs.string(false)))
- eq(NIL, funcs.eval(funcs.string(NIL)))
+ eq(true, fn.eval(fn.string(true)))
+ eq(false, fn.eval(fn.string(false)))
+ eq(NIL, fn.eval(fn.string(NIL)))
end)
it('work with is/isnot properly', function()
@@ -98,8 +98,8 @@ describe('Special values', function()
eq(0, eval('0 + v:false'))
eq(-1, eval('0 - v:true'))
- eq( 0, eval('0 - v:null'))
- eq( 0, eval('0 - v:false'))
+ eq(0, eval('0 - v:null'))
+ eq(0, eval('0 - v:false'))
eq(1, eval('1 * v:true'))
eq(0, eval('1 * v:null'))
@@ -107,8 +107,8 @@ describe('Special values', function()
end)
it('does not work with +=/-=/.=', function()
- meths.set_var('true', true)
- meths.set_var('false', false)
+ api.nvim_set_var('true', true)
+ api.nvim_set_var('false', false)
command('let null = v:null')
eq('Vim(let):E734: Wrong variable type for +=', exc_exec('let true += 1'))
@@ -125,9 +125,9 @@ describe('Special values', function()
end)
it('work with . (concat) properly', function()
- eq("v:true", eval('"" . v:true'))
- eq("v:null", eval('"" . v:null'))
- eq("v:false", eval('"" . v:false'))
+ eq('v:true', eval('"" . v:true'))
+ eq('v:null', eval('"" . v:null'))
+ eq('v:false', eval('"" . v:false'))
end)
it('work with ?? (falsy operator)', function()
@@ -137,19 +137,19 @@ describe('Special values', function()
end)
it('work with type()', function()
- eq(6, funcs.type(true))
- eq(6, funcs.type(false))
- eq(7, funcs.type(NIL))
+ eq(6, fn.type(true))
+ eq(6, fn.type(false))
+ eq(7, fn.type(NIL))
end)
it('work with copy() and deepcopy()', function()
- eq(true, funcs.deepcopy(true))
- eq(false, funcs.deepcopy(false))
- eq(NIL, funcs.deepcopy(NIL))
+ eq(true, fn.deepcopy(true))
+ eq(false, fn.deepcopy(false))
+ eq(NIL, fn.deepcopy(NIL))
- eq(true, funcs.copy(true))
- eq(false, funcs.copy(false))
- eq(NIL, funcs.copy(NIL))
+ eq(true, fn.copy(true))
+ eq(false, fn.copy(false))
+ eq(NIL, fn.copy(NIL))
end)
it('fails in index', function()
@@ -159,20 +159,20 @@ describe('Special values', function()
end)
it('is accepted by assert_true and assert_false', function()
- funcs.assert_false(false)
- funcs.assert_false(true)
- funcs.assert_false(NIL)
+ fn.assert_false(false)
+ fn.assert_false(true)
+ fn.assert_false(NIL)
- funcs.assert_true(false)
- funcs.assert_true(true)
- funcs.assert_true(NIL)
+ fn.assert_true(false)
+ fn.assert_true(true)
+ fn.assert_true(NIL)
eq({
'Expected False but got v:true',
'Expected False but got v:null',
'Expected True but got v:false',
'Expected True but got v:null',
- }, meths.get_vvar('errors'))
+ }, api.nvim_get_vvar('errors'))
end)
describe('compat', function()
diff --git a/test/functional/vimscript/state_spec.lua b/test/functional/vimscript/state_spec.lua
index 0508b8b1da..7179806e36 100644
--- a/test/functional/vimscript/state_spec.lua
+++ b/test/functional/vimscript/state_spec.lua
@@ -4,7 +4,7 @@ local eq = helpers.eq
local exec = helpers.exec
local exec_lua = helpers.exec_lua
local feed = helpers.feed
-local meths = helpers.meths
+local api = helpers.api
local poke_eventloop = helpers.poke_eventloop
before_each(clear)
@@ -12,7 +12,7 @@ before_each(clear)
describe('state() function', function()
-- oldtest: Test_state()
it('works', function()
- meths.ui_attach(80, 24, {}) -- Allow hit-enter-prompt
+ api.nvim_ui_attach(80, 24, {}) -- Allow hit-enter-prompt
exec_lua([[
function _G.Get_state_mode()
@@ -42,34 +42,34 @@ describe('state() function', function()
-- Using a timer callback
feed([[:call RunTimer()<CR>]])
- poke_eventloop() -- Process pending input
- poke_eventloop() -- Process time_event
+ poke_eventloop() -- Process pending input
+ poke_eventloop() -- Process time_event
eq({ 'c', 'n' }, exec_lua('return _G.res'))
-- Halfway a mapping
feed([[:call v:lua.Run_timer()<CR>;]])
- meths.get_mode() -- Process pending input and luv timer callback
+ api.nvim_get_mode() -- Process pending input and luv timer callback
feed(';')
eq({ 'mS', 'n' }, exec_lua('return _G.res'))
-- An operator is pending
feed([[:call RunTimer()<CR>y]])
- poke_eventloop() -- Process pending input
- poke_eventloop() -- Process time_event
+ poke_eventloop() -- Process pending input
+ poke_eventloop() -- Process time_event
feed('y')
eq({ 'oSc', 'n' }, exec_lua('return _G.res'))
-- A register was specified
feed([[:call RunTimer()<CR>"r]])
- poke_eventloop() -- Process pending input
- poke_eventloop() -- Process time_event
+ poke_eventloop() -- Process pending input
+ poke_eventloop() -- Process time_event
feed('yy')
eq({ 'oSc', 'n' }, exec_lua('return _G.res'))
-- Insert mode completion
feed([[:call RunTimer()<CR>Got<C-N>]])
- poke_eventloop() -- Process pending input
- poke_eventloop() -- Process time_event
+ poke_eventloop() -- Process pending input
+ poke_eventloop() -- Process time_event
feed('<Esc>')
eq({ 'aSc', 'i' }, exec_lua('return _G.res'))
@@ -79,7 +79,7 @@ describe('state() function', function()
-- messages scrolled
feed([[:call v:lua.Run_timer() | echo "one\ntwo\nthree"<CR>]])
- meths.get_mode() -- Process pending input and luv timer callback
+ api.nvim_get_mode() -- Process pending input and luv timer callback
feed('<CR>')
eq({ 'Ss', 'r' }, exec_lua('return _G.res'))
end)
diff --git a/test/functional/vimscript/string_spec.lua b/test/functional/vimscript/string_spec.lua
index cb7e93f264..6a7fe1bad9 100644
--- a/test/functional/vimscript/string_spec.lua
+++ b/test/functional/vimscript/string_spec.lua
@@ -2,12 +2,12 @@ local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
local eq = helpers.eq
local command = helpers.command
-local meths = helpers.meths
+local api = helpers.api
local eval = helpers.eval
local exc_exec = helpers.exc_exec
local pcall_err = helpers.pcall_err
-local funcs = helpers.funcs
-local NIL = helpers.NIL
+local fn = helpers.fn
+local NIL = vim.NIL
local source = helpers.source
describe('string() function', function()
@@ -15,17 +15,17 @@ describe('string() function', function()
describe('used to represent floating-point values', function()
it('dumps NaN values', function()
- eq('str2float(\'nan\')', eval('string(str2float(\'nan\'))'))
+ eq("str2float('nan')", eval("string(str2float('nan'))"))
end)
it('dumps infinite values', function()
- eq('str2float(\'inf\')', eval('string(str2float(\'inf\'))'))
- eq('-str2float(\'inf\')', eval('string(str2float(\'-inf\'))'))
+ eq("str2float('inf')", eval("string(str2float('inf'))"))
+ eq("-str2float('inf')", eval("string(str2float('-inf'))"))
end)
it('dumps regular values', function()
- eq('1.5', funcs.string(1.5))
- eq('1.56e-20', funcs.string(1.56000e-020))
+ eq('1.5', fn.string(1.5))
+ eq('1.56e-20', fn.string(1.56000e-020))
eq('0.0', eval('string(0.0)'))
end)
@@ -33,64 +33,62 @@ describe('string() function', function()
eq('v:true', eval('string(v:true)'))
eq('v:false', eval('string(v:false)'))
eq('v:null', eval('string(v:null)'))
- eq('v:true', funcs.string(true))
- eq('v:false', funcs.string(false))
- eq('v:null', funcs.string(NIL))
+ eq('v:true', fn.string(true))
+ eq('v:false', fn.string(false))
+ eq('v:null', fn.string(NIL))
end)
- it('dumps values with at most six digits after the decimal point',
- function()
- eq('1.234568e-20', funcs.string(1.23456789123456789123456789e-020))
- eq('1.234568', funcs.string(1.23456789123456789123456789))
+ it('dumps values with at most six digits after the decimal point', function()
+ eq('1.234568e-20', fn.string(1.23456789123456789123456789e-020))
+ eq('1.234568', fn.string(1.23456789123456789123456789))
end)
- it('dumps values with at most seven digits before the decimal point',
- function()
- eq('1234567.891235', funcs.string(1234567.89123456789123456789))
- eq('1.234568e7', funcs.string(12345678.9123456789123456789))
+ it('dumps values with at most seven digits before the decimal point', function()
+ eq('1234567.891235', fn.string(1234567.89123456789123456789))
+ eq('1.234568e7', fn.string(12345678.9123456789123456789))
end)
it('dumps negative values', function()
- eq('-1.5', funcs.string(-1.5))
- eq('-1.56e-20', funcs.string(-1.56000e-020))
- eq('-1.234568e-20', funcs.string(-1.23456789123456789123456789e-020))
- eq('-1.234568', funcs.string(-1.23456789123456789123456789))
- eq('-1234567.891235', funcs.string(-1234567.89123456789123456789))
- eq('-1.234568e7', funcs.string(-12345678.9123456789123456789))
+ eq('-1.5', fn.string(-1.5))
+ eq('-1.56e-20', fn.string(-1.56000e-020))
+ eq('-1.234568e-20', fn.string(-1.23456789123456789123456789e-020))
+ eq('-1.234568', fn.string(-1.23456789123456789123456789))
+ eq('-1234567.891235', fn.string(-1234567.89123456789123456789))
+ eq('-1.234568e7', fn.string(-12345678.9123456789123456789))
end)
end)
describe('used to represent numbers', function()
it('dumps regular values', function()
- eq('0', funcs.string(0))
- eq('-1', funcs.string(-1))
- eq('1', funcs.string(1))
+ eq('0', fn.string(0))
+ eq('-1', fn.string(-1))
+ eq('1', fn.string(1))
end)
it('dumps large values', function()
- eq('2147483647', funcs.string(2^31-1))
- eq('-2147483648', funcs.string(-2^31))
+ eq('2147483647', fn.string(2 ^ 31 - 1))
+ eq('-2147483648', fn.string(-2 ^ 31))
end)
end)
describe('used to represent strings', function()
it('dumps regular strings', function()
- eq('\'test\'', funcs.string('test'))
+ eq("'test'", fn.string('test'))
end)
it('dumps empty strings', function()
- eq('\'\'', funcs.string(''))
+ eq("''", fn.string(''))
end)
- it('dumps strings with \' inside', function()
- eq('\'\'\'\'\'\'\'\'', funcs.string('\'\'\''))
- eq('\'a\'\'b\'\'\'\'\'', funcs.string('a\'b\'\''))
- eq('\'\'\'b\'\'\'\'d\'', funcs.string('\'b\'\'d'))
- eq('\'a\'\'b\'\'c\'\'d\'', funcs.string('a\'b\'c\'d'))
+ it("dumps strings with ' inside", function()
+ eq("''''''''", fn.string("'''"))
+ eq("'a''b'''''", fn.string("a'b''"))
+ eq("'''b''''d'", fn.string("'b''d"))
+ eq("'a''b''c''d'", fn.string("a'b'c'd"))
end)
it('dumps NULL strings', function()
- eq('\'\'', eval('string($XXX_UNEXISTENT_VAR_XXX)'))
+ eq("''", eval('string($XXX_UNEXISTENT_VAR_XXX)'))
end)
it('dumps NULL lists', function()
@@ -119,16 +117,16 @@ describe('string() function', function()
end)
it('dumps references to built-in functions', function()
- eq('function(\'function\')', eval('string(function("function"))'))
+ eq("function('function')", eval('string(function("function"))'))
end)
it('dumps references to user functions', function()
- eq('function(\'Test1\')', eval('string(function("Test1"))'))
- eq('function(\'g:Test3\')', eval('string(function("g:Test3"))'))
+ eq("function('Test1')", eval('string(function("Test1"))'))
+ eq("function('g:Test3')", eval('string(function("g:Test3"))'))
end)
it('dumps references to script functions', function()
- eq('function(\'<SNR>1_Test2\')', eval('string(Test2_f)'))
+ eq("function('<SNR>1_Test2')", eval('string(Test2_f)'))
end)
it('dumps partials with self referencing a partial', function()
@@ -139,96 +137,119 @@ describe('string() function', function()
let TestDictRef = function('TestDict', d)
let d.tdr = TestDictRef
]])
- eq("Vim(echo):E724: unable to correctly dump variable with self-referencing container",
- pcall_err(command, 'echo string(d.tdr)'))
+ eq(
+ 'Vim(echo):E724: unable to correctly dump variable with self-referencing container',
+ pcall_err(command, 'echo string(d.tdr)')
+ )
end)
it('dumps automatically created partials', function()
- eq('function(\'<SNR>1_Test2\', {\'f\': function(\'<SNR>1_Test2\')})',
- eval('string({"f": Test2_f}.f)'))
- eq('function(\'<SNR>1_Test2\', [1], {\'f\': function(\'<SNR>1_Test2\', [1])})',
- eval('string({"f": function(Test2_f, [1])}.f)'))
+ eq(
+ "function('<SNR>1_Test2', {'f': function('<SNR>1_Test2')})",
+ eval('string({"f": Test2_f}.f)')
+ )
+ eq(
+ "function('<SNR>1_Test2', [1], {'f': function('<SNR>1_Test2', [1])})",
+ eval('string({"f": function(Test2_f, [1])}.f)')
+ )
end)
it('dumps manually created partials', function()
- eq('function(\'Test3\', [1, 2], {})',
- eval('string(function("Test3", [1, 2], {}))'))
- eq('function(\'Test3\', {})',
- eval('string(function("Test3", {}))'))
- eq('function(\'Test3\', [1, 2])',
- eval('string(function("Test3", [1, 2]))'))
+ eq("function('Test3', [1, 2], {})", eval('string(function("Test3", [1, 2], {}))'))
+ eq("function('Test3', {})", eval('string(function("Test3", {}))'))
+ eq("function('Test3', [1, 2])", eval('string(function("Test3", [1, 2]))'))
end)
- it('does not crash or halt when dumping partials with reference cycles in self',
- function()
- meths.set_var('d', {v=true})
- eq([[Vim(echo):E724: unable to correctly dump variable with self-referencing container]],
- pcall_err(command, 'echo string(extend(extend(g:d, {"f": g:Test2_f}), {"p": g:d.f}))'))
+ it('does not crash or halt when dumping partials with reference cycles in self', function()
+ api.nvim_set_var('d', { v = true })
+ eq(
+ [[Vim(echo):E724: unable to correctly dump variable with self-referencing container]],
+ pcall_err(command, 'echo string(extend(extend(g:d, {"f": g:Test2_f}), {"p": g:d.f}))')
+ )
end)
- it('does not show errors when dumping partials referencing the same dictionary',
- function()
+ it('does not show errors when dumping partials referencing the same dictionary', function()
command('let d = {}')
-- Regression for “eval/typval_encode: Dump empty dictionary before
-- checking for refcycle”, results in error.
- eq('[function(\'tr\', {}), function(\'tr\', {})]', eval('string([function("tr", d), function("tr", d)])'))
+ eq(
+ "[function('tr', {}), function('tr', {})]",
+ eval('string([function("tr", d), function("tr", d)])')
+ )
-- Regression for “eval: Work with reference cycles in partials (self)
-- properly”, results in crash.
eval('extend(d, {"a": 1})')
- eq('[function(\'tr\', {\'a\': 1}), function(\'tr\', {\'a\': 1})]', eval('string([function("tr", d), function("tr", d)])'))
+ eq(
+ "[function('tr', {'a': 1}), function('tr', {'a': 1})]",
+ eval('string([function("tr", d), function("tr", d)])')
+ )
end)
- it('does not crash or halt when dumping partials with reference cycles in arguments',
- function()
- meths.set_var('l', {})
+ it('does not crash or halt when dumping partials with reference cycles in arguments', function()
+ api.nvim_set_var('l', {})
eval('add(l, l)')
-- Regression: the below line used to crash (add returns original list and
-- there was error in dumping partials). Tested explicitly in
-- test/unit/api/private_helpers_spec.lua.
eval('add(l, function("Test1", l))')
- eq([=[Vim(echo):E724: unable to correctly dump variable with self-referencing container]=],
- pcall_err(command, 'echo string(function("Test1", l))'))
- end)
-
- it('does not crash or halt when dumping partials with reference cycles in self and arguments',
- function()
- meths.set_var('d', {v=true})
- meths.set_var('l', {})
- eval('add(l, l)')
- eval('add(l, function("Test1", l))')
- eval('add(l, function("Test1", d))')
- eq([=[Vim(echo):E724: unable to correctly dump variable with self-referencing container]=],
- pcall_err(command, 'echo string(extend(extend(g:d, {"f": g:Test2_f}), {"p": function(g:d.f, l)}))'))
- end)
+ eq(
+ [=[Vim(echo):E724: unable to correctly dump variable with self-referencing container]=],
+ pcall_err(command, 'echo string(function("Test1", l))')
+ )
+ end)
+
+ it(
+ 'does not crash or halt when dumping partials with reference cycles in self and arguments',
+ function()
+ api.nvim_set_var('d', { v = true })
+ api.nvim_set_var('l', {})
+ eval('add(l, l)')
+ eval('add(l, function("Test1", l))')
+ eval('add(l, function("Test1", d))')
+ eq(
+ [=[Vim(echo):E724: unable to correctly dump variable with self-referencing container]=],
+ pcall_err(
+ command,
+ 'echo string(extend(extend(g:d, {"f": g:Test2_f}), {"p": function(g:d.f, l)}))'
+ )
+ )
+ end
+ )
end)
describe('used to represent lists', function()
it('dumps empty list', function()
- eq('[]', funcs.string({}))
+ eq('[]', fn.string({}))
end)
it('dumps nested lists', function()
- eq('[[[[[]]]]]', funcs.string({{{{{}}}}}))
+ eq('[[[[[]]]]]', fn.string({ { { { {} } } } }))
end)
it('dumps nested non-empty lists', function()
- eq('[1, [[3, [[5], 4]], 2]]', funcs.string({1, {{3, {{5}, 4}}, 2}}))
+ eq('[1, [[3, [[5], 4]], 2]]', fn.string({ 1, { { 3, { { 5 }, 4 } }, 2 } }))
end)
it('errors when dumping recursive lists', function()
- meths.set_var('l', {})
+ api.nvim_set_var('l', {})
eval('add(l, l)')
- eq('Vim(echo):E724: unable to correctly dump variable with self-referencing container',
- exc_exec('echo string(l)'))
+ eq(
+ 'Vim(echo):E724: unable to correctly dump variable with self-referencing container',
+ exc_exec('echo string(l)')
+ )
end)
it('dumps recursive lists despite the error', function()
- meths.set_var('l', {})
+ api.nvim_set_var('l', {})
eval('add(l, l)')
- eq('Vim(echo):E724: unable to correctly dump variable with self-referencing container',
- pcall_err(command, 'echo string(l)'))
- eq('Vim(echo):E724: unable to correctly dump variable with self-referencing container',
- pcall_err(command, 'echo string([l])'))
+ eq(
+ 'Vim(echo):E724: unable to correctly dump variable with self-referencing container',
+ pcall_err(command, 'echo string(l)')
+ )
+ eq(
+ 'Vim(echo):E724: unable to correctly dump variable with self-referencing container',
+ pcall_err(command, 'echo string([l])')
+ )
end)
end)
@@ -240,28 +261,34 @@ describe('string() function', function()
it('dumps list with two same empty dictionaries, also in partials', function()
command('let d = {}')
eq('[{}, {}]', eval('string([d, d])'))
- eq('[function(\'tr\', {}), {}]', eval('string([function("tr", d), d])'))
- eq('[{}, function(\'tr\', {})]', eval('string([d, function("tr", d)])'))
+ eq("[function('tr', {}), {}]", eval('string([function("tr", d), d])'))
+ eq("[{}, function('tr', {})]", eval('string([d, function("tr", d)])'))
end)
it('dumps non-empty dictionary', function()
- eq('{\'t\'\'est\': 1}', funcs.string({['t\'est']=1}))
+ eq("{'t''est': 1}", fn.string({ ["t'est"] = 1 }))
end)
it('errors when dumping recursive dictionaries', function()
- meths.set_var('d', {d=1})
+ api.nvim_set_var('d', { d = 1 })
eval('extend(d, {"d": d})')
- eq('Vim(echo):E724: unable to correctly dump variable with self-referencing container',
- exc_exec('echo string(d)'))
+ eq(
+ 'Vim(echo):E724: unable to correctly dump variable with self-referencing container',
+ exc_exec('echo string(d)')
+ )
end)
it('dumps recursive dictionaries despite the error', function()
- meths.set_var('d', {d=1})
+ api.nvim_set_var('d', { d = 1 })
eval('extend(d, {"d": d})')
- eq('Vim(echo):E724: unable to correctly dump variable with self-referencing container',
- pcall_err(command, 'echo string(d)'))
- eq('Vim(echo):E724: unable to correctly dump variable with self-referencing container',
- pcall_err(command, 'echo string({"out": d})'))
+ eq(
+ 'Vim(echo):E724: unable to correctly dump variable with self-referencing container',
+ pcall_err(command, 'echo string(d)')
+ )
+ eq(
+ 'Vim(echo):E724: unable to correctly dump variable with self-referencing container',
+ pcall_err(command, 'echo string({"out": d})')
+ )
end)
end)
end)
diff --git a/test/functional/vimscript/system_spec.lua b/test/functional/vimscript/system_spec.lua
index 90aab48d61..d44f68e152 100644
--- a/test/functional/vimscript/system_spec.lua
+++ b/test/functional/vimscript/system_spec.lua
@@ -4,9 +4,14 @@ local helpers = require('test.functional.helpers')(after_each)
local assert_alive = helpers.assert_alive
local testprg = helpers.testprg
-local eq, call, clear, eval, feed_command, feed, nvim =
- helpers.eq, helpers.call, helpers.clear, helpers.eval, helpers.feed_command,
- helpers.feed, helpers.nvim
+local eq, call, clear, eval, feed_command, feed, api =
+ helpers.eq,
+ helpers.call,
+ helpers.clear,
+ helpers.eval,
+ helpers.feed_command,
+ helpers.feed,
+ helpers.api
local command = helpers.command
local insert = helpers.insert
local expect = helpers.expect
@@ -19,14 +24,14 @@ local Screen = require('test.functional.ui.screen')
local function create_file_with_nuls(name)
return function()
- feed('ipart1<C-V>000part2<C-V>000part3<ESC>:w '..name..'<CR>')
- eval('1') -- wait for the file to be created
+ feed('ipart1<C-V>000part2<C-V>000part3<ESC>:w ' .. name .. '<CR>')
+ eval('1') -- wait for the file to be created
end
end
local function delete_file(name)
return function()
- eval("delete('"..name.."')")
+ eval("delete('" .. name .. "')")
end
end
@@ -35,8 +40,10 @@ describe('system()', function()
describe('command passed as a List', function()
it('throws error if cmd[0] is not executable', function()
- eq("Vim:E475: Invalid value for argument cmd: 'this-should-not-exist' is not executable",
- pcall_err(call, 'system', { 'this-should-not-exist' }))
+ eq(
+ "Vim:E475: Invalid value for argument cmd: 'this-should-not-exist' is not executable",
+ pcall_err(call, 'system', { 'this-should-not-exist' })
+ )
eq(-1, eval('v:shell_error'))
end)
@@ -51,8 +58,10 @@ describe('system()', function()
eq(0, eval('v:shell_error'))
-- Provoke a non-zero v:shell_error.
- eq("Vim:E475: Invalid value for argument cmd: 'this-should-not-exist' is not executable",
- pcall_err(call, 'system', { 'this-should-not-exist' }))
+ eq(
+ "Vim:E475: Invalid value for argument cmd: 'this-should-not-exist' is not executable",
+ pcall_err(call, 'system', { 'this-should-not-exist' })
+ )
local old_val = eval('v:shell_error')
eq(-1, old_val)
@@ -65,8 +74,8 @@ describe('system()', function()
end)
it('quotes arguments correctly #5280', function()
- local out = call('system',
- { testprg('printargs-test'), [[1]], [[2 "3]], [[4 ' 5]], [[6 ' 7']] })
+ local out =
+ call('system', { testprg('printargs-test'), [[1]], [[2 "3]], [[4 ' 5]], [[6 ' 7']] })
eq(0, eval('v:shell_error'))
eq([[arg1=1;arg2=2 "3;arg3=4 ' 5;arg4=6 ' 7';]], out)
@@ -75,22 +84,29 @@ describe('system()', function()
eq(0, eval('v:shell_error'))
eq([[arg1='1;arg2=2 "3;]], out)
- out = call('system', { testprg('printargs-test'), "A\nB" })
+ out = call('system', { testprg('printargs-test'), 'A\nB' })
eq(0, eval('v:shell_error'))
- eq("arg1=A\nB;", out)
+ eq('arg1=A\nB;', out)
end)
it('calls executable in $PATH', function()
- if 0 == eval("executable('python3')") then pending("missing `python3`") end
- eq("foo\n", eval([[system(['python3', '-c', 'print("foo")'])]]))
+ if 0 == eval("executable('python3')") then
+ pending('missing `python3`')
+ end
+ eq('foo\n', eval([[system(['python3', '-c', 'print("foo")'])]]))
eq(0, eval('v:shell_error'))
end)
it('does NOT run in shell', function()
if is_os('win') then
- eq("%PATH%\n", eval("system(['powershell', '-NoProfile', '-NoLogo', '-ExecutionPolicy', 'RemoteSigned', '-Command', 'Write-Output', '%PATH%'])"))
+ eq(
+ '%PATH%\n',
+ eval(
+ "system(['powershell', '-NoProfile', '-NoLogo', '-ExecutionPolicy', 'RemoteSigned', '-Command', 'Write-Output', '%PATH%'])"
+ )
+ )
else
- eq("* $PATH %PATH%\n", eval("system(['echo', '*', '$PATH', '%PATH%'])"))
+ eq('* $PATH %PATH%\n', eval("system(['echo', '*', '$PATH', '%PATH%'])"))
end
end)
end)
@@ -133,7 +149,12 @@ describe('system()', function()
eval([[system('"ping" "-n" "1" "127.0.0.1"')]])
eq(0, eval('v:shell_error'))
eq('"a b"\n', eval([[system('cmd /s/c "cmd /s/c "cmd /s/c "echo "a b""""')]]))
- eq('"a b"\n', eval([[system('powershell -NoProfile -NoLogo -ExecutionPolicy RemoteSigned -Command Write-Output ''\^"a b\^"''')]]))
+ eq(
+ '"a b"\n',
+ eval(
+ [[system('powershell -NoProfile -NoLogo -ExecutionPolicy RemoteSigned -Command Write-Output ''\^"a b\^"''')]]
+ )
+ )
end
it('with shell=cmd.exe', function()
@@ -177,7 +198,7 @@ describe('system()', function()
it('powershell w/ UTF-8 text #13713', function()
if not helpers.has_powershell() then
- pending("powershell not found", function() end)
+ pending('powershell not found', function() end)
return
end
helpers.set_shell_powershell()
@@ -193,32 +214,21 @@ describe('system()', function()
feed(':call system("echo")<cr>')
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*12
:call system("echo") |
]])
end)
it('prints verbose information', function()
- nvim('set_option_value', 'shell', 'fake_shell', {})
- nvim('set_option_value', 'shellcmdflag', 'cmdflag', {})
+ api.nvim_set_option_value('shell', 'fake_shell', {})
+ api.nvim_set_option_value('shellcmdflag', 'cmdflag', {})
screen:try_resize(72, 14)
feed(':4verbose echo system("echo hi")<cr>')
if is_os('win') then
- screen:expect{any=[[Executing command: "'fake_shell' 'cmdflag' '"echo hi"'"]]}
+ screen:expect { any = [[Executing command: "'fake_shell' 'cmdflag' '"echo hi"'"]] }
else
- screen:expect{any=[[Executing command: "'fake_shell' 'cmdflag' 'echo hi'"]]}
+ screen:expect { any = [[Executing command: "'fake_shell' 'cmdflag' 'echo hi'"]] }
end
feed('<cr>')
end)
@@ -237,94 +247,50 @@ describe('system()', function()
feed(':edit ' .. tempfile .. '<cr>')
- local command_total_time = tonumber(helpers.funcs.split(helpers.funcs.getline(7))[2])
- local command_self_time = tonumber(helpers.funcs.split(helpers.funcs.getline(7))[3])
+ local command_total_time = tonumber(helpers.fn.split(helpers.fn.getline(7))[2])
+ local command_self_time = tonumber(helpers.fn.split(helpers.fn.getline(7))[3])
helpers.neq(nil, command_total_time)
helpers.neq(nil, command_self_time)
end)
it('`yes` interrupted with CTRL-C', function()
- feed(':call system("' .. (is_os('win')
- and 'for /L %I in (1,0,2) do @echo y'
- or 'yes') .. '")<cr>')
+ feed(
+ ':call system("'
+ .. (is_os('win') and 'for /L %I in (1,0,2) do @echo y' or 'yes')
+ .. '")<cr>'
+ )
screen:expect([[
|
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
-]] .. (is_os('win')
- and [[
- :call system("for /L %I in (1,0,2) do @echo y") |]]
- or [[
+ ~ |*12
+]] .. (is_os('win') and [[
+ :call system("for /L %I in (1,0,2) do @echo y") |]] or [[
:call system("yes") |]]))
feed('foo<c-c>')
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*12
Type :qa and press <Enter> to exit Nvim |
]])
end)
it('`yes` interrupted with mapped CTRL-C', function()
command('nnoremap <C-C> i')
- feed(':call system("' .. (is_os('win')
- and 'for /L %I in (1,0,2) do @echo y'
- or 'yes') .. '")<cr>')
+ feed(
+ ':call system("'
+ .. (is_os('win') and 'for /L %I in (1,0,2) do @echo y' or 'yes')
+ .. '")<cr>'
+ )
screen:expect([[
|
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
-]] .. (is_os('win')
- and [[
- :call system("for /L %I in (1,0,2) do @echo y") |]]
- or [[
+ ~ |*12
+]] .. (is_os('win') and [[
+ :call system("for /L %I in (1,0,2) do @echo y") |]] or [[
:call system("yes") |]]))
feed('foo<c-c>')
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*12
-- INSERT -- |
]])
end)
@@ -333,17 +299,19 @@ describe('system()', function()
describe('passing no input', function()
it('returns the program output', function()
if is_os('win') then
- eq("echoed\n", eval('system("echo echoed")'))
+ eq('echoed\n', eval('system("echo echoed")'))
else
- eq("echoed", eval('system("printf echoed")'))
+ eq('echoed', eval('system("printf echoed")'))
end
end)
it('to backgrounded command does not crash', function()
-- This is indeterminate, just exercise the codepath. May get E5677.
- feed_command('call system(has("win32") ? "start /b /wait cmd /c echo echoed" : "printf echoed &")')
- local v_errnum = string.match(eval("v:errmsg"), "^E%d*:")
+ feed_command(
+ 'call system(has("win32") ? "start /b /wait cmd /c echo echoed" : "printf echoed &")'
+ )
+ local v_errnum = string.match(eval('v:errmsg'), '^E%d*:')
if v_errnum then
- eq("E5677:", v_errnum)
+ eq('E5677:', v_errnum)
end
assert_alive()
end)
@@ -351,19 +319,19 @@ describe('system()', function()
describe('passing input', function()
it('returns the program output', function()
- eq("input", eval('system("cat -", "input")'))
+ eq('input', eval('system("cat -", "input")'))
end)
it('to backgrounded command does not crash', function()
-- This is indeterminate, just exercise the codepath. May get E5677.
feed_command('call system(has("win32") ? "start /b /wait more" : "cat - &", "input")')
- local v_errnum = string.match(eval("v:errmsg"), "^E%d*:")
+ local v_errnum = string.match(eval('v:errmsg'), '^E%d*:')
if v_errnum then
- eq("E5677:", v_errnum)
+ eq('E5677:', v_errnum)
end
assert_alive()
end)
it('works with an empty string', function()
- eq("test\n", eval('system("echo test", "")'))
+ eq('test\n', eval('system("echo test", "")'))
assert_alive()
end)
end)
@@ -378,7 +346,7 @@ describe('system()', function()
input[#input + 1] = '01234567890ABCDEFabcdef'
end
input = table.concat(input, '\n')
- nvim('set_var', 'input', input)
+ api.nvim_set_var('input', input)
eq(input, eval('system("cat -", g:input)'))
end)
end)
@@ -387,8 +355,7 @@ describe('system()', function()
it('is treated as a buffer id', function()
command("put ='text in buffer 1'")
eq('\ntext in buffer 1\n', eval('system("cat", 1)'))
- eq('Vim(echo):E86: Buffer 42 does not exist',
- exc_exec('echo system("cat", 42)'))
+ eq('Vim(echo):E86: Buffer 42 does not exist', exc_exec('echo system("cat", 42)'))
end)
end)
@@ -399,14 +366,13 @@ describe('system()', function()
after_each(delete_file(fname))
it('replaces NULs by SOH characters', function()
- eq('part1\001part2\001part3\n', eval([[system('"cat" "]]..fname..[["')]]))
+ eq('part1\001part2\001part3\n', eval([[system('"cat" "]] .. fname .. [["')]]))
end)
end)
describe('input passed as List', function()
it('joins List items with linefeed characters', function()
- eq('line1\nline2\nline3',
- eval("system('cat -', ['line1', 'line2', 'line3'])"))
+ eq('line1\nline2\nline3', eval("system('cat -', ['line1', 'line2', 'line3'])"))
end)
-- Notice that NULs are converted to SOH when the data is read back. This
@@ -415,15 +381,19 @@ describe('system()', function()
-- characters(see the following tests with `systemlist()` below)
describe('with linefeed characters inside List items', function()
it('converts linefeed characters to NULs', function()
- eq('l1\001p2\nline2\001a\001b\nl3',
- eval([[system('cat -', ["l1\np2", "line2\na\nb", 'l3'])]]))
+ eq(
+ 'l1\001p2\nline2\001a\001b\nl3',
+ eval([[system('cat -', ["l1\np2", "line2\na\nb", 'l3'])]])
+ )
end)
end)
describe('with leading/trailing whitespace characters on items', function()
it('preserves whitespace, replacing linefeeds by NULs', function()
- eq('line \nline2\001\n\001line3',
- eval([[system('cat -', ['line ', "line2\n", "\nline3"])]]))
+ eq(
+ 'line \nline2\001\n\001line3',
+ eval([[system('cat -', ['line ', "line2\n", "\nline3"])]])
+ )
end)
end)
end)
@@ -431,7 +401,7 @@ describe('system()', function()
it("with a program that doesn't close stdout will exit properly after passing input", function()
local out = eval(string.format("system('%s', 'clip-data')", testprg('streams-test')))
assert(out:sub(0, 5) == 'pid: ', out)
- os_kill(out:match("%d+"))
+ os_kill(out:match('%d+'))
end)
end)
@@ -477,18 +447,7 @@ describe('systemlist()', function()
feed(':call systemlist("echo")<cr>')
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*12
:call systemlist("echo") |
]])
end)
@@ -497,35 +456,13 @@ describe('systemlist()', function()
feed(':call systemlist("yes | xargs")<cr>')
screen:expect([[
|
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*12
:call systemlist("yes | xargs") |
]])
feed('<c-c>')
screen:expect([[
^ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
- ~ |
+ ~ |*12
Type :qa and press <Enter> to exit Nvim |
]])
end)
@@ -533,7 +470,7 @@ describe('systemlist()', function()
describe('passing string with linefeed characters as input', function()
it('splits the output on linefeed characters', function()
- eq({'abc', 'def', 'ghi'}, eval([[systemlist("cat -", "abc\ndef\nghi")]]))
+ eq({ 'abc', 'def', 'ghi' }, eval([[systemlist("cat -", "abc\ndef\nghi")]]))
end)
end)
@@ -543,7 +480,7 @@ describe('systemlist()', function()
for _ = 1, 0xffff do
input[#input + 1] = '01234567890ABCDEFabcdef'
end
- nvim('set_var', 'input', input)
+ api.nvim_set_var('input', input)
eq(input, eval('systemlist("cat -", g:input)'))
end)
end)
@@ -558,75 +495,77 @@ describe('systemlist()', function()
after_each(delete_file(fname))
it('replaces NULs by newline characters', function()
- eq({'part1\npart2\npart3'}, eval([[systemlist('"cat" "]]..fname..[["')]]))
+ eq({ 'part1\npart2\npart3' }, eval([[systemlist('"cat" "]] .. fname .. [["')]]))
end)
end)
describe('input passed as List', function()
it('joins list items with linefeed characters', function()
- eq({'line1', 'line2', 'line3'},
- eval("systemlist('cat -', ['line1', 'line2', 'line3'])"))
+ eq({ 'line1', 'line2', 'line3' }, eval("systemlist('cat -', ['line1', 'line2', 'line3'])"))
end)
-- Unlike `system()` which uses SOH to represent NULs, with `systemlist()`
-- input and output are the same.
describe('with linefeed characters inside list items', function()
it('converts linefeed characters to NULs', function()
- eq({'l1\np2', 'line2\na\nb', 'l3'},
- eval([[systemlist('cat -', ["l1\np2", "line2\na\nb", 'l3'])]]))
+ eq(
+ { 'l1\np2', 'line2\na\nb', 'l3' },
+ eval([[systemlist('cat -', ["l1\np2", "line2\na\nb", 'l3'])]])
+ )
end)
end)
describe('with leading/trailing whitespace characters on items', function()
it('preserves whitespace, replacing linefeeds by NULs', function()
- eq({'line ', 'line2\n', '\nline3'},
- eval([[systemlist('cat -', ['line ', "line2\n", "\nline3"])]]))
+ eq(
+ { 'line ', 'line2\n', '\nline3' },
+ eval([[systemlist('cat -', ['line ', "line2\n", "\nline3"])]])
+ )
end)
end)
end)
describe('handles empty lines', function()
it('in the middle', function()
- eq({'line one','','line two'}, eval("systemlist('cat',['line one','','line two'])"))
+ eq({ 'line one', '', 'line two' }, eval("systemlist('cat',['line one','','line two'])"))
end)
it('in the beginning', function()
- eq({'','line one','line two'}, eval("systemlist('cat',['','line one','line two'])"))
+ eq({ '', 'line one', 'line two' }, eval("systemlist('cat',['','line one','line two'])"))
end)
end)
describe('when keepempty option is', function()
it('0, ignores trailing newline', function()
- eq({'aa','bb'}, eval("systemlist('cat',['aa','bb'],0)"))
- eq({'aa','bb'}, eval("systemlist('cat',['aa','bb',''],0)"))
+ eq({ 'aa', 'bb' }, eval("systemlist('cat',['aa','bb'],0)"))
+ eq({ 'aa', 'bb' }, eval("systemlist('cat',['aa','bb',''],0)"))
end)
it('1, preserves trailing newline', function()
- eq({'aa','bb'}, eval("systemlist('cat',['aa','bb'],1)"))
- eq({'aa','bb',''}, eval("systemlist('cat',['aa','bb',''],2)"))
+ eq({ 'aa', 'bb' }, eval("systemlist('cat',['aa','bb'],1)"))
+ eq({ 'aa', 'bb', '' }, eval("systemlist('cat',['aa','bb',''],2)"))
end)
end)
it("with a program that doesn't close stdout will exit properly after passing input", function()
local out = eval(string.format("systemlist('%s', 'clip-data')", testprg('streams-test')))
assert(out[1]:sub(0, 5) == 'pid: ', out)
- os_kill(out[1]:match("%d+"))
+ os_kill(out[1]:match('%d+'))
end)
it('powershell w/ UTF-8 text #13713', function()
if not helpers.has_powershell() then
- pending("powershell not found", function() end)
+ pending('powershell not found', function() end)
return
end
helpers.set_shell_powershell()
- eq({is_os('win') and 'あ\r' or 'あ'}, eval([[systemlist('Write-Output あ')]]))
+ eq({ is_os('win') and 'あ\r' or 'あ' }, eval([[systemlist('Write-Output あ')]]))
-- Sanity test w/ default encoding
-- * on Windows, expected to default to Western European enc
-- * on Linux, expected to default to UTF8
command([[let &shellcmdflag = '-NoLogo -NoProfile -ExecutionPolicy RemoteSigned -Command ']])
- eq({is_os('win') and '?\r' or 'あ'}, eval([[systemlist('Write-Output あ')]]))
+ eq({ is_os('win') and '?\r' or 'あ' }, eval([[systemlist('Write-Output あ')]]))
end)
-
end)
describe('shell :!', function()
@@ -643,13 +582,13 @@ describe('shell :!', function()
2]])
if is_os('win') then
feed(':4verbose %!sort /R<cr>')
- screen:expect{
- any=[[Executing command: .?& { Get%-Content .* | & sort /R } 2>&1 | %%{ "$_" } | Out%-File .*; exit $LastExitCode"]]
+ screen:expect {
+ any = [[Executing command: .?& { Get%-Content .* | & sort /R } 2>&1 | %%{ "$_" } | Out%-File .*; exit $LastExitCode"]],
}
else
feed(':4verbose %!sort -r<cr>')
- screen:expect{
- any=[[Executing command: .?& { Get%-Content .* | & sort %-r } 2>&1 | %%{ "$_" } | Out%-File .*; exit $LastExitCode"]]
+ screen:expect {
+ any = [[Executing command: .?& { Get%-Content .* | & sort %-r } 2>&1 | %%{ "$_" } | Out%-File .*; exit $LastExitCode"]],
}
end
feed('<CR>')
@@ -673,20 +612,19 @@ describe('shell :!', function()
2]])
feed(':4verbose %w !sort<cr>')
if is_os('win') then
- screen:expect{
- any=[[Executing command: .?sort %< .*]]
+ screen:expect {
+ any = [[Executing command: .?sort %< .*]],
}
else
- screen:expect{
- any=[[Executing command: .?%(sort%) %< .*]]
-
+ screen:expect {
+ any = [[Executing command: .?%(sort%) %< .*]],
}
end
feed('<CR>')
helpers.set_shell_powershell(true)
feed(':4verbose %w !sort<cr>')
- screen:expect{
- any=[[Executing command: .?& { Get%-Content .* | & sort }]]
+ screen:expect {
+ any = [[Executing command: .?& { Get%-Content .* | & sort }]],
}
feed('<CR>')
helpers.expect_exit(command, 'qall!')
diff --git a/test/functional/vimscript/timer_spec.lua b/test/functional/vimscript/timer_spec.lua
index a58cd6ae7f..046d451888 100644
--- a/test/functional/vimscript/timer_spec.lua
+++ b/test/functional/vimscript/timer_spec.lua
@@ -1,10 +1,10 @@
local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local feed, eq, eval, ok = helpers.feed, helpers.eq, helpers.eval, helpers.ok
-local source, nvim_async, run = helpers.source, helpers.nvim_async, helpers.run
-local clear, command, funcs = helpers.clear, helpers.command, helpers.funcs
+local source, async_meths, run = helpers.source, helpers.async_meths, helpers.run
+local clear, command, fn = helpers.clear, helpers.command, helpers.fn
local exc_exec = helpers.exc_exec
-local curbufmeths = helpers.curbufmeths
+local api = helpers.api
local load_adjust = helpers.load_adjust
local retry = helpers.retry
@@ -22,20 +22,20 @@ describe('timers', function()
it('works one-shot', function()
eq(0, eval("[timer_start(10, 'MyHandler'), g:val][1]"))
run(nil, nil, nil, load_adjust(100))
- eq(1,eval("g:val"))
+ eq(1, eval('g:val'))
end)
it('works one-shot when repeat=0', function()
eq(0, eval("[timer_start(10, 'MyHandler', {'repeat': 0}), g:val][1]"))
run(nil, nil, nil, load_adjust(100))
- eq(1, eval("g:val"))
+ eq(1, eval('g:val'))
end)
it('works with repeat two', function()
eq(0, eval("[timer_start(10, 'MyHandler', {'repeat': 2}), g:val][1]"))
run(nil, nil, nil, load_adjust(20))
retry(nil, load_adjust(300), function()
- eq(2, eval("g:val"))
+ eq(2, eval('g:val'))
end)
end)
@@ -52,12 +52,12 @@ describe('timers', function()
endfunc
]])
eval("timer_start(10, 'MyHandler', {'repeat': -1})")
- nvim_async("command", "sleep 10")
- eq(-1, eval("g:val")) -- timer did nothing yet.
- nvim_async("command", "let g:val = 0")
+ async_meths.nvim_command('sleep 10')
+ eq(-1, eval('g:val')) -- timer did nothing yet.
+ async_meths.nvim_command('let g:val = 0')
run(nil, nil, nil, load_adjust(20))
retry(nil, nil, function()
- eq(2, eval("g:val"))
+ eq(2, eval('g:val'))
end)
end)
@@ -65,52 +65,53 @@ describe('timers', function()
-- timer_start does still not invoke the callback immediately
eq(0, eval("[timer_start(0, 'MyHandler', {'repeat': 1000}), g:val][1]"))
retry(nil, nil, function()
- eq(1000, eval("g:val"))
+ eq(1000, eval('g:val'))
end)
end)
it('can be started during sleep', function()
- nvim_async("command", "sleep 10")
+ async_meths.nvim_command('sleep 10')
-- this also tests that remote requests works during sleep
eq(0, eval("[timer_start(10, 'MyHandler', {'repeat': 2}), g:val][1]"))
run(nil, nil, nil, load_adjust(20))
- retry(nil, load_adjust(300), function() eq(2,eval("g:val")) end)
+ retry(nil, load_adjust(300), function()
+ eq(2, eval('g:val'))
+ end)
end)
it('are paused when event processing is disabled', function()
command("call timer_start(5, 'MyHandler', {'repeat': -1})")
run(nil, nil, nil, load_adjust(10))
- local count = eval("g:val")
+ local count = eval('g:val')
-- shows two line error message and thus invokes the return prompt.
-- if we start to allow event processing here, we need to change this test.
feed(':throw "fatal error"<CR>')
run(nil, nil, nil, load_adjust(30))
- feed("<cr>")
- local diff = eval("g:val") - count
- assert(0 <= diff and diff <= 4,
- 'expected (0 <= diff <= 4), got: '..tostring(diff))
+ feed('<cr>')
+ local diff = eval('g:val') - count
+ assert(0 <= diff and diff <= 4, 'expected (0 <= diff <= 4), got: ' .. tostring(diff))
end)
it('are triggered in blocking getchar() call', function()
command("call timer_start(5, 'MyHandler', {'repeat': -1})")
- nvim_async("command", "let g:val = 0 | let g:c = getchar()")
+ async_meths.nvim_command('let g:val = 0 | let g:c = getchar()')
retry(nil, nil, function()
- local val = eval("g:val")
+ local val = eval('g:val')
ok(val >= 2, '>= 2', tostring(val))
- eq(0, eval("getchar(1)"))
+ eq(0, eval('getchar(1)'))
end)
- feed("c")
- eq(99, eval("g:c"))
+ feed('c')
+ eq(99, eval('g:c'))
end)
it('can invoke redraw in blocking getchar() call', function()
local screen = Screen.new(40, 6)
screen:attach()
screen:set_default_attr_ids({
- [1] = {bold=true, foreground=Screen.colors.Blue},
+ [1] = { bold = true, foreground = Screen.colors.Blue },
})
- curbufmeths.set_lines(0, -1, true, {"ITEM 1", "ITEM 2"})
+ api.nvim_buf_set_lines(0, 0, -1, true, { 'ITEM 1', 'ITEM 2' })
source([[
let g:cont = 0
func! AddItem(timer)
@@ -127,48 +128,49 @@ describe('timers', function()
redraw
endfunc
]])
- nvim_async("command", "let g:c2 = getchar()")
- nvim_async("command", "call timer_start("..load_adjust(100)..", 'AddItem', {'repeat': -1})")
+ async_meths.nvim_command('let g:c2 = getchar()')
+ async_meths.nvim_command(
+ 'call timer_start(' .. load_adjust(100) .. ", 'AddItem', {'repeat': -1})"
+ )
screen:expect([[
^ITEM 1 |
ITEM 2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
+ {1:~ }|*3
|
]])
- nvim_async("command", "let g:cont = 1")
+ async_meths.nvim_command('let g:cont = 1')
screen:expect([[
^ITEM 1 |
ITEM 2 |
ITEM 3 |
- {1:~ }|
- {1:~ }|
+ {1:~ }|*2
|
]])
- feed("3")
- eq(51, eval("g:c2"))
- screen:expect{grid=[[
+ feed('3')
+ eq(51, eval('g:c2'))
+ screen:expect {
+ grid = [[
^ITEM 1 |
ITEM 2 |
ITEM 3 |
- {1:~ }|
- {1:~ }|
+ {1:~ }|*2
|
- ]], unchanged=true}
+ ]],
+ unchanged = true,
+ }
end)
it('can be stopped', function()
local t_init_val = eval("[timer_start(5, 'MyHandler', {'repeat': -1}), g:val]")
eq(0, t_init_val[2])
run(nil, nil, nil, load_adjust(30))
- funcs.timer_stop(t_init_val[1])
- local count = eval("g:val")
+ fn.timer_stop(t_init_val[1])
+ local count = eval('g:val')
run(nil, load_adjust(300), nil, load_adjust(30))
- local count2 = eval("g:val")
+ local count2 = eval('g:val')
-- when count is eval:ed after timer_stop this should be non-racy
eq(count, count2)
end)
@@ -184,10 +186,10 @@ describe('timers', function()
endif
endfunc
]])
- eq(0, eval("g:val"))
+ eq(0, eval('g:val'))
command("call timer_start(10, 'MyHandler', {'repeat': -1})")
retry(nil, nil, function()
- eq(3, eval("g:val"))
+ eq(3, eval('g:val'))
end)
end)
@@ -201,8 +203,8 @@ describe('timers', function()
command("call timer_start(2, 'MyHandler', {'repeat': 3})")
command("call timer_start(4, 'MyHandler2', {'repeat': 2})")
retry(nil, nil, function()
- eq(3, eval("g:val"))
- eq(2, eval("g:val2"))
+ eq(3, eval('g:val'))
+ eq(2, eval('g:val2'))
end)
end)
@@ -218,15 +220,14 @@ describe('timers', function()
command("call timer_start(5, 'MyHandler', {'repeat': 1})")
run(nil, nil, nil, load_adjust(20))
retry(nil, load_adjust(150), function()
- eq(1, eval("g:val"))
+ eq(1, eval('g:val'))
end)
end)
-
it("doesn't mess up the cmdline", function()
local screen = Screen.new(40, 6)
screen:attach()
- screen:set_default_attr_ids( {[0] = {bold=true, foreground=255}} )
+ screen:set_default_attr_ids({ [0] = { bold = true, foreground = 255 } })
source([[
let g:val = 0
func! MyHandler(timer)
@@ -241,13 +242,10 @@ describe('timers', function()
endfunc
]])
command("call timer_start(100, 'MyHandler', {'repeat': -1})")
- feed(":good")
+ feed(':good')
screen:expect([[
|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
+ {0:~ }|*4
:good^ |
]])
command('let g:val = 1')
@@ -262,7 +260,7 @@ describe('timers', function()
call execute('echo ''execute() should be disallowed''', '')
endfunction
]]
- eq("Vim(call):E48: Not allowed in sandbox", exc_exec("sandbox call timer_start(0, 'Scary')"))
+ eq('Vim(call):E48: Not allowed in sandbox', exc_exec("sandbox call timer_start(0, 'Scary')"))
end)
it('can be triggered after an empty string <expr> mapping #17257', function()
@@ -270,6 +268,6 @@ describe('timers', function()
screen:attach()
command([=[imap <expr> <F2> [timer_start(0, { _ -> execute("throw 'x'", "") }), ''][-1]]=])
feed('i<F2>')
- screen:expect({any='E605: Exception not caught: x'})
+ screen:expect({ any = 'E605: Exception not caught: x' })
end)
end)
diff --git a/test/functional/vimscript/uniq_spec.lua b/test/functional/vimscript/uniq_spec.lua
index 43ad4a7640..8fd4004be4 100644
--- a/test/functional/vimscript/uniq_spec.lua
+++ b/test/functional/vimscript/uniq_spec.lua
@@ -10,8 +10,10 @@ before_each(clear)
describe('uniq()', function()
it('errors out when processing special values', function()
- eq('Vim(call):E362: Using a boolean value as a Float',
- exc_exec('call uniq([v:true, v:false], "f")'))
+ eq(
+ 'Vim(call):E362: Using a boolean value as a Float',
+ exc_exec('call uniq([v:true, v:false], "f")')
+ )
end)
it('can yield E882 and stop filtering after that', function()
@@ -23,7 +25,9 @@ describe('uniq()', function()
return (a:a > a:b) - (a:a < a:b)
endfunction
]])
- eq('Vim(let):E745: Using a List as a Number',
- pcall_err(command, 'let fl = uniq([0, 0, [], 1, 1], "Cmp")'))
+ eq(
+ 'Vim(let):E745: Using a List as a Number',
+ pcall_err(command, 'let fl = uniq([0, 0, [], 1, 1], "Cmp")')
+ )
end)
end)
diff --git a/test/functional/vimscript/vvar_event_spec.lua b/test/functional/vimscript/vvar_event_spec.lua
index eec8aa917a..68eda05363 100644
--- a/test/functional/vimscript/vvar_event_spec.lua
+++ b/test/functional/vimscript/vvar_event_spec.lua
@@ -12,4 +12,3 @@ describe('v:event', function()
eq(false, pcall(command, 'let v:event.mykey = {}'))
end)
end)
-
diff --git a/test/functional/vimscript/wait_spec.lua b/test/functional/vimscript/wait_spec.lua
index ee95e02a7f..50cdb2cfb4 100644
--- a/test/functional/vimscript/wait_spec.lua
+++ b/test/functional/vimscript/wait_spec.lua
@@ -7,14 +7,14 @@ local eq = helpers.eq
local feed = helpers.feed
local feed_command = helpers.feed_command
local next_msg = helpers.next_msg
-local nvim = helpers.nvim
+local api = helpers.api
local source = helpers.source
local pcall_err = helpers.pcall_err
before_each(function()
clear()
- local channel = nvim('get_api_info')[1]
- nvim('set_var', 'channel', channel)
+ local channel = api.nvim_get_chan_info(0).id
+ api.nvim_set_var('channel', channel)
end)
describe('wait()', function()
@@ -36,11 +36,12 @@ describe('wait()', function()
end)
it('returns -2 when interrupted', function()
- feed_command('call rpcnotify(g:channel, "ready") | '..
- 'call rpcnotify(g:channel, "wait", wait(-1, 0))')
- eq({'notification', 'ready', {}}, next_msg())
+ feed_command(
+ 'call rpcnotify(g:channel, "ready") | ' .. 'call rpcnotify(g:channel, "wait", wait(-1, 0))'
+ )
+ eq({ 'notification', 'ready', {} }, next_msg())
feed('<c-c>')
- eq({'notification', 'wait', {-2}}, next_msg())
+ eq({ 'notification', 'wait', { -2 } }, next_msg())
end)
it('returns -3 on error', function()
@@ -60,13 +61,13 @@ describe('wait()', function()
-- XXX: flaky (#11137)
helpers.retry(nil, nil, function()
- nvim('set_var', 'counter', 0)
+ api.nvim_set_var('counter', 0)
eq(-1, call('wait', 20, 'Count() >= 5', 99999))
end)
- nvim('set_var', 'counter', 0)
+ api.nvim_set_var('counter', 0)
eq(0, call('wait', 10000, 'Count() >= 5', 5))
- eq(5, nvim('get_var', 'counter'))
+ eq(5, api.nvim_get_var('counter'))
end)
it('validates args', function()
diff --git a/test/functional/vimscript/writefile_spec.lua b/test/functional/vimscript/writefile_spec.lua
index 88c19bd839..051e3794a3 100644
--- a/test/functional/vimscript/writefile_spec.lua
+++ b/test/functional/vimscript/writefile_spec.lua
@@ -1,11 +1,10 @@
local helpers = require('test.functional.helpers')(after_each)
-local luv = require('luv')
local mkdir = helpers.mkdir
local clear = helpers.clear
local eq = helpers.eq
-local funcs = helpers.funcs
-local meths = helpers.meths
+local fn = helpers.fn
+local api = helpers.api
local exc_exec = helpers.exc_exec
local read_file = helpers.read_file
local write_file = helpers.write_file
@@ -28,149 +27,175 @@ end)
after_each(function()
os.remove(fname)
os.remove(dfname)
- luv.fs_rmdir(ddname)
- luv.fs_rmdir(dname)
+ vim.uv.fs_rmdir(ddname)
+ vim.uv.fs_rmdir(dname)
end)
describe('writefile()', function()
it('writes empty list to a file', function()
eq(nil, read_file(fname))
- eq(0, funcs.writefile({}, fname))
+ eq(0, fn.writefile({}, fname))
eq('', read_file(fname))
os.remove(fname)
eq(nil, read_file(fname))
- eq(0, funcs.writefile({}, fname, 'b'))
+ eq(0, fn.writefile({}, fname, 'b'))
eq('', read_file(fname))
os.remove(fname)
eq(nil, read_file(fname))
- eq(0, funcs.writefile({}, fname, 'ab'))
+ eq(0, fn.writefile({}, fname, 'ab'))
eq('', read_file(fname))
os.remove(fname)
eq(nil, read_file(fname))
- eq(0, funcs.writefile({}, fname, 'a'))
+ eq(0, fn.writefile({}, fname, 'a'))
eq('', read_file(fname))
end)
it('writes list with an empty string to a file', function()
- eq(0, exc_exec(
- ('call writefile([$XXX_NONEXISTENT_VAR_XXX], "%s", "b")'):format(
- fname)))
+ eq(0, exc_exec(('call writefile([$XXX_NONEXISTENT_VAR_XXX], "%s", "b")'):format(fname)))
eq('', read_file(fname))
- eq(0, exc_exec(('call writefile([$XXX_NONEXISTENT_VAR_XXX], "%s")'):format(
- fname)))
+ eq(0, exc_exec(('call writefile([$XXX_NONEXISTENT_VAR_XXX], "%s")'):format(fname)))
eq('\n', read_file(fname))
end)
it('writes list with a null string to a file', function()
- eq(0, exc_exec(
- ('call writefile([v:_null_string], "%s", "b")'):format(
- fname)))
+ eq(0, exc_exec(('call writefile([v:_null_string], "%s", "b")'):format(fname)))
eq('', read_file(fname))
- eq(0, exc_exec(('call writefile([v:_null_string], "%s")'):format(
- fname)))
+ eq(0, exc_exec(('call writefile([v:_null_string], "%s")'):format(fname)))
eq('\n', read_file(fname))
end)
it('appends to a file', function()
eq(nil, read_file(fname))
- eq(0, funcs.writefile({'abc', 'def', 'ghi'}, fname))
+ eq(0, fn.writefile({ 'abc', 'def', 'ghi' }, fname))
eq('abc\ndef\nghi\n', read_file(fname))
- eq(0, funcs.writefile({'jkl'}, fname, 'a'))
+ eq(0, fn.writefile({ 'jkl' }, fname, 'a'))
eq('abc\ndef\nghi\njkl\n', read_file(fname))
os.remove(fname)
eq(nil, read_file(fname))
- eq(0, funcs.writefile({'abc', 'def', 'ghi'}, fname, 'b'))
+ eq(0, fn.writefile({ 'abc', 'def', 'ghi' }, fname, 'b'))
eq('abc\ndef\nghi', read_file(fname))
- eq(0, funcs.writefile({'jkl'}, fname, 'ab'))
+ eq(0, fn.writefile({ 'jkl' }, fname, 'ab'))
eq('abc\ndef\nghijkl', read_file(fname))
end)
it('correctly treats NLs', function()
- eq(0, funcs.writefile({'\na\nb\n'}, fname, 'b'))
+ eq(0, fn.writefile({ '\na\nb\n' }, fname, 'b'))
eq('\0a\0b\0', read_file(fname))
- eq(0, funcs.writefile({'a\n\n\nb'}, fname, 'b'))
+ eq(0, fn.writefile({ 'a\n\n\nb' }, fname, 'b'))
eq('a\0\0\0b', read_file(fname))
end)
it('writes with s and S', function()
- eq(0, funcs.writefile({'\na\nb\n'}, fname, 'bs'))
+ eq(0, fn.writefile({ '\na\nb\n' }, fname, 'bs'))
eq('\0a\0b\0', read_file(fname))
- eq(0, funcs.writefile({'a\n\n\nb'}, fname, 'bS'))
+ eq(0, fn.writefile({ 'a\n\n\nb' }, fname, 'bS'))
eq('a\0\0\0b', read_file(fname))
end)
it('correctly overwrites file', function()
- eq(0, funcs.writefile({'\na\nb\n'}, fname, 'b'))
+ eq(0, fn.writefile({ '\na\nb\n' }, fname, 'b'))
eq('\0a\0b\0', read_file(fname))
- eq(0, funcs.writefile({'a\n'}, fname, 'b'))
+ eq(0, fn.writefile({ 'a\n' }, fname, 'b'))
eq('a\0', read_file(fname))
end)
it('shows correct file name when supplied numbers', function()
- meths.set_current_dir(dname)
- eq('Vim(call):E482: Can\'t open file 2 for writing: illegal operation on a directory',
- pcall_err(command, ('call writefile([42], %s)'):format(ddname_tail)))
+ api.nvim_set_current_dir(dname)
+ eq(
+ "Vim(call):E482: Can't open file 2 for writing: illegal operation on a directory",
+ pcall_err(command, ('call writefile([42], %s)'):format(ddname_tail))
+ )
end)
it('writefile(..., "p") creates missing parent directories', function()
os.remove(dname)
eq(nil, read_file(dfname))
- eq(0, funcs.writefile({'abc', 'def', 'ghi'}, dfname, 'p'))
+ eq(0, fn.writefile({ 'abc', 'def', 'ghi' }, dfname, 'p'))
eq('abc\ndef\nghi\n', read_file(dfname))
os.remove(dfname)
os.remove(dname)
eq(nil, read_file(dfname))
- eq(0, funcs.writefile({'\na\nb\n'}, dfname, 'pb'))
+ eq(0, fn.writefile({ '\na\nb\n' }, dfname, 'pb'))
eq('\0a\0b\0', read_file(dfname))
os.remove(dfname)
os.remove(dname)
- eq('Vim(call):E32: No file name',
- pcall_err(command, ('call writefile([], "%s", "p")'):format(dfname .. '.d/')))
- eq(('Vim(call):E482: Can\'t open file ./ for writing: illegal operation on a directory'),
- pcall_err(command, 'call writefile([], "./", "p")'))
- eq(('Vim(call):E482: Can\'t open file . for writing: illegal operation on a directory'),
- pcall_err(command, 'call writefile([], ".", "p")'))
+ eq(
+ 'Vim(call):E32: No file name',
+ pcall_err(command, ('call writefile([], "%s", "p")'):format(dfname .. '.d/'))
+ )
+ eq(
+ "Vim(call):E482: Can't open file ./ for writing: illegal operation on a directory",
+ pcall_err(command, 'call writefile([], "./", "p")')
+ )
+ eq(
+ "Vim(call):E482: Can't open file . for writing: illegal operation on a directory",
+ pcall_err(command, 'call writefile([], ".", "p")')
+ )
end)
it('errors out with invalid arguments', function()
write_file(fname, 'TEST')
- eq('Vim(call):E119: Not enough arguments for function: writefile',
- pcall_err(command, 'call writefile()'))
- eq('Vim(call):E119: Not enough arguments for function: writefile',
- pcall_err(command, 'call writefile([])'))
- eq('Vim(call):E118: Too many arguments for function: writefile',
- pcall_err(command, ('call writefile([], "%s", "b", 1)'):format(fname)))
- for _, arg in ipairs({'0', '0.0', 'function("tr")', '{}', '"test"'}) do
- eq('Vim(call):E475: Invalid argument: writefile() first argument must be a List or a Blob',
- pcall_err(command, ('call writefile(%s, "%s", "b")'):format(arg, fname)))
+ eq(
+ 'Vim(call):E119: Not enough arguments for function: writefile',
+ pcall_err(command, 'call writefile()')
+ )
+ eq(
+ 'Vim(call):E119: Not enough arguments for function: writefile',
+ pcall_err(command, 'call writefile([])')
+ )
+ eq(
+ 'Vim(call):E118: Too many arguments for function: writefile',
+ pcall_err(command, ('call writefile([], "%s", "b", 1)'):format(fname))
+ )
+ for _, arg in ipairs({ '0', '0.0', 'function("tr")', '{}', '"test"' }) do
+ eq(
+ 'Vim(call):E475: Invalid argument: writefile() first argument must be a List or a Blob',
+ pcall_err(command, ('call writefile(%s, "%s", "b")'):format(arg, fname))
+ )
end
- for _, args in ipairs({'[], %s, "b"', '[], "' .. fname .. '", %s'}) do
- eq('Vim(call):E730: Using a List as a String',
- pcall_err(command, ('call writefile(%s)'):format(args:format('[]'))))
- eq('Vim(call):E731: Using a Dictionary as a String',
- pcall_err(command, ('call writefile(%s)'):format(args:format('{}'))))
- eq('Vim(call):E729: Using a Funcref as a String',
- pcall_err(command, ('call writefile(%s)'):format(args:format('function("tr")'))))
+ for _, args in ipairs({ '[], %s, "b"', '[], "' .. fname .. '", %s' }) do
+ eq(
+ 'Vim(call):E730: Using a List as a String',
+ pcall_err(command, ('call writefile(%s)'):format(args:format('[]')))
+ )
+ eq(
+ 'Vim(call):E731: Using a Dictionary as a String',
+ pcall_err(command, ('call writefile(%s)'):format(args:format('{}')))
+ )
+ eq(
+ 'Vim(call):E729: Using a Funcref as a String',
+ pcall_err(command, ('call writefile(%s)'):format(args:format('function("tr")')))
+ )
end
- eq('Vim(call):E5060: Unknown flag: «»',
- pcall_err(command, ('call writefile([], "%s", "bs«»")'):format(fname)))
+ eq(
+ 'Vim(call):E5060: Unknown flag: «»',
+ pcall_err(command, ('call writefile([], "%s", "bs«»")'):format(fname))
+ )
eq('TEST', read_file(fname))
end)
it('does not write to file if error in list', function()
local args = '["tset"] + repeat([%s], 3), "' .. fname .. '"'
- eq('Vim(call):E805: Expected a Number or a String, Float found',
- pcall_err(command, ('call writefile(%s)'):format(args:format('0.0'))))
+ eq(
+ 'Vim(call):E805: Expected a Number or a String, Float found',
+ pcall_err(command, ('call writefile(%s)'):format(args:format('0.0')))
+ )
eq(nil, read_file(fname))
write_file(fname, 'TEST')
- eq('Vim(call):E745: Expected a Number or a String, List found',
- pcall_err(command, ('call writefile(%s)'):format(args:format('[]'))))
+ eq(
+ 'Vim(call):E745: Expected a Number or a String, List found',
+ pcall_err(command, ('call writefile(%s)'):format(args:format('[]')))
+ )
eq('TEST', read_file(fname))
- eq('Vim(call):E728: Expected a Number or a String, Dictionary found',
- pcall_err(command, ('call writefile(%s)'):format(args:format('{}'))))
+ eq(
+ 'Vim(call):E728: Expected a Number or a String, Dictionary found',
+ pcall_err(command, ('call writefile(%s)'):format(args:format('{}')))
+ )
eq('TEST', read_file(fname))
- eq('Vim(call):E703: Expected a Number or a String, Funcref found',
- pcall_err(command, ('call writefile(%s)'):format(args:format('function("tr")'))))
+ eq(
+ 'Vim(call):E703: Expected a Number or a String, Funcref found',
+ pcall_err(command, ('call writefile(%s)'):format(args:format('function("tr")')))
+ )
eq('TEST', read_file(fname))
end)
end)