neovim/test/functional/autocmd/show_spec.lua
zeertzjq 1037ce2e46 test: avoid repeated screen lines in expected states
This is the command invoked repeatedly to make the changes:

    :%s/^\(.*\)|\%(\*\(\d\+\)\)\?$\n\1|\%(\*\(\d\+\)\)\?$/\=submatch(1)..'|*'..(max([str2nr(submatch(2)),1])+max([str2nr(submatch(3)),1]))/g
2023-12-09 22:15:02 +08:00

222 lines
6.1 KiB
Lua

local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local clear = helpers.clear
local command = helpers.command
local dedent = helpers.dedent
local eq = helpers.eq
local funcs = helpers.funcs
local eval = helpers.eval
local exec = helpers.exec
local feed = helpers.feed
describe(":autocmd", function()
before_each(function()
clear({'-u', 'NONE'})
end)
it("should not segfault when you just do autocmd", function()
command ":autocmd"
end)
it("should filter based on ++once", function()
command "autocmd! BufEnter"
command "autocmd BufEnter * :echo 'Hello'"
command [[augroup TestingOne]]
command [[ autocmd BufEnter * :echo "Line 1"]]
command [[ autocmd BufEnter * :echo "Line 2"]]
command [[augroup END]]
eq(dedent([[
--- Autocommands ---
BufEnter
* :echo 'Hello'
TestingOne BufEnter
* :echo "Line 1"
:echo "Line 2"]]),
funcs.execute('autocmd BufEnter'))
end)
it('should not show group information if interrupted', function()
local screen = Screen.new(50, 6)
screen:set_default_attr_ids({
[1] = {bold = true, foreground = Screen.colors.Blue1}, -- NonText
[2] = {bold = true, foreground = Screen.colors.SeaGreen}, -- MoreMsg
[3] = {bold = true, foreground = Screen.colors.Magenta}, -- Title
})
screen:attach()
exec([[
set more
autocmd! BufEnter
augroup test_1
autocmd BufEnter A echo 'A'
autocmd BufEnter B echo 'B'
autocmd BufEnter C echo 'C'
autocmd BufEnter D echo 'D'
autocmd BufEnter E echo 'E'
autocmd BufEnter F echo 'F'
augroup END
autocmd! BufLeave
augroup test_1
autocmd BufLeave A echo 'A'
autocmd BufLeave B echo 'B'
autocmd BufLeave C echo 'C'
autocmd BufLeave D echo 'D'
autocmd BufLeave E echo 'E'
autocmd BufLeave F echo 'F'
augroup END
]])
feed(':autocmd<CR>')
screen:expect([[
:autocmd |
{3:--- Autocommands ---} |
{3:test_1} {3:BufEnter} |
A echo 'A' |
B echo 'B' |
{2:-- More --}^ |
]])
feed('q')
screen:expect([[
^ |
{1:~ }|*4
|
]])
end)
it('should not show group information for deleted pattern', function()
exec([[
autocmd! BufEnter
augroup test_1
autocmd BufEnter A echo 'A'
autocmd BufEnter B echo 'B'
autocmd BufEnter C echo 'C'
augroup END
augroup test_2
autocmd BufEnter foo echo 'foo'
augroup END
augroup test_3
autocmd BufEnter D echo 'D'
autocmd BufEnter E echo 'E'
autocmd BufEnter F echo 'F'
augroup END
func Func()
autocmd! test_2 BufEnter
let g:output = execute('autocmd BufEnter')
endfunc
autocmd User foo call Func()
doautocmd User foo
]])
eq(dedent([[
--- Autocommands ---
test_1 BufEnter
A echo 'A'
B echo 'B'
C echo 'C'
test_3 BufEnter
D echo 'D'
E echo 'E'
F echo 'F']]), eval('g:output'))
end)
it('can filter by pattern #17973', function()
exec([[
autocmd! BufEnter
autocmd! User
augroup test_1
autocmd BufEnter A echo "A1"
autocmd BufEnter B echo "B1"
autocmd User A echo "A1"
autocmd User B echo "B1"
augroup END
augroup test_2
autocmd BufEnter A echo "A2"
autocmd BufEnter B echo "B2"
autocmd User A echo "A2"
autocmd User B echo "B2"
augroup END
augroup test_3
autocmd BufEnter A echo "A3"
autocmd BufEnter B echo "B3"
autocmd User A echo "A3"
autocmd User B echo "B3"
augroup END
]])
eq(dedent([[
--- Autocommands ---
test_1 User
A echo "A1"
test_2 User
A echo "A2"
test_3 User
A echo "A3"]]), funcs.execute('autocmd User A'))
eq(dedent([[
--- Autocommands ---
test_1 BufEnter
B echo "B1"
test_2 BufEnter
B echo "B2"
test_3 BufEnter
B echo "B3"
test_1 User
B echo "B1"
test_2 User
B echo "B2"
test_3 User
B echo "B3"]]), funcs.execute('autocmd * B'))
eq(dedent([[
--- Autocommands ---
test_3 BufEnter
B echo "B3"
test_3 User
B echo "B3"]]), funcs.execute('autocmd test_3 * B'))
end)
it('should skip consecutive patterns', function()
exec([[
autocmd! BufEnter
augroup test_1
autocmd BufEnter A echo 'A'
autocmd BufEnter A echo 'B'
autocmd BufEnter A echo 'C'
autocmd BufEnter B echo 'D'
autocmd BufEnter B echo 'E'
autocmd BufEnter B echo 'F'
augroup END
augroup test_2
autocmd BufEnter C echo 'A'
autocmd BufEnter C echo 'B'
autocmd BufEnter C echo 'C'
autocmd BufEnter D echo 'D'
autocmd BufEnter D echo 'E'
autocmd BufEnter D echo 'F'
augroup END
let g:output = execute('autocmd BufEnter')
]])
eq(dedent([[
--- Autocommands ---
test_1 BufEnter
A echo 'A'
echo 'B'
echo 'C'
B echo 'D'
echo 'E'
echo 'F'
test_2 BufEnter
C echo 'A'
echo 'B'
echo 'C'
D echo 'D'
echo 'E'
echo 'F']]), eval('g:output'))
end)
end)