mirror of
https://github.com/neovim/neovim.git
synced 2024-12-24 13:15:09 -07:00
e61228a214
Before calling "attach" a screen object is just a dummy container for (row, col) values whose purpose is to be sent as part of the "attach" function call anyway. Just create the screen in an attached state directly. Keep the complete (row, col, options) config together. It is still completely valid to later detach and re-attach as needed, including to another session.
237 lines
6.0 KiB
Lua
237 lines
6.0 KiB
Lua
local t = require('test.testutil')
|
|
local n = require('test.functional.testnvim')()
|
|
local Screen = require('test.functional.ui.screen')
|
|
|
|
local clear = n.clear
|
|
local command = n.command
|
|
local dedent = t.dedent
|
|
local eq = t.eq
|
|
local fn = n.fn
|
|
local eval = n.eval
|
|
local exec = n.exec
|
|
local feed = n.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"]]),
|
|
fn.execute('autocmd BufEnter')
|
|
)
|
|
end)
|
|
|
|
it('should not show group information if interrupted', function()
|
|
local screen = Screen.new(50, 6)
|
|
screen:add_extra_attr_ids {
|
|
[100] = { foreground = Screen.colors.Magenta, bold = true },
|
|
}
|
|
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 |
|
|
{100:--- Autocommands ---} |
|
|
{100:test_1} {100:BufEnter} |
|
|
A echo 'A' |
|
|
B echo 'B' |
|
|
{6:-- 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"]]),
|
|
fn.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"]]),
|
|
fn.execute('autocmd * B')
|
|
)
|
|
eq(
|
|
dedent([[
|
|
|
|
--- Autocommands ---
|
|
test_3 BufEnter
|
|
B echo "B3"
|
|
test_3 User
|
|
B echo "B3"]]),
|
|
fn.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)
|