test: more tests for nvim_eval_statusline "fillchar" (#27502)

This commit is contained in:
zeertzjq
2024-02-17 08:45:35 +08:00
committed by GitHub
parent 5fd1bac65e
commit 848fc8ede8

View File

@@ -3655,6 +3655,7 @@ describe('API', function()
eq({ 2, 2, buf, mark[4] }, mark) eq({ 2, 2, buf, mark[4] }, mark)
end) end)
end) end)
describe('nvim_eval_statusline', function() describe('nvim_eval_statusline', function()
it('works', function() it('works', function()
eq({ eq({
@@ -3662,57 +3663,89 @@ describe('API', function()
width = 31, width = 31,
}, api.nvim_eval_statusline('%%StatusLineString%#WarningMsg#WithHighlights', {})) }, api.nvim_eval_statusline('%%StatusLineString%#WarningMsg#WithHighlights', {}))
end) end)
it("doesn't exceed maxwidth", function() it("doesn't exceed maxwidth", function()
eq({ eq({
str = 'Should be trun>', str = 'Should be trun>',
width = 15, width = 15,
}, api.nvim_eval_statusline('Should be truncated%<', { maxwidth = 15 })) }, api.nvim_eval_statusline('Should be truncated%<', { maxwidth = 15 }))
end) end)
it('supports ASCII fillchar', function()
it('has correct default fillchar', function()
local oldwin = api.nvim_get_current_win()
command('set fillchars=stl:#,stlnc:$,wbr:%')
command('new')
eq({ str = 'a###b', width = 5 }, api.nvim_eval_statusline('a%=b', { maxwidth = 5 }))
eq( eq(
{ str = 'a~~~b', width = 5 }, { str = 'a$$$b', width = 5 },
api.nvim_eval_statusline('a%=b', { fillchar = '~', maxwidth = 5 }) api.nvim_eval_statusline('a%=b', { winid = oldwin, maxwidth = 5 })
) )
end) eq(
it('supports single-width multibyte fillchar', function() { str = 'a%%%b', width = 5 },
eq( api.nvim_eval_statusline('a%=b', { use_winbar = true, maxwidth = 5 })
{ str = 'a━━━b', width = 5 }, )
api.nvim_eval_statusline('a%=b', { fillchar = '', maxwidth = 5 }) eq(
) { str = 'a b', width = 5 },
end) api.nvim_eval_statusline('a%=b', { use_tabline = true, maxwidth = 5 })
it('treats double-width fillchar as single-width', function() )
eq( eq(
{ str = 'a哦哦哦b', width = 5 }, { str = 'a b', width = 5 },
api.nvim_eval_statusline('a%=b', { fillchar = '', maxwidth = 5 }) api.nvim_eval_statusline('a%=b', { use_statuscol_lnum = 1, maxwidth = 5 })
)
end)
it('treats control character fillchar as single-width', function()
eq(
{ str = 'a\031\031\031b', width = 5 },
api.nvim_eval_statusline('a%=b', { fillchar = '\031', maxwidth = 5 })
) )
end) end)
for fc, desc in pairs({
['~'] = 'supports ASCII fillchar',
[''] = 'supports single-width multibyte fillchar',
[''] = 'supports single-width fillchar with composing',
[''] = 'treats double-width fillchar as single-width',
['\031'] = 'treats control character fillchar as single-width',
}) do
it(desc, function()
eq(
{ str = 'a' .. fc:rep(3) .. 'b', width = 5 },
api.nvim_eval_statusline('a%=b', { fillchar = fc, maxwidth = 5 })
)
eq(
{ str = 'a' .. fc:rep(3) .. 'b', width = 5 },
api.nvim_eval_statusline('a%=b', { fillchar = fc, use_winbar = true, maxwidth = 5 })
)
eq(
{ str = 'a' .. fc:rep(3) .. 'b', width = 5 },
api.nvim_eval_statusline('a%=b', { fillchar = fc, use_tabline = true, maxwidth = 5 })
)
eq(
{ str = 'a' .. fc:rep(3) .. 'b', width = 5 },
api.nvim_eval_statusline('a%=b', { fillchar = fc, use_statuscol_lnum = 1, maxwidth = 5 })
)
end)
end
it('rejects multiple-character fillchar', function() it('rejects multiple-character fillchar', function()
eq( eq(
"Invalid 'fillchar': expected single character", "Invalid 'fillchar': expected single character",
pcall_err(api.nvim_eval_statusline, '', { fillchar = 'aa' }) pcall_err(api.nvim_eval_statusline, '', { fillchar = 'aa' })
) )
end) end)
it('rejects empty string fillchar', function() it('rejects empty string fillchar', function()
eq( eq(
"Invalid 'fillchar': expected single character", "Invalid 'fillchar': expected single character",
pcall_err(api.nvim_eval_statusline, '', { fillchar = '' }) pcall_err(api.nvim_eval_statusline, '', { fillchar = '' })
) )
end) end)
it('rejects non-string fillchar', function() it('rejects non-string fillchar', function()
eq( eq(
"Invalid 'fillchar': expected String, got Integer", "Invalid 'fillchar': expected String, got Integer",
pcall_err(api.nvim_eval_statusline, '', { fillchar = 1 }) pcall_err(api.nvim_eval_statusline, '', { fillchar = 1 })
) )
end) end)
it('rejects invalid string', function() it('rejects invalid string', function()
eq('E539: Illegal character <}>', pcall_err(api.nvim_eval_statusline, '%{%}', {})) eq('E539: Illegal character <}>', pcall_err(api.nvim_eval_statusline, '%{%}', {}))
end) end)
it('supports various items', function() it('supports various items', function()
eq({ str = '0', width = 1 }, api.nvim_eval_statusline('%l', { maxwidth = 5 })) eq({ str = '0', width = 1 }, api.nvim_eval_statusline('%l', { maxwidth = 5 }))
command('set readonly') command('set readonly')
@@ -3727,6 +3760,7 @@ describe('API', function()
screen:expect({ any = '123456' }) screen:expect({ any = '123456' })
eq({ str = '<3456', width = 5 }, api.nvim_eval_statusline('%S', { maxwidth = 5 })) eq({ str = '<3456', width = 5 }, api.nvim_eval_statusline('%S', { maxwidth = 5 }))
end) end)
describe('highlight parsing', function() describe('highlight parsing', function()
it('works', function() it('works', function()
eq( eq(
@@ -3744,6 +3778,7 @@ describe('API', function()
) )
) )
end) end)
it('works with no highlight', function() it('works with no highlight', function()
eq({ eq({
str = 'TextWithNoHighlight', str = 'TextWithNoHighlight',
@@ -3753,9 +3788,9 @@ describe('API', function()
}, },
}, api.nvim_eval_statusline('TextWithNoHighlight', { highlights = true })) }, api.nvim_eval_statusline('TextWithNoHighlight', { highlights = true }))
end) end)
it('works with inactive statusline', function() it('works with inactive statusline', function()
command('split') command('split')
eq( eq(
{ {
str = 'TextWithNoHighlightTextWithWarningHighlight', str = 'TextWithNoHighlightTextWithWarningHighlight',
@@ -3771,6 +3806,7 @@ describe('API', function()
) )
) )
end) end)
it('works with tabline', function() it('works with tabline', function()
eq( eq(
{ {
@@ -3787,6 +3823,7 @@ describe('API', function()
) )
) )
end) end)
it('works with winbar', function() it('works with winbar', function()
eq( eq(
{ {
@@ -3803,6 +3840,7 @@ describe('API', function()
) )
) )
end) end)
it('works with statuscolumn', function() it('works with statuscolumn', function()
exec([[ exec([[
let &stc='%C%s%=%l ' let &stc='%C%s%=%l '
@@ -3842,6 +3880,7 @@ describe('API', function()
api.nvim_eval_statusline('%l%#ErrorMsg# ', { use_statuscol_lnum = 3, highlights = true }) api.nvim_eval_statusline('%l%#ErrorMsg# ', { use_statuscol_lnum = 3, highlights = true })
) )
end) end)
it('no memory leak with click functions', function() it('no memory leak with click functions', function()
api.nvim_eval_statusline('%@ClickFunc@StatusLineStringWithClickFunc%T', {}) api.nvim_eval_statusline('%@ClickFunc@StatusLineStringWithClickFunc%T', {})
eq({ eq({