mirror of
https://github.com/neovim/neovim.git
synced 2025-01-01 17:23:36 -07:00
2ab70cb55c
wp->w_height_inner now contains the "inner" size, regardless if the window has been drawn yet or not. It should be used instead of wp->w_grid.Rows, for stuff that is not directly related to accessing the allocated grid memory, such like cursor movement and terminal size
116 lines
3.9 KiB
Lua
116 lines
3.9 KiB
Lua
local helpers = require('test.functional.helpers')(nil)
|
|
local Screen = require('test.functional.ui.screen')
|
|
local nvim_dir = helpers.nvim_dir
|
|
local feed_command, nvim = helpers.feed_command, helpers.nvim
|
|
|
|
local function feed_data(data)
|
|
nvim('set_var', 'term_data', data)
|
|
nvim('command', 'call jobsend(b:terminal_job_id, term_data)')
|
|
end
|
|
|
|
local function feed_termcode(data)
|
|
-- feed with the job API
|
|
nvim('command', 'call jobsend(b:terminal_job_id, "\\x1b'..data..'")')
|
|
end
|
|
-- some helpers for controlling the terminal. the codes were taken from
|
|
-- infocmp xterm-256color which is less what libvterm understands
|
|
-- civis/cnorm
|
|
local function hide_cursor() feed_termcode('[?25l') end
|
|
local function show_cursor() feed_termcode('[?25h') end
|
|
-- smcup/rmcup
|
|
local function enter_altscreen() feed_termcode('[?1049h') end
|
|
local function exit_altscreen() feed_termcode('[?1049l') end
|
|
-- character attributes
|
|
local function set_fg(num) feed_termcode('[38;5;'..num..'m') end
|
|
local function set_bg(num) feed_termcode('[48;5;'..num..'m') end
|
|
local function set_bold() feed_termcode('[1m') end
|
|
local function set_italic() feed_termcode('[3m') end
|
|
local function set_underline() feed_termcode('[4m') end
|
|
local function clear_attrs() feed_termcode('[0;10m') end
|
|
-- mouse
|
|
local function enable_mouse() feed_termcode('[?1002h') end
|
|
local function disable_mouse() feed_termcode('[?1002l') end
|
|
|
|
local default_command = '["'..nvim_dir..'/tty-test'..'"]'
|
|
|
|
local function screen_setup(extra_rows, command, cols, opts)
|
|
extra_rows = extra_rows and extra_rows or 0
|
|
command = command and command or default_command
|
|
cols = cols and cols or 50
|
|
|
|
nvim('command', 'highlight TermCursor cterm=reverse')
|
|
nvim('command', 'highlight TermCursorNC ctermbg=11')
|
|
|
|
local screen = Screen.new(cols, 7 + extra_rows)
|
|
screen:set_default_attr_ids({
|
|
[1] = {reverse = true}, -- focused cursor
|
|
[2] = {background = 11}, -- unfocused cursor
|
|
[3] = {bold = true},
|
|
[4] = {foreground = 12},
|
|
[5] = {bold = true, reverse = true},
|
|
[6] = {background = 11},
|
|
[7] = {foreground = 130},
|
|
[8] = {foreground = 15, background = 1}, -- error message
|
|
[9] = {foreground = 4},
|
|
[10] = {foreground = 121}, -- "Press ENTER" in embedded :terminal session.
|
|
})
|
|
|
|
screen:attach(opts or {rgb=false})
|
|
|
|
feed_command('enew | call termopen('..command..')')
|
|
nvim('input', '<CR>')
|
|
local vim_errmsg = nvim('eval', 'v:errmsg')
|
|
if vim_errmsg and "" ~= vim_errmsg then
|
|
error(vim_errmsg)
|
|
end
|
|
|
|
feed_command('setlocal scrollback=10')
|
|
feed_command('startinsert')
|
|
|
|
-- tty-test puts the terminal into raw mode and echoes input. Tests work by
|
|
-- feeding termcodes to control the display and asserting by screen:expect.
|
|
if command == default_command and opts == nil then
|
|
-- Wait for "tty ready" to be printed before each test or the terminal may
|
|
-- still be in canonical mode (will echo characters for example).
|
|
local empty_line = (' '):rep(cols)
|
|
local expected = {
|
|
'tty ready'..(' '):rep(cols - 9),
|
|
'{1: }' ..(' '):rep(cols - 1),
|
|
empty_line,
|
|
empty_line,
|
|
empty_line,
|
|
empty_line,
|
|
}
|
|
for _ = 1, extra_rows do
|
|
table.insert(expected, empty_line)
|
|
end
|
|
|
|
table.insert(expected, '{3:-- TERMINAL --}' .. ((' '):rep(cols - 14)))
|
|
screen:expect(table.concat(expected, '|\n')..'|')
|
|
else
|
|
-- This eval also acts as a wait().
|
|
if 0 == nvim('eval', "exists('b:terminal_job_id')") then
|
|
error("terminal job failed to start")
|
|
end
|
|
end
|
|
return screen
|
|
end
|
|
|
|
return {
|
|
feed_data = feed_data,
|
|
feed_termcode = feed_termcode,
|
|
hide_cursor = hide_cursor,
|
|
show_cursor = show_cursor,
|
|
enter_altscreen = enter_altscreen,
|
|
exit_altscreen = exit_altscreen,
|
|
set_fg = set_fg,
|
|
set_bg = set_bg,
|
|
set_bold = set_bold,
|
|
set_italic = set_italic,
|
|
set_underline = set_underline,
|
|
clear_attrs = clear_attrs,
|
|
enable_mouse = enable_mouse,
|
|
disable_mouse = disable_mouse,
|
|
screen_setup = screen_setup
|
|
}
|