2020-10-27 20:52:02 -07:00
|
|
|
local helpers = require('test.functional.helpers')(after_each)
|
|
|
|
local Screen = require('test.functional.ui.screen')
|
|
|
|
local clear = helpers.clear
|
2022-08-25 04:35:17 -07:00
|
|
|
local command = helpers.command
|
2020-10-27 20:52:02 -07:00
|
|
|
local feed = helpers.feed
|
|
|
|
local feed_command = helpers.feed_command
|
2022-07-26 15:26:01 -07:00
|
|
|
local exec = helpers.exec
|
2024-01-12 10:59:57 -07:00
|
|
|
local api = helpers.api
|
2024-01-12 04:28:20 -07:00
|
|
|
local pesc = vim.pesc
|
2020-10-27 20:52:02 -07:00
|
|
|
|
|
|
|
describe('cmdline', function()
|
|
|
|
before_each(clear)
|
|
|
|
|
2022-07-26 15:26:01 -07:00
|
|
|
-- oldtest: Test_cmdlineclear_tabenter()
|
2020-10-27 20:52:02 -07:00
|
|
|
it('is cleared when switching tabs', function()
|
|
|
|
local screen = Screen.new(30, 10)
|
|
|
|
screen:attach()
|
2022-04-05 07:48:47 -07:00
|
|
|
screen:set_default_attr_ids {
|
|
|
|
[1] = { underline = true, background = Screen.colors.LightGrey },
|
|
|
|
[2] = { bold = true },
|
|
|
|
[3] = { reverse = true },
|
|
|
|
[4] = { bold = true, foreground = Screen.colors.Blue1 },
|
|
|
|
}
|
|
|
|
|
2020-10-27 20:52:02 -07:00
|
|
|
feed_command([[call setline(1, range(30))]])
|
|
|
|
screen:expect([[
|
|
|
|
^0 |
|
|
|
|
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
5 |
|
|
|
|
6 |
|
|
|
|
7 |
|
|
|
|
8 |
|
|
|
|
:call setline(1, range(30)) |
|
|
|
|
]])
|
2022-04-05 07:48:47 -07:00
|
|
|
|
|
|
|
feed [[:tabnew<cr>]]
|
|
|
|
screen:expect {
|
|
|
|
grid = [[
|
|
|
|
{1: + [No Name] }{2: [No Name] }{3: }{1:X}|
|
|
|
|
^ |
|
2023-12-09 05:42:00 -07:00
|
|
|
{4:~ }|*7
|
2022-04-05 07:48:47 -07:00
|
|
|
:tabnew |
|
|
|
|
]],
|
|
|
|
}
|
|
|
|
|
|
|
|
feed [[<C-w>-<C-w>-]]
|
|
|
|
screen:expect {
|
|
|
|
grid = [[
|
|
|
|
{1: + [No Name] }{2: [No Name] }{3: }{1:X}|
|
|
|
|
^ |
|
2023-12-09 05:42:00 -07:00
|
|
|
{4:~ }|*5
|
|
|
|
|*3
|
2022-04-05 07:48:47 -07:00
|
|
|
]],
|
|
|
|
}
|
|
|
|
|
|
|
|
feed [[gt]]
|
|
|
|
screen:expect {
|
|
|
|
grid = [[
|
|
|
|
{2: + [No Name] }{1: [No Name] }{3: }{1:X}|
|
|
|
|
^0 |
|
|
|
|
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
5 |
|
|
|
|
6 |
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|
]],
|
|
|
|
}
|
|
|
|
|
|
|
|
feed [[gt]]
|
2020-10-27 20:52:02 -07:00
|
|
|
screen:expect([[
|
2022-04-05 07:48:47 -07:00
|
|
|
{1: + [No Name] }{2: [No Name] }{3: }{1:X}|
|
2020-10-27 20:52:02 -07:00
|
|
|
^ |
|
2023-12-09 05:42:00 -07:00
|
|
|
{4:~ }|*5
|
|
|
|
|*3
|
2020-10-27 20:52:02 -07:00
|
|
|
]])
|
|
|
|
end)
|
|
|
|
|
2022-07-26 15:26:01 -07:00
|
|
|
-- oldtest: Test_verbose_option()
|
2020-10-27 20:52:02 -07:00
|
|
|
it('prints every executed Ex command if verbose >= 16', function()
|
|
|
|
local screen = Screen.new(60, 12)
|
|
|
|
screen:attach()
|
2022-07-26 15:26:01 -07:00
|
|
|
exec([[
|
2020-10-27 20:52:02 -07:00
|
|
|
command DoSomething echo 'hello' |set ts=4 |let v = '123' |echo v
|
|
|
|
call feedkeys("\r", 't') " for the hit-enter prompt
|
|
|
|
set verbose=20
|
|
|
|
]])
|
|
|
|
feed_command('DoSomething')
|
|
|
|
screen:expect([[
|
|
|
|
|
|
2024-03-22 03:02:52 -07:00
|
|
|
{1:~ }|*2
|
|
|
|
{3: }|
|
2020-10-27 20:52:02 -07:00
|
|
|
Executing: DoSomething |
|
|
|
|
Executing: echo 'hello' |set ts=4 |let v = '123' |echo v |
|
|
|
|
hello |
|
|
|
|
Executing: set ts=4 |let v = '123' |echo v |
|
|
|
|
Executing: let v = '123' |echo v |
|
|
|
|
Executing: echo v |
|
|
|
|
123 |
|
2024-03-22 03:02:52 -07:00
|
|
|
{6:Press ENTER or type command to continue}^ |
|
2020-10-27 20:52:02 -07:00
|
|
|
]])
|
|
|
|
end)
|
2022-07-26 15:26:01 -07:00
|
|
|
|
|
|
|
-- oldtest: Test_cmdline_redraw_tabline()
|
|
|
|
it('tabline is redrawn on entering cmdline', function()
|
|
|
|
local screen = Screen.new(30, 6)
|
|
|
|
screen:set_default_attr_ids({
|
|
|
|
[0] = { bold = true, foreground = Screen.colors.Blue }, -- NonText
|
|
|
|
[1] = { reverse = true }, -- TabLineFill
|
|
|
|
})
|
|
|
|
screen:attach()
|
|
|
|
exec([[
|
|
|
|
set showtabline=2
|
|
|
|
autocmd CmdlineEnter * set tabline=foo
|
|
|
|
]])
|
|
|
|
feed(':')
|
|
|
|
screen:expect([[
|
|
|
|
{1:foo }|
|
|
|
|
|
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*3
|
2022-07-26 15:26:01 -07:00
|
|
|
:^ |
|
|
|
|
]])
|
|
|
|
end)
|
2022-09-20 05:38:44 -07:00
|
|
|
|
|
|
|
-- oldtest: Test_redraw_in_autocmd()
|
|
|
|
it('cmdline cursor position is correct after :redraw with cmdheight=2', function()
|
|
|
|
local screen = Screen.new(30, 6)
|
|
|
|
screen:set_default_attr_ids({
|
|
|
|
[0] = { bold = true, foreground = Screen.colors.Blue }, -- NonText
|
|
|
|
})
|
|
|
|
screen:attach()
|
|
|
|
exec([[
|
|
|
|
set cmdheight=2
|
|
|
|
autocmd CmdlineChanged * redraw
|
|
|
|
]])
|
|
|
|
feed(':for i in range(3)<CR>')
|
|
|
|
screen:expect([[
|
|
|
|
|
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*3
|
2022-09-20 05:38:44 -07:00
|
|
|
:for i in range(3) |
|
|
|
|
: ^ |
|
|
|
|
]])
|
|
|
|
feed(':let i =')
|
|
|
|
-- Note: this may still be considered broken, ref #18140
|
|
|
|
screen:expect([[
|
|
|
|
|
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*3
|
2022-09-20 05:38:44 -07:00
|
|
|
: :let i =^ |
|
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
2022-10-05 18:03:49 -07:00
|
|
|
|
|
|
|
it("setting 'cmdheight' works after outputting two messages vim-patch:9.0.0665", function()
|
|
|
|
local screen = Screen.new(60, 8)
|
|
|
|
screen:set_default_attr_ids({
|
|
|
|
[0] = { bold = true, foreground = Screen.colors.Blue }, -- NonText
|
|
|
|
[1] = { bold = true, reverse = true }, -- StatusLine
|
|
|
|
})
|
|
|
|
screen:attach()
|
|
|
|
exec([[
|
|
|
|
set cmdheight=1 laststatus=2
|
|
|
|
func EchoTwo()
|
|
|
|
set laststatus=2
|
|
|
|
set cmdheight=5
|
|
|
|
echo 'foo'
|
|
|
|
echo 'bar'
|
|
|
|
set cmdheight=1
|
|
|
|
endfunc
|
|
|
|
]])
|
|
|
|
feed(':call EchoTwo()')
|
|
|
|
screen:expect([[
|
|
|
|
|
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*5
|
2022-10-05 18:03:49 -07:00
|
|
|
{1:[No Name] }|
|
|
|
|
:call EchoTwo()^ |
|
|
|
|
]])
|
|
|
|
feed('<CR>')
|
|
|
|
screen:expect([[
|
|
|
|
^ |
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*5
|
2022-10-06 05:03:59 -07:00
|
|
|
{1:[No Name] }|
|
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
|
|
|
|
|
|
|
-- oldtest: Test_cmdheight_tabline()
|
|
|
|
it("changing 'cmdheight' when there is a tabline", function()
|
|
|
|
local screen = Screen.new(60, 8)
|
|
|
|
screen:set_default_attr_ids({
|
|
|
|
[0] = { bold = true, foreground = Screen.colors.Blue }, -- NonText
|
|
|
|
[1] = { bold = true, reverse = true }, -- StatusLine
|
|
|
|
[2] = { bold = true }, -- TabLineSel
|
|
|
|
[3] = { reverse = true }, -- TabLineFill
|
|
|
|
})
|
|
|
|
screen:attach()
|
2024-01-12 10:59:57 -07:00
|
|
|
api.nvim_set_option_value('laststatus', 2, {})
|
|
|
|
api.nvim_set_option_value('showtabline', 2, {})
|
|
|
|
api.nvim_set_option_value('cmdheight', 1, {})
|
2022-10-06 05:03:59 -07:00
|
|
|
screen:expect([[
|
|
|
|
{2: [No Name] }{3: }|
|
|
|
|
^ |
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*4
|
2022-10-05 18:03:49 -07:00
|
|
|
{1:[No Name] }|
|
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
2023-04-17 09:32:32 -07:00
|
|
|
|
|
|
|
-- oldtest: Test_rulerformat_position()
|
|
|
|
it("ruler has correct position with 'rulerformat' set", function()
|
|
|
|
local screen = Screen.new(20, 3)
|
|
|
|
screen:set_default_attr_ids {
|
|
|
|
[0] = { bold = true, foreground = Screen.colors.Blue }, -- NonText
|
|
|
|
}
|
|
|
|
screen:attach()
|
2024-01-12 10:59:57 -07:00
|
|
|
api.nvim_set_option_value('ruler', true, {})
|
|
|
|
api.nvim_set_option_value('rulerformat', 'longish', {})
|
|
|
|
api.nvim_set_option_value('laststatus', 0, {})
|
|
|
|
api.nvim_set_option_value('winwidth', 1, {})
|
2023-04-17 09:32:32 -07:00
|
|
|
feed [[<C-W>v<C-W>|<C-W>p]]
|
|
|
|
screen:expect [[
|
|
|
|
│^ |
|
|
|
|
{0:~ }│{0:~}|
|
|
|
|
longish |
|
|
|
|
]]
|
|
|
|
end)
|
2020-10-27 20:52:02 -07:00
|
|
|
end)
|
2022-08-25 04:35:17 -07:00
|
|
|
|
|
|
|
describe('cmdwin', function()
|
|
|
|
before_each(clear)
|
|
|
|
|
|
|
|
-- oldtest: Test_cmdwin_interrupted()
|
|
|
|
it('still uses a new buffer when interrupting more prompt on open', function()
|
|
|
|
local screen = Screen.new(30, 16)
|
|
|
|
screen:set_default_attr_ids({
|
|
|
|
[0] = { bold = true, foreground = Screen.colors.Blue }, -- NonText
|
|
|
|
[1] = { bold = true, reverse = true }, -- StatusLine
|
|
|
|
[2] = { reverse = true }, -- StatusLineNC
|
|
|
|
[3] = { bold = true, foreground = Screen.colors.SeaGreen }, -- MoreMsg
|
|
|
|
[4] = { bold = true }, -- ModeMsg
|
|
|
|
})
|
|
|
|
screen:attach()
|
|
|
|
command('set more')
|
|
|
|
command('autocmd WinNew * highlight')
|
|
|
|
feed('q:')
|
2022-08-30 18:41:00 -07:00
|
|
|
screen:expect({ any = pesc('{3:-- More --}^') })
|
2022-08-25 04:35:17 -07:00
|
|
|
feed('q')
|
|
|
|
screen:expect([[
|
|
|
|
|
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*5
|
2022-08-25 04:35:17 -07:00
|
|
|
{2:[No Name] }|
|
|
|
|
{0::}^ |
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*6
|
2022-08-25 04:35:17 -07:00
|
|
|
{1:[Command Line] }|
|
|
|
|
|
|
|
|
|
]])
|
|
|
|
feed([[aecho 'done']])
|
|
|
|
screen:expect([[
|
|
|
|
|
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*5
|
2022-08-25 04:35:17 -07:00
|
|
|
{2:[No Name] }|
|
|
|
|
{0::}echo 'done'^ |
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*6
|
2022-08-25 04:35:17 -07:00
|
|
|
{1:[Command Line] }|
|
|
|
|
{4:-- INSERT --} |
|
|
|
|
]])
|
|
|
|
feed('<CR>')
|
|
|
|
screen:expect([[
|
|
|
|
^ |
|
2023-12-09 05:42:00 -07:00
|
|
|
{0:~ }|*14
|
2022-08-25 04:35:17 -07:00
|
|
|
done |
|
|
|
|
]])
|
|
|
|
end)
|
|
|
|
end)
|