mirror of
https://github.com/neovim/neovim.git
synced 2025-11-14 14:29:02 +00:00
Problem: Resize events during startup may clear an active external
cmdline, which is then not redrawn.
UI2 VimResized autocommand does not work.
UI2 message appearance may be altered by inherited window
options. The message separator uses the wrong fillchar.
Solution: Unset cmdline_was_last_redrawn when clearing the screen, such
that cmdline_show is re-emitted.
Ensure set_pos function is called without arguments.
Ensure such options are unset. Use 'fillchars'->msgsep.
164 lines
6.3 KiB
Lua
164 lines
6.3 KiB
Lua
-- Tests for (protocol-driven) ui2, intended to replace the legacy message grid UI.
|
|
|
|
local t = require('test.testutil')
|
|
local n = require('test.functional.testnvim')()
|
|
local Screen = require('test.functional.ui.screen')
|
|
|
|
local clear, exec, exec_lua, feed = n.clear, n.exec, n.exec_lua, n.feed
|
|
|
|
describe('cmdline2', function()
|
|
local screen
|
|
before_each(function()
|
|
clear()
|
|
screen = Screen.new()
|
|
screen:add_extra_attr_ids({
|
|
[100] = { foreground = Screen.colors.Magenta1, bold = true },
|
|
})
|
|
exec_lua(function()
|
|
require('vim._extui').enable({})
|
|
end)
|
|
end)
|
|
|
|
it("no crash for invalid grid after 'cmdheight' OptionSet", function()
|
|
exec('tabnew | tabprev')
|
|
feed(':set ch=0')
|
|
screen:expect([[
|
|
{5: }{100:2}{5: [No Name] }{24: [No Name] }{2: }{24:X}|
|
|
|
|
|
{1:~ }|*11
|
|
{16::}{15:set} {16:ch}{15:=}0^ |
|
|
]])
|
|
feed('<CR>')
|
|
exec('tabnext')
|
|
screen:expect([[
|
|
{24: [No Name] }{5: }{100:2}{5: [No Name] }{2: }{24:X}|
|
|
^ |
|
|
{1:~ }|*11
|
|
{16::}{15:set} {16:ch}{15:=}0 |
|
|
]])
|
|
exec('tabnext')
|
|
screen:expect([[
|
|
{5: }{100:2}{5: [No Name] }{24: [No Name] }{2: }{24:X}|
|
|
^ |
|
|
{1:~ }|*12
|
|
]])
|
|
n.assert_alive()
|
|
end)
|
|
|
|
it("redraw does not clear 'incsearch' highlight with conceal", function()
|
|
exec('call setline(1, ["foo", "foobar"]) | set conceallevel=1 concealcursor=c')
|
|
feed('/foo')
|
|
screen:expect([[
|
|
{10:foo} |
|
|
{2:foo}bar |
|
|
{1:~ }|*11
|
|
/foo^ |
|
|
]])
|
|
end)
|
|
|
|
it('block mode', function()
|
|
feed(':if 1<CR>')
|
|
screen:expect([[
|
|
|
|
|
{1:~ }|*11
|
|
{16::}{15:if} {26:1} |
|
|
{16::} ^ |
|
|
]])
|
|
feed('echo "foo"<CR>')
|
|
screen:expect([[
|
|
|
|
|
{1:~ }|*9
|
|
{16::}{15:if} {26:1} |
|
|
{16::} {15:echo} {26:"foo"} |
|
|
{15:foo} |
|
|
{16::} ^ |
|
|
]])
|
|
feed('endif')
|
|
screen:expect([[
|
|
|
|
|
{1:~ }|*9
|
|
{16::}{15:if} {26:1} |
|
|
{16::} {15:echo} {26:"foo"} |
|
|
{15:foo} |
|
|
{16::} {15:endif}^ |
|
|
]])
|
|
feed('<CR>')
|
|
screen:expect([[
|
|
^ |
|
|
{1:~ }|*12
|
|
|
|
|
]])
|
|
end)
|
|
|
|
it('handles empty prompt', function()
|
|
feed(":call input('')<CR>")
|
|
screen:expect([[
|
|
|
|
|
{1:~ }|*12
|
|
^ |
|
|
]])
|
|
end)
|
|
|
|
it('highlights after deleting buffer', function()
|
|
feed(':%bw!<CR>:call foo()')
|
|
screen:expect([[
|
|
|
|
|
{1:~ }|*12
|
|
{16::}{15:call} {25:foo}{16:()}^ |
|
|
]])
|
|
end)
|
|
|
|
it('can change cmdline buffer during textlock', function()
|
|
exec([[
|
|
func Foo(a, b)
|
|
redrawstatus!
|
|
endfunc
|
|
set wildoptions=pum findfunc=Foo wildmode=noselect:lastused,full
|
|
au CmdlineChanged * call wildtrigger()
|
|
]])
|
|
feed(':find ')
|
|
screen:expect([[
|
|
|
|
|
{1:~ }|*12
|
|
{16::}{15:find} ^ |
|
|
]])
|
|
t.eq(n.eval('v:errmsg'), "E1514: 'findfunc' did not return a List type")
|
|
end)
|
|
end)
|
|
|
|
describe('cmdline2', function()
|
|
it('resizing during startup shows confirm prompt #36439', function()
|
|
clear({
|
|
args = {
|
|
'--clean',
|
|
'+lua require("vim._extui").enable({})',
|
|
"+call feedkeys(':')",
|
|
},
|
|
})
|
|
local screen = Screen.new()
|
|
feed('call confirm("Ok?")<CR>')
|
|
screen:try_resize(screen._width + 1, screen._height)
|
|
screen:expect([[
|
|
|
|
|
{1:~ }|*8
|
|
{3: }|
|
|
|
|
|
{6:Ok?} |
|
|
|
|
|
{6:[O]k: }^ |
|
|
]])
|
|
-- And resizing the next event loop iteration also works.
|
|
feed('k')
|
|
screen:try_resize(screen._width, screen._height + 1)
|
|
screen:expect([[
|
|
|
|
|
{1:~ }|*9
|
|
{3: }|
|
|
|
|
|
{6:Ok?} |
|
|
|
|
|
{6:[O]k: }^ |
|
|
]])
|
|
end)
|
|
end)
|