test: option set by Lua autocommand has correct script context (#32652)

This commit is contained in:
zeertzjq
2025-02-27 13:48:52 +08:00
committed by GitHub
parent 877f3b7288
commit 1e4c708033

View File

@@ -9,11 +9,13 @@ local write_file = t.write_file
local api = n.api local api = n.api
local fn = n.fn local fn = n.fn
local function last_set_lua_tests(cmd) --- @param cmd string
--- @param v1 boolean
local function last_set_lua_verbose_tests(cmd, v1)
local script_location, script_file local script_location, script_file
-- All test cases below use the same Nvim instance. -- All test cases below use the same Nvim instance.
setup(function() setup(function()
clear({ args = { '-V1' } }) clear(v1 and { args = { '-V1' } } or nil)
script_file = 'test_verbose.lua' script_file = 'test_verbose.lua'
local current_dir = fn.getcwd() local current_dir = fn.getcwd()
current_dir = fn.fnamemodify(current_dir, ':~') current_dir = fn.fnamemodify(current_dir, ':~')
@@ -28,6 +30,12 @@ vim.opt.number = true
vim.api.nvim_exec2('set numberwidth=2', {}) vim.api.nvim_exec2('set numberwidth=2', {})
vim.cmd('set colorcolumn=+1') vim.cmd('set colorcolumn=+1')
local function cb()
-- This is a comment
-- This is another comment
vim.o.mouse = 'nv'
end
vim.api.nvim_set_keymap('n', '<leader>key1', ':echo "test"<cr>', {noremap = true}) vim.api.nvim_set_keymap('n', '<leader>key1', ':echo "test"<cr>', {noremap = true})
vim.keymap.set('n', '<leader>key2', ':echo "test"<cr>') vim.keymap.set('n', '<leader>key2', ':echo "test"<cr>')
@@ -61,69 +69,79 @@ function! s:return80()\
endfunction\ endfunction\
let &tw = s:return80()\ let &tw = s:return80()\
", {}) ", {})
vim.api.nvim_create_autocmd('User', { pattern = 'set_mouse', callback = cb })
]] ]]
) )
exec(cmd .. ' ' .. script_file) exec(cmd .. ' ' .. script_file)
exec('doautocmd User set_mouse')
end) end)
local function get_last_set_location(linenr)
return ('%s %s'):format(
(cmd == 'source' or v1) and script_location or 'Lua',
v1 and ('line %d'):format(linenr) or '(run Nvim with -V1 for more details)'
)
end
local option_checks = { local option_checks = {
{ 'nvim_set_option_value', 'hlsearch', 'nohlsearch' }, { 'nvim_set_option_value', 'hlsearch', 'nohlsearch', 1 },
{ 'vim.bo', 'expandtab', ' expandtab' }, { 'vim.bo', 'expandtab', ' expandtab', 2 },
{ 'vim.opt', 'number', ' number' }, { 'vim.opt', 'number', ' number', 3 },
{ 'nvim_exec2', 'numberwidth', ' numberwidth=2' }, { 'nvim_exec2', 'numberwidth', ' numberwidth=2', 4 },
{ 'vim.cmd', 'colorcolumn', ' colorcolumn=+1' }, { 'vim.cmd', 'colorcolumn', ' colorcolumn=+1', 5 },
{ 'Lua autocommand', 'mouse', ' mouse=nv', 10 },
} }
teardown(function() teardown(function()
os.remove(script_file) os.remove(script_file)
end) end)
for linenr, check in ipairs(option_checks) do for _, check in ipairs(option_checks) do
it(('"Last set" for option set by %s'):format(check[1]), function() it(('for option set by %s'):format(check[1]), function()
local result = exec_capture((':verbose set %s?'):format(check[2])) local result = exec_capture((':verbose set %s?'):format(check[2]))
eq( eq(
string.format( string.format(
[[ [[
%s %s
Last set from %s line %d]], Last set from %s]],
check[3], check[3],
script_location, get_last_set_location(check[4])
linenr
), ),
result result
) )
end) end)
end end
it('"Last set" for mapping set by nvim_set_keymap', function() it('for mapping set by nvim_set_keymap', function()
local result = exec_capture(':verbose map <leader>key1') local result = exec_capture(':verbose map <leader>key1')
eq( eq(
string.format( string.format(
[[ [[
n \key1 * :echo "test"<CR> n \key1 * :echo "test"<CR>
Last set from %s line 7]], Last set from %s]],
script_location get_last_set_location(13)
), ),
result result
) )
end) end)
it('"Last set" for mapping set by vim.keymap.set', function() it('for mapping set by vim.keymap.set', function()
local result = exec_capture(':verbose map <leader>key2') local result = exec_capture(':verbose map <leader>key2')
eq( eq(
string.format( string.format(
[[ [[
n \key2 * :echo "test"<CR> n \key2 * :echo "test"<CR>
Last set from %s line 8]], Last set from %s]],
script_location get_last_set_location(14)
), ),
result result
) )
end) end)
it('"Last set" for autocmd set by nvim_exec2', function() it('for autocmd set by nvim_exec2', function()
local result = exec_capture(':verbose autocmd test_group Filetype c') local result = exec_capture(':verbose autocmd test_group Filetype c')
eq( eq(
string.format( string.format(
@@ -131,14 +149,14 @@ n \key2 * :echo "test"<CR>
--- Autocommands --- --- Autocommands ---
test_group FileType test_group FileType
c setl cindent c setl cindent
Last set from %s line 10]], Last set from %s]],
script_location get_last_set_location(16)
), ),
result result
) )
end) end)
it('"Last set" for autocmd set by nvim_create_autocmd', function() it('for autocmd set by nvim_create_autocmd', function()
local result = exec_capture(':verbose autocmd test_group Filetype cpp') local result = exec_capture(':verbose autocmd test_group Filetype cpp')
eq( eq(
string.format( string.format(
@@ -146,40 +164,40 @@ test_group FileType
--- Autocommands --- --- Autocommands ---
test_group FileType test_group FileType
cpp setl cindent cpp setl cindent
Last set from %s line 16]], Last set from %s]],
script_location get_last_set_location(22)
), ),
result result
) )
end) end)
it('"Last set" for highlight group set by nvim_exec2', function() it('for highlight group set by nvim_exec2', function()
local result = exec_capture(':verbose highlight TestHL1') local result = exec_capture(':verbose highlight TestHL1')
eq( eq(
string.format( string.format(
[[ [[
TestHL1 xxx guibg=Blue TestHL1 xxx guibg=Blue
Last set from %s line 22]], Last set from %s]],
script_location get_last_set_location(28)
), ),
result result
) )
end) end)
it('"Last set" for highlight group set by nvim_set_hl', function() it('for highlight group set by nvim_set_hl', function()
local result = exec_capture(':verbose highlight TestHL2') local result = exec_capture(':verbose highlight TestHL2')
eq( eq(
string.format( string.format(
[[ [[
TestHL2 xxx guibg=Green TestHL2 xxx guibg=Green
Last set from %s line 23]], Last set from %s]],
script_location get_last_set_location(29)
), ),
result result
) )
end) end)
it('"Last set" for command defined by nvim_command', function() it('for command defined by nvim_command', function()
if cmd == 'luafile' then if cmd == 'luafile' then
pending('nvim_command does not set the script context') pending('nvim_command does not set the script context')
end end
@@ -189,139 +207,77 @@ TestHL2 xxx guibg=Green
[[ [[
Name Args Address Complete Definition Name Args Address Complete Definition
Bdelete 0 :bd Bdelete 0 :bd
Last set from %s line 25]], Last set from %s]],
script_location get_last_set_location(31)
), ),
result result
) )
end) end)
it('"Last set" for command defined by nvim_create_user_command', function() it('for command defined by nvim_create_user_command', function()
local result = exec_capture(':verbose command TestCommand') local result = exec_capture(':verbose command TestCommand')
eq( eq(
string.format( string.format(
[[ [[
Name Args Address Complete Definition Name Args Address Complete Definition
TestCommand 0 :echo 'Hello' TestCommand 0 :echo 'Hello'
Last set from %s line 26]], Last set from %s]],
script_location get_last_set_location(32)
), ),
result result
) )
end) end)
it('"Last set" for function defined by nvim_exec2', function() it('for function defined by nvim_exec2', function()
local result = exec_capture(':verbose function Close_Window') local result = exec_capture(':verbose function Close_Window')
eq( eq(
string.format( string.format(
[[ [[
function Close_Window() abort function Close_Window() abort
Last set from %s line 28 Last set from %s
1 wincmd - 1 wincmd -
endfunction]], endfunction]],
script_location get_last_set_location(34)
), ),
result result
) )
end) end)
it('"Last set" works with anonymous sid from nvim_exec2', function() it('for option set by nvim_exec2 with anonymous sid', function()
local result = exec_capture(':verbose set tw?') local result = exec_capture(':verbose set tw?')
local loc = get_last_set_location(40)
if loc == 'Lua (run Nvim with -V1 for more details)' then
loc = 'anonymous :source (script id 1)'
end
eq( eq(
string.format( string.format(
[[ [[
textwidth=80 textwidth=80
Last set from %s line 34]], Last set from %s]],
script_location loc
), ),
result result
) )
end) end)
end end
describe('lua :verbose with -V1 when using :source', function() describe('lua :verbose with -V1', function()
last_set_lua_tests('source') describe('"Last set" shows full location when using :source', function()
end) last_set_lua_verbose_tests('source', true)
end)
describe('lua :verbose with -V1 when using :luafile', function() describe('"Last set" shows full location using :luafile', function()
last_set_lua_tests('luafile') last_set_lua_verbose_tests('luafile', true)
end)
end) end)
describe('lua :verbose without -V1', function() describe('lua :verbose without -V1', function()
local script_location, script_file
-- All test cases below use the same Nvim instance.
setup(function()
clear()
script_file = 'test_verbose_0.lua'
local current_dir = fn.getcwd()
current_dir = fn.fnamemodify(current_dir, ':~')
script_location = table.concat({ current_dir, n.get_pathsep(), script_file })
write_file(
script_file,
[[
vim.api.nvim_set_option_value('hlsearch', false, {})
vim.bo.expandtab = true
vim.opt.number = true
vim.api.nvim_exec2('set numberwidth=2', {})
vim.cmd('set colorcolumn=+1')
]]
)
end)
local option_checks = {
{ 'nvim_set_option_value', 'hlsearch', 'nohlsearch' },
{ 'vim.bo', 'expandtab', ' expandtab' },
{ 'vim.opt', 'number', ' number' },
{ 'nvim_exec2', 'numberwidth', ' numberwidth=2' },
{ 'vim.cmd', 'colorcolumn', ' colorcolumn=+1' },
}
teardown(function()
os.remove(script_file)
end)
describe('"Last set" shows file name when using :source', function() describe('"Last set" shows file name when using :source', function()
setup(function() last_set_lua_verbose_tests('source', false)
exec(':source ' .. script_file)
end)
for _, check in ipairs(option_checks) do
it(('for option set by %s'):format(check[1]), function()
local result = exec_capture((':verbose set %s?'):format(check[2]))
eq(
string.format(
[[
%s
Last set from %s (run Nvim with -V1 for more details)]],
check[3],
script_location
),
result
)
end)
end
end) end)
describe('"Last set" suggests -V1 when using :luafile', function() describe('"Last set" suggests -V1 when using :luafile', function()
setup(function() last_set_lua_verbose_tests('luafile', false)
exec(':luafile ' .. script_file)
end)
for _, check in ipairs(option_checks) do
it(('for option set by %s'):format(check[1]), function()
local result = exec_capture((':verbose set %s?'):format(check[2]))
eq(
string.format(
[[
%s
Last set from Lua (run Nvim with -V1 for more details)]],
check[3]
),
result
)
end)
end
end) end)
end) end)