diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/api/autocmd_spec.lua | 173 | ||||
-rw-r--r-- | test/functional/ex_cmds/map_spec.lua | 5 | ||||
-rw-r--r-- | test/functional/lua/api_spec.lua | 7 | ||||
-rw-r--r-- | test/helpers.lua | 10 |
4 files changed, 91 insertions, 104 deletions
diff --git a/test/functional/api/autocmd_spec.lua b/test/functional/api/autocmd_spec.lua index 2b48ffa6f0..e50e812b4b 100644 --- a/test/functional/api/autocmd_spec.lua +++ b/test/functional/api/autocmd_spec.lua @@ -14,8 +14,7 @@ before_each(clear) describe('autocmd api', function() describe('nvim_create_autocmd', function() it('does not allow "command" and "callback" in the same autocmd', function() - local ok, _ = pcall(meths.create_autocmd, { - event = "BufReadPost", + local ok, _ = pcall(meths.create_autocmd, "BufReadPost", { pattern = "*.py,*.pyi", command = "echo 'Should Have Errored", callback = "not allowed", @@ -28,12 +27,11 @@ describe('autocmd api', function() eq(1, exec_lua([[ local count = 0 - vim.api.nvim_create_autocmd { - event = "FileType", + vim.api.nvim_create_autocmd("FileType", { pattern = "*", callback = function() count = count + 1 end, once = true - } + }) vim.cmd "set filetype=txt" vim.cmd "set filetype=python" @@ -45,11 +43,10 @@ describe('autocmd api', function() it('allows passing buffer by key', function() meths.set_var('called', 0) - meths.create_autocmd { - event = "Filetype", + meths.create_autocmd("FileType", { command = "let g:called = g:called + 1", buffer = 0, - } + }) meths.command "set filetype=txt" eq(1, meths.get_var('called')) @@ -62,8 +59,7 @@ describe('autocmd api', function() end) it('does not allow passing buffer and patterns', function() - local ok = pcall(meths.create_autocmd, { - event = "Filetype", + local ok = pcall(meths.create_autocmd, "Filetype", { command = "let g:called = g:called + 1", buffer = 0, pattern = "*.py", @@ -73,8 +69,7 @@ describe('autocmd api', function() end) it('does not allow passing invalid buffers', function() - local ok, msg = pcall(meths.create_autocmd, { - event = "Filetype", + local ok, msg = pcall(meths.create_autocmd, "Filetype", { command = "let g:called = g:called + 1", buffer = -1, }) @@ -85,17 +80,15 @@ describe('autocmd api', function() it('errors on non-functions for cb', function() eq(false, pcall(exec_lua, [[ - vim.api.nvim_create_autocmd { - event = "BufReadPost", + vim.api.nvim_create_autocmd("BufReadPost", { pattern = "*.py,*.pyi", callback = 5, - } + }) ]])) end) it('allow passing pattern and <buffer> in same pattern', function() - local ok = pcall(meths.create_autocmd, { - event = "BufReadPost", + local ok = pcall(meths.create_autocmd, "BufReadPost", { pattern = "*.py,<buffer>", command = "echo 'Should Not Error'" }) @@ -104,22 +97,20 @@ describe('autocmd api', function() end) it('should handle multiple values as comma separated list', function() - meths.create_autocmd { - event = "BufReadPost", + meths.create_autocmd("BufReadPost", { pattern = "*.py,*.pyi", command = "echo 'Should Not Have Errored'" - } + }) -- We should have one autocmd for *.py and one for *.pyi eq(2, #meths.get_autocmds { event = "BufReadPost" }) end) it('should handle multiple values as array', function() - meths.create_autocmd { - event = "BufReadPost", + meths.create_autocmd("BufReadPost", { pattern = { "*.py", "*.pyi", }, command = "echo 'Should Not Have Errored'" - } + }) -- We should have one autocmd for *.py and one for *.pyi eq(2, #meths.get_autocmds { event = "BufReadPost" }) @@ -127,23 +118,21 @@ describe('autocmd api', function() describe('desc', function() it('can add description to one autocmd', function() - meths.create_autocmd { - event = "BufReadPost", + meths.create_autocmd("BufReadPost", { pattern = "*.py", command = "echo 'Should Not Have Errored'", desc = "Can show description", - } + }) eq("Can show description", meths.get_autocmds { event = "BufReadPost" }[1].desc) end) it('can add description to multiple autocmd', function() - meths.create_autocmd { - event = "BufReadPost", + meths.create_autocmd("BufReadPost", { pattern = {"*.py", "*.pyi"}, command = "echo 'Should Not Have Errored'", desc = "Can show description", - } + }) local aus = meths.get_autocmds { event = "BufReadPost" } eq(2, #aus) @@ -154,12 +143,11 @@ describe('autocmd api', function() pending('script and verbose settings', function() it('marks API client', function() - meths.create_autocmd { - event = "BufReadPost", + meths.create_autocmd("BufReadPost", { pattern = "*.py", command = "echo 'Should Not Have Errored'", desc = "Can show description", - } + }) local aus = meths.get_autocmds { event = "BufReadPost" } eq(1, #aus, aus) @@ -211,8 +199,7 @@ describe('autocmd api', function() command [[au! InsertLeave]] command [[au InsertEnter * :echo "1"]] source [[ - call nvim_create_autocmd(#{ - \ event: "InsertLeave", + call nvim_create_autocmd("InsertLeave", #{ \ command: ":echo 2", \ }) ]] @@ -230,6 +217,14 @@ describe('autocmd api', function() eq(1, #new_aus) eq(first, new_aus[1]) end) + + it('should return event name', function() + command [[au! InsertEnter]] + command [[au InsertEnter * :echo "1"]] + + local aus = meths.get_autocmds { event = "InsertEnter" } + eq({ { buflocal = false, command = ':echo "1"', event = "InsertEnter", once = false, pattern = "*" } }, aus) + end) end) describe('groups', function() @@ -283,12 +278,11 @@ describe('autocmd api', function() it('raises error for undefined augroup', function() local success, code = unpack(meths.exec_lua([[ return {pcall(function() - vim.api.nvim_create_autocmd { - event = "FileType", + vim.api.nvim_create_autocmd("FileType", { pattern = "*", group = "NotDefined", command = "echo 'hello'", - } + }) end)} ]], {})) @@ -358,14 +352,13 @@ describe('autocmd api', function() it("can trigger builtin autocmds", function() meths.set_var("autocmd_executed", false) - meths.create_autocmd { - event = "BufReadPost", + meths.create_autocmd("BufReadPost", { pattern = "*", command = "let g:autocmd_executed = v:true", - } + }) eq(false, meths.get_var("autocmd_executed")) - meths.do_autocmd { event = "BufReadPost" } + meths.do_autocmd("BufReadPost", {}) eq(true, meths.get_var("autocmd_executed")) end) @@ -373,17 +366,16 @@ describe('autocmd api', function() meths.set_var("buffer_executed", -1) eq(-1, meths.get_var("buffer_executed")) - meths.create_autocmd { - event = "BufLeave", + meths.create_autocmd("BufLeave", { pattern = "*", command = 'let g:buffer_executed = +expand("<abuf>")', - } + }) -- Doesn't execute for other non-matching events - meths.do_autocmd { event = "CursorHold", buffer = 1 } + meths.do_autocmd("CursorHold", { buffer = 1 }) eq(-1, meths.get_var("buffer_executed")) - meths.do_autocmd { event = "BufLeave", buffer = 1 } + meths.do_autocmd("BufLeave", { buffer = 1 }) eq(1, meths.get_var("buffer_executed")) end) @@ -391,14 +383,13 @@ describe('autocmd api', function() meths.set_var("filename_executed", 'none') eq('none', meths.get_var("filename_executed")) - meths.create_autocmd { - event = "BufEnter", + meths.create_autocmd("BufEnter", { pattern = "*.py", command = 'let g:filename_executed = expand("<afile>")', - } + }) -- Doesn't execute for other non-matching events - meths.do_autocmd { event = "CursorHold", buffer = 1 } + meths.do_autocmd("CursorHold", { buffer = 1 }) eq('none', meths.get_var("filename_executed")) meths.command('edit __init__.py') @@ -406,7 +397,7 @@ describe('autocmd api', function() end) it('cannot pass buf and fname', function() - local ok = pcall(meths.do_autocmd, { pattern = "literally_cannot_error.rs", buffer = 1 }) + local ok = pcall(meths.do_autocmd, "BufReadPre", { pattern = "literally_cannot_error.rs", buffer = 1 }) eq(false, ok) end) @@ -418,38 +409,36 @@ describe('autocmd api', function() meths.command('edit __init__.py') eq('none', meths.get_var("filename_executed")) - meths.create_autocmd { - event = "CursorHoldI", + meths.create_autocmd("CursorHoldI", { pattern = "__init__.py", command = 'let g:filename_executed = expand("<afile>")', - } + }) -- Doesn't execute for other non-matching events - meths.do_autocmd { event = "CursorHoldI", buffer = 1 } + meths.do_autocmd("CursorHoldI", { buffer = 1 }) eq('none', meths.get_var("filename_executed")) - meths.do_autocmd { event = "CursorHoldI", buffer = tonumber(meths.get_current_buf()) } + meths.do_autocmd("CursorHoldI", { buffer = tonumber(meths.get_current_buf()) }) eq('__init__.py', meths.get_var("filename_executed")) -- Reset filename meths.set_var("filename_executed", 'none') - meths.do_autocmd { event = "CursorHoldI", pattern = '__init__.py' } + meths.do_autocmd("CursorHoldI", { pattern = '__init__.py' }) eq('__init__.py', meths.get_var("filename_executed")) end) it("works with user autocmds", function() meths.set_var("matched", 'none') - meths.create_autocmd { - event = "User", + meths.create_autocmd("User", { pattern = "TestCommand", command = 'let g:matched = "matched"' - } + }) - meths.do_autocmd { event = "User", pattern = "OtherCommand" } + meths.do_autocmd("User", { pattern = "OtherCommand" }) eq('none', meths.get_var('matched')) - meths.do_autocmd { event = "User", pattern = "TestCommand" } + meths.do_autocmd("User", { pattern = "TestCommand" }) eq('matched', meths.get_var('matched')) end) end) @@ -465,7 +454,6 @@ describe('autocmd api', function() opts = opts or {} local resulting = { - event = "FileType", pattern = "*", command = "let g:executed = g:executed + 1", } @@ -473,7 +461,7 @@ describe('autocmd api', function() resulting.group = opts.group resulting.once = opts.once - meths.create_autocmd(resulting) + meths.create_autocmd("FileType", resulting) end local set_ft = function(ft) @@ -487,7 +475,7 @@ describe('autocmd api', function() it('can be added in a group', function() local augroup = "TestGroup" - meths.create_augroup({ name = augroup, clear = true }) + meths.create_augroup(augroup, { clear = true }) make_counting_autocmd { group = augroup } set_ft("txt") @@ -516,8 +504,7 @@ describe('autocmd api', function() end) it('errors on unexpected keys', function() - local success, code = pcall(meths.create_autocmd, { - event = "FileType", + local success, code = pcall(meths.create_autocmd, "FileType", { pattern = "*", not_a_valid_key = "NotDefined", }) @@ -530,11 +517,10 @@ describe('autocmd api', function() exec_lua([[ vim.g.executed = false - vim.api.nvim_create_autocmd { - event = "FileType", + vim.api.nvim_create_autocmd("FileType", { pattern = "*", callback = function() vim.g.executed = true end, - } + }) ]], {}) @@ -551,17 +537,15 @@ describe('autocmd api', function() count = count + 1 end - vim.api.nvim_create_autocmd { - event = "FileType", + vim.api.nvim_create_autocmd("FileType", { pattern = "*", callback = counter, - } + }) - vim.api.nvim_create_autocmd { - event = "FileType", + vim.api.nvim_create_autocmd("FileType", { pattern = "*", callback = counter, - } + }) vim.cmd "set filetype=txt" vim.cmd "set filetype=txt" @@ -579,15 +563,14 @@ describe('autocmd api', function() MyVal = {} WeakTable[MyVal] = true - vim.api.nvim_create_autocmd { - event = "FileType", + vim.api.nvim_create_autocmd("FileType", { pattern = "*", callback = function() OnceCount = OnceCount + 1 MyVal = {} end, once = true - } + }) ]]) command [[set filetype=txt]] @@ -610,10 +593,9 @@ describe('autocmd api', function() it('groups can be cleared', function() local augroup = "TestGroup" - meths.create_augroup({ name = augroup, clear = true }) - meths.create_autocmd({ + meths.create_augroup(augroup, { clear = true }) + meths.create_autocmd("FileType", { group = augroup, - event = "FileType", command = "let g:executed = g:executed + 1" }) @@ -621,7 +603,7 @@ describe('autocmd api', function() set_ft("txt") eq(2, get_executed_count(), "should only count twice") - meths.create_augroup({ name = augroup, clear = true }) + meths.create_augroup(augroup, { clear = true }) eq({}, meths.get_autocmds { group = augroup }) set_ft("txt") @@ -632,7 +614,7 @@ describe('autocmd api', function() it('groups work with once', function() local augroup = "TestGroup" - meths.create_augroup({ name = augroup, clear = true }) + meths.create_augroup(augroup, { clear = true }) make_counting_autocmd { group = augroup, once = true } set_ft("txt") @@ -644,7 +626,7 @@ describe('autocmd api', function() it('autocmds can be registered multiple times.', function() local augroup = "TestGroup" - meths.create_augroup({ name = augroup, clear = true }) + meths.create_augroup(augroup, { clear = true }) make_counting_autocmd { group = augroup, once = false } make_counting_autocmd { group = augroup, once = false } make_counting_autocmd { group = augroup, once = false } @@ -658,15 +640,14 @@ describe('autocmd api', function() it('can be deleted', function() local augroup = "WillBeDeleted" - meths.create_augroup({ name = augroup, clear = true }) - meths.create_autocmd { - event = {"Filetype"}, + meths.create_augroup(augroup, { clear = true }) + meths.create_autocmd({"Filetype"}, { pattern = "*", command = "echo 'does not matter'", - } + }) -- Clears the augroup from before, which erases the autocmd - meths.create_augroup({ name = augroup, clear = true }) + meths.create_augroup(augroup, { clear = true }) local result = #meths.get_autocmds { group = augroup } @@ -678,12 +659,11 @@ describe('autocmd api', function() meths.set_var("value_set", false) - meths.create_augroup({ name = augroup, clear = true }) - meths.create_autocmd { - event = "Filetype", + meths.create_augroup(augroup, { clear = true }) + meths.create_autocmd("Filetype", { pattern = "<buffer>", command = "let g:value_set = v:true", - } + }) command "new" command "set filetype=python" @@ -699,8 +679,7 @@ describe('autocmd api', function() let g:vimscript_executed = g:vimscript_executed + 1 endfunction - call nvim_create_autocmd(#{ - \ event: "Filetype", + call nvim_create_autocmd("FileType", #{ \ pattern: ["python", "javascript"], \ callback: "MyVimscriptFunction", \ }) @@ -773,7 +752,7 @@ describe('autocmd api', function() command('autocmd! BufReadPost *.py :echo "Hello"') command('augroup END') - local augroup_id = meths.create_augroup { name = "TEMP_ABCD", clear = false } + local augroup_id = meths.create_augroup("TEMP_ABCD", { clear = false }) meths.del_augroup_by_id(augroup_id) -- For good reason, we kill all the autocmds from del_augroup, diff --git a/test/functional/ex_cmds/map_spec.lua b/test/functional/ex_cmds/map_spec.lua index 007d68d61a..6eeb079f75 100644 --- a/test/functional/ex_cmds/map_spec.lua +++ b/test/functional/ex_cmds/map_spec.lua @@ -30,7 +30,7 @@ describe(':*map', function() expect('-foo-') end) - it('<Plug> keymaps ignore nore', function() + it('<Plug> mappings ignore nore', function() command('let x = 0') eq(0, meths.eval('x')) command [[ @@ -43,7 +43,8 @@ describe(':*map', function() feed('increase_x_noremap') eq(2, meths.eval('x')) end) - it("Doesn't auto ignore nore for keys before or after <Plug> keymap", function() + + it("Doesn't auto ignore nore for keys before or after <Plug> mapping", function() command('let x = 0') eq(0, meths.eval('x')) command [[ diff --git a/test/functional/lua/api_spec.lua b/test/functional/lua/api_spec.lua index cb37fb9a1c..f173a15d32 100644 --- a/test/functional/lua/api_spec.lua +++ b/test/functional/lua/api_spec.lua @@ -102,6 +102,13 @@ describe('luaeval(vim.api.…)', function() eq(false, funcs.luaeval('vim.api.nvim__id(false)')) eq(NIL, funcs.luaeval('vim.api.nvim__id(nil)')) + -- API strings from Blobs can work as NUL-terminated C strings + eq('Vim(call):E5555: API call: Vim:E15: Invalid expression: ', + exc_exec('call nvim_eval(v:_null_blob)')) + eq('Vim(call):E5555: API call: Vim:E15: Invalid expression: ', + exc_exec('call nvim_eval(0z)')) + eq(1, eval('nvim_eval(0z31)')) + eq(0, eval([[type(luaeval('vim.api.nvim__id(1)'))]])) eq(1, eval([[type(luaeval('vim.api.nvim__id("1")'))]])) eq(3, eval([[type(luaeval('vim.api.nvim__id({1})'))]])) diff --git a/test/helpers.lua b/test/helpers.lua index 333e98d495..7d2f8f760a 100644 --- a/test/helpers.lua +++ b/test/helpers.lua @@ -58,9 +58,9 @@ local check_logs_useless_lines = { --- Invokes `fn` and includes the tail of `logfile` in the error message if it --- fails. --- ----@param logfile Log file, defaults to $NVIM_LOG_FILE or '.nvimlog' ----@param fn Function to invoke ----@param ... Function arguments +---@param logfile string Log file, defaults to $NVIM_LOG_FILE or '.nvimlog' +---@param fn string Function to invoke +---@param ... string Function arguments local function dumplog(logfile, fn, ...) -- module.validate({ -- logfile={logfile,'s',true}, @@ -102,8 +102,8 @@ end --- Asserts that `pat` matches one or more lines in the tail of $NVIM_LOG_FILE. --- ----@param pat (string) Lua pattern to search for in the log file. ----@param logfile (string, default=$NVIM_LOG_FILE) full path to log file. +---@param pat string Lua pattern to search for in the log file +---@param logfile string Full path to log file (default=$NVIM_LOG_FILE) function module.assert_log(pat, logfile) logfile = logfile or os.getenv('NVIM_LOG_FILE') or '.nvimlog' local nrlines = 10 |