mirror of
https://github.com/neovim/neovim.git
synced 2026-02-06 03:47:20 +00:00
Hope this will make people using feed_command less likely: this hides bugs. Already found at least two: 1. msgpackparse() will show internal error: hash_add() in case of duplicate keys, though it will still work correctly. Currently silenced. 2. ttimeoutlen was spelled incorrectly, resulting in option not being set when expected. Test was still functioning somehow though. Currently fixed.
260 lines
9.6 KiB
Lua
260 lines
9.6 KiB
Lua
local helpers = require('test.functional.helpers')(after_each)
|
|
local Screen = require('test.functional.ui.screen')
|
|
local thelpers = require('test.functional.terminal.helpers')
|
|
local feed, clear, nvim = helpers.feed, helpers.clear, helpers.nvim
|
|
local nvim_dir, command = helpers.nvim_dir, helpers.command
|
|
local eq, eval = helpers.eq, helpers.eval
|
|
|
|
if helpers.pending_win32(pending) then return end
|
|
|
|
describe('terminal window highlighting', function()
|
|
local screen
|
|
|
|
before_each(function()
|
|
clear()
|
|
screen = Screen.new(50, 7)
|
|
screen:set_default_attr_ids({
|
|
[1] = {foreground = 45},
|
|
[2] = {background = 46},
|
|
[3] = {foreground = 45, background = 46},
|
|
[4] = {bold = true, italic = true, underline = true},
|
|
[5] = {bold = true},
|
|
[6] = {foreground = 12},
|
|
[7] = {bold = true, reverse = true},
|
|
[8] = {background = 11},
|
|
[9] = {foreground = 130},
|
|
[10] = {reverse = true},
|
|
[11] = {background = 11},
|
|
})
|
|
screen:attach({rgb=false})
|
|
command('enew | call termopen(["'..nvim_dir..'/tty-test"]) | startinsert')
|
|
screen:expect([[
|
|
tty ready |
|
|
{10: } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{5:-- TERMINAL --} |
|
|
]])
|
|
end)
|
|
|
|
local function descr(title, attr_num, set_attrs_fn)
|
|
local function sub(s)
|
|
local str = s:gsub('NUM', attr_num)
|
|
return str
|
|
end
|
|
|
|
describe(title, function()
|
|
before_each(function()
|
|
set_attrs_fn()
|
|
thelpers.feed_data('text')
|
|
thelpers.clear_attrs()
|
|
thelpers.feed_data('text')
|
|
end)
|
|
|
|
local function pass_attrs()
|
|
screen:expect(sub([[
|
|
tty ready |
|
|
{NUM:text}text{10: } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{5:-- TERMINAL --} |
|
|
]]))
|
|
end
|
|
|
|
it('will pass the corresponding attributes', pass_attrs)
|
|
|
|
it('will pass the corresponding attributes on scrollback', function()
|
|
pass_attrs()
|
|
local lines = {}
|
|
for i = 1, 8 do
|
|
table.insert(lines, 'line'..tostring(i))
|
|
end
|
|
table.insert(lines, '')
|
|
thelpers.feed_data(lines)
|
|
screen:expect([[
|
|
line4 |
|
|
line5 |
|
|
line6 |
|
|
line7 |
|
|
line8 |
|
|
{10: } |
|
|
{5:-- TERMINAL --} |
|
|
]])
|
|
feed('<c-\\><c-n>gg')
|
|
screen:expect(sub([[
|
|
^tty ready |
|
|
{NUM:text}textline1 |
|
|
line2 |
|
|
line3 |
|
|
line4 |
|
|
line5 |
|
|
|
|
|
]]))
|
|
end)
|
|
end)
|
|
end
|
|
|
|
descr('foreground', 1, function() thelpers.set_fg(45) end)
|
|
descr('background', 2, function() thelpers.set_bg(46) end)
|
|
descr('foreground and background', 3, function()
|
|
thelpers.set_fg(45)
|
|
thelpers.set_bg(46)
|
|
end)
|
|
descr('bold, italics and underline', 4, function()
|
|
thelpers.set_bold()
|
|
thelpers.set_italic()
|
|
thelpers.set_underline()
|
|
end)
|
|
end)
|
|
|
|
|
|
describe('terminal window highlighting with custom palette', function()
|
|
local screen
|
|
|
|
before_each(function()
|
|
clear()
|
|
screen = Screen.new(50, 7)
|
|
screen:set_default_attr_ids({
|
|
[1] = {foreground = 1193046, special = Screen.colors.Black},
|
|
[2] = {foreground = 12},
|
|
[3] = {bold = true, reverse = true},
|
|
[5] = {background = 11},
|
|
[6] = {foreground = 130},
|
|
[7] = {reverse = true},
|
|
[8] = {background = 11},
|
|
[9] = {bold = true},
|
|
})
|
|
screen:attach({rgb=true})
|
|
nvim('set_var', 'terminal_color_3', '#123456')
|
|
command('enew | call termopen(["'..nvim_dir..'/tty-test"]) | startinsert')
|
|
screen:expect([[
|
|
tty ready |
|
|
{7: } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{9:-- TERMINAL --} |
|
|
]])
|
|
end)
|
|
|
|
it('will use the custom color', function()
|
|
thelpers.set_fg(3)
|
|
thelpers.feed_data('text')
|
|
thelpers.clear_attrs()
|
|
thelpers.feed_data('text')
|
|
screen:expect([[
|
|
tty ready |
|
|
{1:text}text{7: } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{9:-- TERMINAL --} |
|
|
]])
|
|
end)
|
|
end)
|
|
|
|
describe('synIDattr()', function()
|
|
local screen
|
|
before_each(function()
|
|
clear()
|
|
screen = Screen.new(50, 7)
|
|
command('highlight Normal ctermfg=252 guifg=#ff0000 guibg=Black')
|
|
-- Salmon #fa8072 Maroon #800000
|
|
command('highlight Keyword ctermfg=79 guifg=Salmon guisp=Maroon')
|
|
end)
|
|
|
|
it('returns cterm-color if RGB-capable UI is _not_ attached', function()
|
|
eq('252', eval('synIDattr(hlID("Normal"), "fg")'))
|
|
eq('252', eval('synIDattr(hlID("Normal"), "fg#")'))
|
|
eq('', eval('synIDattr(hlID("Normal"), "bg")'))
|
|
eq('', eval('synIDattr(hlID("Normal"), "bg#")'))
|
|
eq('79', eval('synIDattr(hlID("Keyword"), "fg")'))
|
|
eq('79', eval('synIDattr(hlID("Keyword"), "fg#")'))
|
|
eq('', eval('synIDattr(hlID("Keyword"), "sp")'))
|
|
eq('', eval('synIDattr(hlID("Keyword"), "sp#")'))
|
|
end)
|
|
|
|
it('returns gui-color if "gui" arg is passed', function()
|
|
eq('Black', eval('synIDattr(hlID("Normal"), "bg", "gui")'))
|
|
eq('Maroon', eval('synIDattr(hlID("Keyword"), "sp", "gui")'))
|
|
end)
|
|
|
|
it('returns gui-color if RGB-capable UI is attached', function()
|
|
screen:attach({rgb=true})
|
|
eq('#ff0000', eval('synIDattr(hlID("Normal"), "fg")'))
|
|
eq('Black', eval('synIDattr(hlID("Normal"), "bg")'))
|
|
eq('Salmon', eval('synIDattr(hlID("Keyword"), "fg")'))
|
|
eq('Maroon', eval('synIDattr(hlID("Keyword"), "sp")'))
|
|
end)
|
|
|
|
it('returns #RRGGBB value for fg#/bg#/sp#', function()
|
|
screen:attach({rgb=true})
|
|
eq('#ff0000', eval('synIDattr(hlID("Normal"), "fg#")'))
|
|
eq('#000000', eval('synIDattr(hlID("Normal"), "bg#")'))
|
|
eq('#fa8072', eval('synIDattr(hlID("Keyword"), "fg#")'))
|
|
eq('#800000', eval('synIDattr(hlID("Keyword"), "sp#")'))
|
|
end)
|
|
|
|
it('returns color number if non-GUI', function()
|
|
screen:attach({rgb=false})
|
|
eq('252', eval('synIDattr(hlID("Normal"), "fg")'))
|
|
eq('79', eval('synIDattr(hlID("Keyword"), "fg")'))
|
|
end)
|
|
end)
|
|
|
|
describe('fg/bg special colors', function()
|
|
local screen
|
|
before_each(function()
|
|
clear()
|
|
screen = Screen.new(50, 7)
|
|
command('highlight Normal ctermfg=145 ctermbg=16 guifg=#ff0000 guibg=Black')
|
|
command('highlight Visual ctermfg=bg ctermbg=fg guifg=bg guibg=fg guisp=bg')
|
|
end)
|
|
|
|
it('resolve to "Normal" values', function()
|
|
eq(eval('synIDattr(hlID("Normal"), "bg")'),
|
|
eval('synIDattr(hlID("Visual"), "fg")'))
|
|
eq(eval('synIDattr(hlID("Normal"), "bg#")'),
|
|
eval('synIDattr(hlID("Visual"), "fg#")'))
|
|
eq(eval('synIDattr(hlID("Normal"), "fg")'),
|
|
eval('synIDattr(hlID("Visual"), "bg")'))
|
|
eq(eval('synIDattr(hlID("Normal"), "fg#")'),
|
|
eval('synIDattr(hlID("Visual"), "bg#")'))
|
|
eq('bg', eval('synIDattr(hlID("Visual"), "fg", "gui")'))
|
|
eq('bg', eval('synIDattr(hlID("Visual"), "fg#", "gui")'))
|
|
eq('fg', eval('synIDattr(hlID("Visual"), "bg", "gui")'))
|
|
eq('fg', eval('synIDattr(hlID("Visual"), "bg#", "gui")'))
|
|
eq('bg', eval('synIDattr(hlID("Visual"), "sp", "gui")'))
|
|
eq('bg', eval('synIDattr(hlID("Visual"), "sp#", "gui")'))
|
|
end)
|
|
|
|
it('resolve to "Normal" values in RGB-capable UI', function()
|
|
screen:attach({rgb=true})
|
|
eq('bg', eval('synIDattr(hlID("Visual"), "fg")'))
|
|
eq(eval('synIDattr(hlID("Normal"), "bg#")'),
|
|
eval('synIDattr(hlID("Visual"), "fg#")'))
|
|
eq('fg', eval('synIDattr(hlID("Visual"), "bg")'))
|
|
eq(eval('synIDattr(hlID("Normal"), "fg#")'),
|
|
eval('synIDattr(hlID("Visual"), "bg#")'))
|
|
eq('bg', eval('synIDattr(hlID("Visual"), "sp")'))
|
|
eq(eval('synIDattr(hlID("Normal"), "bg#")'),
|
|
eval('synIDattr(hlID("Visual"), "sp#")'))
|
|
end)
|
|
|
|
it('resolve after the "Normal" group is modified', function()
|
|
screen:attach({rgb=true})
|
|
local new_guibg = '#282c34'
|
|
local new_guifg = '#abb2bf'
|
|
command('highlight Normal guifg='..new_guifg..' guibg='..new_guibg)
|
|
eq(new_guibg, eval('synIDattr(hlID("Visual"), "fg#")'))
|
|
eq(new_guifg, eval('synIDattr(hlID("Visual"), "bg#")'))
|
|
eq(new_guibg, eval('synIDattr(hlID("Visual"), "sp#")'))
|
|
end)
|
|
end)
|