mirror of
https://github.com/neovim/neovim.git
synced 2025-09-05 19:08:15 +00:00
test: option set by Lua autocommand has correct script context (#32652)
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user