local t = require('test.testutil') local n = require('test.functional.testnvim')() local Screen = require('test.functional.ui.screen') local clear, command, eq = n.clear, n.command, t.eq local insert = n.insert local api = n.api local assert_alive = n.assert_alive describe('ui/ext_tabline', function() local screen local event_tabs, event_curtab, event_curbuf, event_buffers before_each(function() clear() screen = Screen.new(25, 5) screen:attach({ rgb = true, ext_tabline = true }) function screen:_handle_tabline_update(curtab, tabs, curbuf, buffers) event_curtab = curtab event_tabs = tabs event_curbuf = curbuf event_buffers = buffers end end) it('publishes UI events', function() command('tabedit another-tab') local expected_tabs = { { tab = 1, name = '[No Name]' }, { tab = 2, name = 'another-tab' }, } screen:expect { grid = [[ ^ | {1:~ }|*3 | ]], condition = function() eq(2, event_curtab) eq(expected_tabs, event_tabs) end, } command('tabNext') screen:expect { grid = [[ ^ | {1:~ }|*3 | ]], condition = function() eq(1, event_curtab) eq(expected_tabs, event_tabs) end, } end) it('buffer UI events', function() local expected_buffers_initial = { { buffer = 1, name = '[No Name]' }, } screen:expect { grid = [[ ^ | {1:~ }|*3 | ]], condition = function() eq(1, event_curbuf) eq(expected_buffers_initial, event_buffers) end, } command('badd another-buffer') command('bnext') local expected_buffers = { { buffer = 1, name = '[No Name]' }, { buffer = 2, name = 'another-buffer' }, } screen:expect { grid = [[ ^ | {1:~ }|*3 | ]], condition = function() eq(2, event_curbuf) eq(expected_buffers, event_buffers) end, } end) end) describe('tabline', function() local screen before_each(function() clear() screen = Screen.new(42, 5) screen:attach() end) it('redraws when tabline option is set', function() command('set tabline=asdf') command('set showtabline=2') screen:expect { grid = [[ {2:asdf }| ^ | {1:~ }|*2 | ]], } command('set tabline=jkl') screen:expect { grid = [[ {2:jkl }| ^ | {1:~ }|*2 | ]], } end) it('combines highlight attributes', function() screen:set_default_attr_ids({ [1] = { foreground = Screen.colors.Blue1, bold = true }, -- StatusLine [2] = { bold = true, italic = true }, -- StatusLine [3] = { bold = true, italic = true, foreground = Screen.colors.Red }, -- NonText combined with StatusLine }) command('hi TabLineFill gui=bold,italic') command('hi Identifier guifg=red') command('set tabline=Test%#Identifier#here') command('set showtabline=2') screen:expect { grid = [[ {2:Test}{3:here }| ^ | {1:~ }|*2 | ]], } end) it('click definitions do not leak memory #21765', function() command('set tabline=%@MyClickFunc@MyClickText%T') command('set showtabline=2') command('redrawtabline') end) it('clicks work with truncated double-width label #24187', function() insert('tab1') command('tabnew') insert('tab2') command('tabprev') api.nvim_set_option_value('tabline', '%1T口口%2Ta' .. ('b'):rep(38) .. '%999Xc', {}) screen:expect { grid = [[ {2: