aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/functional/terminal/helpers.lua5
-rw-r--r--test/functional/terminal/tui_spec.lua81
2 files changed, 44 insertions, 42 deletions
diff --git a/test/functional/terminal/helpers.lua b/test/functional/terminal/helpers.lua
index 841c92387f..7247361649 100644
--- a/test/functional/terminal/helpers.lua
+++ b/test/functional/terminal/helpers.lua
@@ -74,7 +74,10 @@ local function screen_setup(extra_rows, command, cols, opts)
[9] = {foreground = 4},
[10] = {foreground = 121}, -- "Press ENTER" in embedded :terminal session.
[11] = {foreground = tonumber('0x00000b')},
- [12] = {reverse = true, foreground = tonumber('0x000079')},
+ [12] = {underline = true},
+ [13] = {underline = true, reverse = true},
+ [14] = {underline = true, reverse = true, bold = true},
+ [15] = {underline = true, foreground = 12},
})
screen:attach(opts or {rgb=false})
diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua
index d071c2f091..b8db882b36 100644
--- a/test/functional/terminal/tui_spec.lua
+++ b/test/functional/terminal/tui_spec.lua
@@ -626,37 +626,35 @@ describe('TUI', function()
tabnew
highlight Tabline ctermbg=NONE ctermfg=NONE cterm=underline
]])
- local attrs = screen:get_default_attr_ids()
- attrs[11] = {underline = true}
screen:expect([[
- {11: + [No Name] + [No Name] }{3: [No Name] }{1: }{11:X}|
+ {12: + [No Name] + [No Name] }{3: [No Name] }{1: }{12:X}|
{1: } |
{4:~ }|
{4:~ }|
{5:[No Name] }|
|
{3:-- TERMINAL --} |
- ]], attrs)
+ ]])
feed_data('\027[57421;5u') -- CTRL + KP_PAGE_UP
screen:expect([[
- {11: + [No Name] }{3: + [No Name] }{11: [No Name] }{1: }{11:X}|
+ {12: + [No Name] }{3: + [No Name] }{12: [No Name] }{1: }{12:X}|
0123456789/*-{1:+} |
= |
{4:~ }|
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]], attrs)
+ ]])
feed_data('\027[57422;5u') -- CTRL + KP_PAGE_DOWN
screen:expect([[
- {11: + [No Name] + [No Name] }{3: [No Name] }{1: }{11:X}|
+ {12: + [No Name] + [No Name] }{3: [No Name] }{1: }{12:X}|
{1: } |
{4:~ }|
{4:~ }|
{5:[No Name] }|
|
{3:-- TERMINAL --} |
- ]], attrs)
+ ]])
end)
it('mouse events work with right-click menu', function()
@@ -671,31 +669,28 @@ describe('TUI', function()
highlight Pmenu ctermbg=NONE ctermfg=NONE cterm=underline,reverse
highlight PmenuSel ctermbg=NONE ctermfg=NONE cterm=underline,reverse,bold
]])
- local attrs = screen:get_default_attr_ids()
- attrs[11] = {underline = true, reverse = true}
- attrs[12] = {underline = true, reverse = true, bold = true}
meths.input_mouse('right', 'press', '', 0, 0, 4)
screen:expect([[
{1:p}opup menu test |
- {4:~ }{11: foo }{4: }|
- {4:~ }{11: bar }{4: }|
- {4:~ }{11: baz }{4: }|
+ {4:~ }{13: foo }{4: }|
+ {4:~ }{13: bar }{4: }|
+ {4:~ }{13: baz }{4: }|
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]], attrs)
+ ]])
meths.input_mouse('right', 'release', '', 0, 0, 4)
screen:expect_unchanged()
meths.input_mouse('move', '', '', 0, 3, 6)
screen:expect([[
{1:p}opup menu test |
- {4:~ }{11: foo }{4: }|
- {4:~ }{11: bar }{4: }|
- {4:~ }{12: baz }{4: }|
+ {4:~ }{13: foo }{4: }|
+ {4:~ }{13: bar }{4: }|
+ {4:~ }{14: baz }{4: }|
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]], attrs)
+ ]])
meths.input_mouse('left', 'press', '', 0, 2, 6)
screen:expect([[
{1:p}opup menu test |
@@ -705,7 +700,7 @@ describe('TUI', function()
{5:[No Name] [+] }|
:let g:menustr = 'bar' |
{3:-- TERMINAL --} |
- ]], attrs)
+ ]])
meths.input_mouse('left', 'release', '', 0, 2, 6)
screen:expect_unchanged()
end)
@@ -1405,18 +1400,14 @@ describe('TUI', function()
end)
it('allows grid to assume wider ambiguous-width characters than host terminal #19686', function()
- child_session:request('nvim_buf_set_lines', 0, 0, 0, true, { ('℃'):rep(60), ('℃'):rep(60) })
+ child_session:request('nvim_buf_set_lines', 0, 0, -1, true, { ('℃'):rep(60), ('℃'):rep(60) })
child_session:request('nvim_win_set_option', 0, 'cursorline', true)
child_session:request('nvim_win_set_option', 0, 'list', true)
child_session:request('nvim_win_set_option', 0, 'listchars', 'eol:$')
- local attrs = screen:get_default_attr_ids()
- attrs[11] = {underline = true} -- CursorLine
- attrs[12] = {underline = true, reverse = true} -- CursorLine and TermCursor
- attrs[13] = {underline = true, foreground = 12} -- CursorLine and NonText
feed_data('gg')
local singlewidth_screen = [[
- {12:℃}{11:℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃}|
- {11:℃℃℃℃℃℃℃℃℃℃}{13:$}{11: }|
+ {13:℃}{12:℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃}|
+ {12:℃℃℃℃℃℃℃℃℃℃}{15:$}{12: }|
℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃|
℃℃℃℃℃℃℃℃℃℃{4:$} |
{5:[No Name] [+] }|
@@ -1426,43 +1417,51 @@ describe('TUI', function()
-- When grid assumes "℃" to be double-width but host terminal assumes it to be single-width, the
-- second cell of "℃" is a space and the attributes of the "℃" are applied to it.
local doublewidth_screen = [[
- {12:℃}{11: ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ }|
- {11:℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ }|
- {11:℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ }{13:$}{11: }|
+ {13:℃}{12: ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ }|
+ {12:℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ }|
+ {12:℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ }{15:$}{12: }|
℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ ℃ >{4:@@@}|
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
]]
- screen:expect(singlewidth_screen, attrs)
+ screen:expect(singlewidth_screen)
child_session:request('nvim_set_option', 'ambiwidth', 'double')
- screen:expect(doublewidth_screen, attrs)
+ screen:expect(doublewidth_screen)
child_session:request('nvim_set_option', 'ambiwidth', 'single')
- screen:expect(singlewidth_screen, attrs)
+ screen:expect(singlewidth_screen)
child_session:request('nvim_call_function', 'setcellwidths', {{{0x2103, 0x2103, 2}}})
- screen:expect(doublewidth_screen, attrs)
+ screen:expect(doublewidth_screen)
child_session:request('nvim_call_function', 'setcellwidths', {{{0x2103, 0x2103, 1}}})
- screen:expect(singlewidth_screen, attrs)
+ screen:expect(singlewidth_screen)
end)
it('draws correctly when cursor_address overflows #21643', function()
helpers.skip(helpers.is_ci('github'), 'FIXME: flaky on GitHub CI')
screen:try_resize(75, 60)
+ retry(nil, nil, function()
+ eq({true, 57}, {child_session:request('nvim_win_get_height', 0)})
+ end)
-- The composing character takes 3 bytes.
local composing = ('a︠'):sub(2)
-- The composed character takes 1 + 5 * 3 = 16 bytes.
local c = 'a' .. composing:rep(5)
-- Going to top-left corner needs 3 bytes.
+ -- Setting underline attribute needs 9 bytes.
-- With screen width 75, 4088 characters need 54 full screen lines.
-- Drawing each full screen line needs 75 * 16 + 2 = 1202 bytes (2 bytes for CR LF).
- -- The incomplete screen line needs 38 * 16 + 8 + 3 = 619 bytes.
- -- The whole line needs 3 + 54 * 1202 + 619 = 65530 bytes.
+ -- The incomplete screen line needs 38 * 16 + 1 + 3 = 612 bytes.
+ -- The whole line needs 3 + 9 + 54 * 1202 + 612 = 65532 bytes.
-- The cursor_address that comes after will overflow the 65535-byte buffer.
- local line = c:rep(4088) .. ('b'):rep(8) .. '℃'
- child_session:request('nvim_buf_set_lines', 0, 0, -1, true, {line, 'c'})
+ local line = c:rep(4088) .. 'b℃'
+ child_session:request('nvim_exec_lua', [[
+ vim.api.nvim_buf_set_lines(0, 0, -1, true, {...})
+ vim.o.cursorline = true
+ ]], {line, 'c'})
screen:expect(
- '{1:' .. c .. '}' .. c:rep(74) .. '|\n' .. (c:rep(75) .. '|\n'):rep(53)
- .. c:rep(38) .. ('b'):rep(8) .. '℃' .. (' '):rep(28) .. '|\n' .. dedent([[
+ '{13:' .. c .. '}{12:' .. c:rep(74) .. '}|\n'
+ .. ('{12:' .. c:rep(75) .. '}|\n'):rep(53)
+ .. '{12:' .. c:rep(38) .. 'b℃' .. (' '):rep(35) .. '}|\n' .. dedent([[
c |
{4:~ }|
{5:[No Name] [+] }|