From b536e0ba37addaea5507b054120e4c1e122c4405 Mon Sep 17 00:00:00 2001 From: Lewis Russell Date: Mon, 15 Jan 2024 16:10:51 +0000 Subject: [PATCH] test: big cleanup followup Followup to 07a7c0ec --- test/functional/api/vim_spec.lua | 34 +++++------ .../swapfile_preserve_recover_spec.lua | 2 +- test/functional/helpers.lua | 60 +++++++------------ test/functional/lua/luaeval_spec.lua | 4 +- test/functional/terminal/channel_spec.lua | 6 +- test/functional/ui/messages_spec.lua | 8 +-- test/functional/ui/popupmenu_spec.lua | 2 +- .../vimscript/ctx_functions_spec.lua | 4 +- test/functional/vimscript/input_spec.lua | 20 ++++--- test/functional/vimscript/timer_spec.lua | 18 +++--- 10 files changed, 73 insertions(+), 85 deletions(-) diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua index 8d9789a3ce..fb10ed34e5 100644 --- a/test/functional/api/vim_spec.lua +++ b/test/functional/api/vim_spec.lua @@ -8,7 +8,7 @@ local assert_alive = helpers.assert_alive local NIL = vim.NIL local clear, eq, neq = helpers.clear, helpers.eq, helpers.neq local command = helpers.command -local command_output = helpers.api.command_output +local command_output = helpers.api.nvim_command_output local exec = helpers.exec local exec_capture = helpers.exec_capture local eval = helpers.eval @@ -19,6 +19,7 @@ local matches = helpers.matches local pesc = vim.pesc local mkdir_p = helpers.mkdir_p local ok, nvim_async, feed = helpers.ok, helpers.nvim_async, helpers.feed +local async_meths = helpers.async_meths local is_os = helpers.is_os local parse_context = helpers.parse_context local request = helpers.request @@ -76,7 +77,7 @@ describe('API', function() eq({ 'notification', 'nvim_error_event', - { error_types.Exception.id, 'Invalid method: nvim_bogus' }, + { error_types.Exception.id, 'Invalid method: bogus' }, }, next_msg()) -- error didn't close channel. assert_alive() @@ -84,7 +85,7 @@ describe('API', function() it('failed async request emits nvim_error_event', function() local error_types = api.nvim_get_api_info()[2].error_types - nvim_async('command', 'bogus') + async_meths.nvim_command('bogus') eq({ 'notification', 'nvim_error_event', @@ -2081,13 +2082,13 @@ describe('API', function() { ['rc'] = { 'hjkl' }, ['n'] = 97 }, }, - ['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', ''))), ['bufs'] = eval([[ filter(map(getbufinfo(), '{ "f": v:val.name }'), '!empty(v:val.f)') @@ -2301,7 +2302,7 @@ describe('API', function() end) it('can show one line', function() - nvim_async('err_write', 'has bork\n') + async_meths.nvim_err_write('has bork\n') screen:expect([[ ^ | {0:~ }|*6 @@ -2310,7 +2311,7 @@ describe('API', function() end) it('shows return prompt when more than &cmdheight lines', function() - nvim_async('err_write', 'something happened\nvery bad\n') + async_meths.nvim_err_write('something happened\nvery bad\n') screen:expect([[ | {0:~ }|*3 @@ -2322,7 +2323,7 @@ describe('API', function() end) it('shows return prompt after all lines are shown', function() - nvim_async('err_write', 'FAILURE\nERROR\nEXCEPTION\nTRACEBACK\n') + async_meths.nvim_err_write('FAILURE\nERROR\nEXCEPTION\nTRACEBACK\n') screen:expect([[ | {0:~ }| @@ -2337,8 +2338,8 @@ describe('API', function() it('handles multiple calls', function() -- without linebreak text is joined to one line - nvim_async('err_write', 'very ') - nvim_async('err_write', 'fail\n') + async_meths.nvim_err_write('very ') + async_meths.nvim_err_write('fail\n') screen:expect([[ ^ | {0:~ }|*6 @@ -2347,7 +2348,7 @@ describe('API', function() helpers.poke_eventloop() -- shows up to &cmdheight lines - nvim_async('err_write', 'more fail\ntoo fail\n') + async_meths.nvim_err_write('more fail\ntoo fail\n') screen:expect([[ | {0:~ }|*3 @@ -2360,7 +2361,7 @@ describe('API', function() end) it('NUL bytes in message', function() - nvim_async('err_write', 'aaa\0bbb\0\0ccc\nddd\0\0\0eee\n') + async_meths.nvim_err_write('aaa\0bbb\0\0ccc\nddd\0\0\0eee\n') screen:expect { grid = [[ | @@ -2389,7 +2390,7 @@ describe('API', function() end) it('shows only one return prompt after all lines are shown', function() - nvim_async('err_writeln', 'FAILURE\nERROR\nEXCEPTION\nTRACEBACK') + async_meths.nvim_err_writeln('FAILURE\nERROR\nEXCEPTION\nTRACEBACK') screen:expect([[ | {0:~ }| @@ -3394,8 +3395,7 @@ describe('API', function() end) it('can show highlighted line', function() - nvim_async( - 'echo', + async_meths.nvim_echo( { { 'msg_a' }, { 'msg_b', 'Statement' }, { 'msg_c', 'Special' } }, true, {} @@ -3410,7 +3410,7 @@ describe('API', function() end) it('can show highlighted multiline', function() - nvim_async('echo', { { 'msg_a\nmsg_a', 'Statement' }, { 'msg_b', 'Special' } }, true, {}) + async_meths.nvim_echo({ { 'msg_a\nmsg_a', 'Statement' }, { 'msg_b', 'Special' } }, true, {}) screen:expect { grid = [[ | @@ -3431,7 +3431,7 @@ describe('API', function() it('can disable saving message history', function() command('set cmdheight=2') -- suppress Press ENTER - nvim_async('echo', { { 'msg\nmsg' }, { 'msg' } }, false, {}) + async_meths.nvim_echo({ { 'msg\nmsg' }, { 'msg' } }, false, {}) eq('', exec_capture('messages')) end) end) diff --git a/test/functional/ex_cmds/swapfile_preserve_recover_spec.lua b/test/functional/ex_cmds/swapfile_preserve_recover_spec.lua index 4c2e54cc6b..a6fdb919c5 100644 --- a/test/functional/ex_cmds/swapfile_preserve_recover_spec.lua +++ b/test/functional/ex_cmds/swapfile_preserve_recover_spec.lua @@ -222,7 +222,7 @@ describe('swapfile detection', function() screen2:expect(expected_no_dialog) -- With API call and shortmess+=F - async_meths.command('edit %') + async_meths.nvim_command('edit %') screen2:expect { any = [[Found a swap file by the name ".*]] .. [[Xtest_swapdialog_dir[/\].*]] diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua index e9f8f30aa0..5653810f28 100644 --- a/test/functional/helpers.lua +++ b/test/functional/helpers.lua @@ -311,18 +311,6 @@ function module.expect_exit(fn_or_timeout, ...) end end --- Evaluates a Vimscript expression. --- Fails on Vimscript error, but does not update v:errmsg. -function module.eval(expr) - return module.request('nvim_eval', expr) -end - --- Executes a Vimscript function via RPC. --- Fails on Vimscript error, but does not update v:errmsg. -function module.call(name, ...) - return module.request('nvim_call_function', name, { ... }) -end - -- Executes a Vimscript function via Lua. -- Fails on Vimscript error, but does not update v:errmsg. function module.call_lua(name, ...) @@ -598,8 +586,7 @@ function module.set_shell_powershell(fake) end function module.create_callindex(func) - local table = {} - setmetatable(table, { + return setmetatable({}, { __index = function(tbl, arg1) local ret = function(...) return func(arg1, ...) @@ -608,36 +595,29 @@ function module.create_callindex(func) return ret end, }) - return table -end - -local function ui(method, ...) - return module.request('nvim_ui_' .. method, ...) end function module.nvim_async(method, ...) - session:notify('nvim_' .. method, ...) + session:notify(method, ...) +end + +-- Executes a Vimscript function via RPC. +-- Fails on Vimscript error, but does not update v:errmsg. +function module.call(name, ...) + return module.request('nvim_call_function', name, { ... }) end module.async_meths = module.create_callindex(module.nvim_async) -module.uimeths = module.create_callindex(ui) -local function create_bridge(request, call) - local function nvim(method, ...) - if vim.startswith(method, 'nvim_') then - return request(method, ...) - end - return request('nvim_' .. method, ...) - end +module.rpc = { + fn = module.create_callindex(module.call), + api = module.create_callindex(module.request), +} - return { - fn = module.create_callindex(call), - api = module.create_callindex(nvim), - } -end - -module.rpc = create_bridge(module.request, module.call) -module.lua = create_bridge(module.request_lua, module.call_lua) +module.lua = { + fn = module.create_callindex(module.call_lua), + api = module.create_callindex(module.request_lua), +} module.describe_lua_and_rpc = function(describe) return function(what, tests) @@ -664,10 +644,14 @@ end -- v:errmsg will not be updated. module.command = module.api.nvim_command +-- Evaluates a Vimscript expression. +-- Fails on Vimscript error, but does not update v:errmsg. +module.eval = module.api.nvim_eval + function module.poke_eventloop() -- Execute 'nvim_eval' (a deferred function) to -- force at least one main_loop iteration - session:request('nvim_eval', '1') + module.api.nvim_eval('1') end function module.buf_lines(bufnr) @@ -832,7 +816,7 @@ end --- @param code string --- @return any function module.exec_lua(code, ...) - return module.api.exec_lua(code, { ... }) + return module.api.nvim_exec_lua(code, { ... }) end function module.get_pathsep() diff --git a/test/functional/lua/luaeval_spec.lua b/test/functional/lua/luaeval_spec.lua index 6ed7af6b6e..171d37ba55 100644 --- a/test/functional/lua/luaeval_spec.lua +++ b/test/functional/lua/luaeval_spec.lua @@ -162,7 +162,7 @@ describe('luaeval()', function() return sp('map', '[' .. val .. ']') end local function luaevalarg(argexpr, expr) - return eval(([=[ + return eval((([=[ [ extend(g:, {'_ret': luaeval(%s, %s)})._ret, type(g:_ret)==type({})&&has_key(g:_ret, '_TYPE') @@ -172,7 +172,7 @@ describe('luaeval()', function() get(g:_ret, '_VAL', g:_ret) ] : [0, g:_ret]][1] - ]=]):format(expr or '"_A"', argexpr):gsub('\n', '')) + ]=]):format(expr or '"_A"', argexpr):gsub('\n', ''))) end it('correctly passes special dictionaries', function() diff --git a/test/functional/terminal/channel_spec.lua b/test/functional/terminal/channel_spec.lua index 2b39c93f14..9615534c87 100644 --- a/test/functional/terminal/channel_spec.lua +++ b/test/functional/terminal/channel_spec.lua @@ -151,7 +151,7 @@ describe('no crash when TermOpen autocommand', function() it('processes job exit event when using termopen()', function() command([[autocmd TermOpen * call input('')]]) - async_meths.command('terminal foobar') + async_meths.nvim_command('terminal foobar') screen:expect { grid = [[ | @@ -181,7 +181,7 @@ describe('no crash when TermOpen autocommand', function() it('wipes buffer and processes events when using termopen()', function() command([[autocmd TermOpen * bwipe! | call input('')]]) - async_meths.command('terminal foobar') + async_meths.nvim_command('terminal foobar') screen:expect { grid = [[ | @@ -202,7 +202,7 @@ describe('no crash when TermOpen autocommand', function() it('wipes buffer and processes events when using nvim_open_term()', function() command([[autocmd TermOpen * bwipe! | call input('')]]) - async_meths.open_term(0, {}) + async_meths.nvim_open_term(0, {}) screen:expect { grid = [[ | diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua index 4f95cd909c..a742f765a9 100644 --- a/test/functional/ui/messages_spec.lua +++ b/test/functional/ui/messages_spec.lua @@ -1039,7 +1039,7 @@ stack traceback: end) it('supports nvim_echo messages with multiple attrs', function() - async_meths.echo( + async_meths.nvim_echo( { { 'wow, ', 'Search' }, { 'such\n\nvery ', 'ErrorMsg' }, { 'color', 'LineNr' } }, true, {} @@ -1403,7 +1403,7 @@ vimComment xxx match /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 excludenl contains=@vim end) it('supports nvim_echo messages with multiple attrs', function() - async_meths.echo( + async_meths.nvim_echo( { { 'wow, ', 'Search' }, { 'such\n\nvery ', 'ErrorMsg' }, { 'color', 'LineNr' } }, true, {} @@ -1521,7 +1521,7 @@ vimComment xxx match /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 excludenl contains=@vim end) it('consecutive calls to win_move_statusline() work after multiline message #21014', function() - async_meths.exec( + async_meths.nvim_exec( [[ echo "\n" call win_move_statusline(0, -4) @@ -2196,7 +2196,7 @@ aliquip ex ea commodo consequat.]] } -- not processed while command is executing - async_meths.ui_try_resize(35, 5) + async_meths.nvim_ui_try_resize(35, 5) -- TODO(bfredl): ideally it should be processed just -- before the "press ENTER" prompt though diff --git a/test/functional/ui/popupmenu_spec.lua b/test/functional/ui/popupmenu_spec.lua index b74a15d56f..1f7d187016 100644 --- a/test/functional/ui/popupmenu_spec.lua +++ b/test/functional/ui/popupmenu_spec.lua @@ -2527,7 +2527,7 @@ describe('builtin popupmenu', function() ]]) end feed('') - async_meths.call_function('input', { '', '', 'sign' }) + async_meths.nvim_call_function('input', { '', '', 'sign' }) if multigrid then screen:expect { grid = [[ diff --git a/test/functional/vimscript/ctx_functions_spec.lua b/test/functional/vimscript/ctx_functions_spec.lua index b8f9bbc92d..dc60a474f3 100644 --- a/test/functional/vimscript/ctx_functions_spec.lua +++ b/test/functional/vimscript/ctx_functions_spec.lua @@ -314,13 +314,13 @@ describe('context functions', function() } 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 = { diff --git a/test/functional/vimscript/input_spec.lua b/test/functional/vimscript/input_spec.lua index 6dd22078d6..b749d5a7f0 100644 --- a/test/functional/vimscript/input_spec.lua +++ b/test/functional/vimscript/input_spec.lua @@ -414,19 +414,19 @@ describe('confirm()', function() -- screen:expect() calls are needed to avoid feeding input too early screen:expect({ any = '%[No Name%]' }) - async_meths.command([[let a = confirm('Press O to proceed')]]) + async_meths.nvim_command([[let a = confirm('Press O to proceed')]]) screen:expect({ any = '{CONFIRM:.+: }' }) feed('o') screen:expect({ any = '%[No Name%]' }) eq(1, api.nvim_get_var('a')) - async_meths.command([[let a = 'Are you sure?'->confirm("&Yes\n&No")]]) + 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, api.nvim_get_var('a')) - async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) screen:expect({ any = '{CONFIRM:.+: }' }) feed('n') screen:expect({ any = '%[No Name%]' }) @@ -435,26 +435,26 @@ describe('confirm()', function() -- 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")]]) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) screen:expect({ any = '{CONFIRM:.+: }' }) feed('') screen:expect({ any = '%[No Name%]' }) eq(0, api.nvim_get_var('a')) -- Default choice is returned when pressing . - async_meths.command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No")]]) screen:expect({ any = '{CONFIRM:.+: }' }) feed('') 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)]]) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No", 2)]]) screen:expect({ any = '{CONFIRM:.+: }' }) feed('') 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)]]) + async_meths.nvim_command([[let a = confirm('Are you sure?', "&Yes\n&No", 0)]]) screen:expect({ any = '{CONFIRM:.+: }' }) feed('') screen:expect({ any = '%[No Name%]' }) @@ -462,7 +462,9 @@ describe('confirm()', function() -- 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)) + 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%]' }) @@ -518,7 +520,7 @@ describe('confirm()', function() feed(':call nvim_command("edit x")') 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/timer_spec.lua b/test/functional/vimscript/timer_spec.lua index 3f53c21e7a..046d451888 100644 --- a/test/functional/vimscript/timer_spec.lua +++ b/test/functional/vimscript/timer_spec.lua @@ -1,7 +1,7 @@ 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 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 api = helpers.api @@ -52,9 +52,9 @@ describe('timers', function() endfunc ]]) eval("timer_start(10, 'MyHandler', {'repeat': -1})") - nvim_async('command', 'sleep 10') + async_meths.nvim_command('sleep 10') eq(-1, eval('g:val')) -- timer did nothing yet. - nvim_async('command', 'let g:val = 0') + async_meths.nvim_command('let g:val = 0') run(nil, nil, nil, load_adjust(20)) retry(nil, nil, function() eq(2, eval('g:val')) @@ -70,7 +70,7 @@ describe('timers', function() 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)) @@ -94,7 +94,7 @@ describe('timers', function() 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') ok(val >= 2, '>= 2', tostring(val)) @@ -128,8 +128,10 @@ 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 | @@ -137,7 +139,7 @@ describe('timers', function() {1:~ }|*3 | ]]) - nvim_async('command', 'let g:cont = 1') + async_meths.nvim_command('let g:cont = 1') screen:expect([[ ^ITEM 1 |