diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-02-17 08:45:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-17 08:45:35 +0800 |
commit | 848fc8ede84b9cfc4e651e0e3b449060a8a8d70c (patch) | |
tree | 26790ded1f1c940ce237096afb3ce35aea769f03 /test/functional/api/vim_spec.lua | |
parent | 5fd1bac65ed07310eda5fd976b651cc493002849 (diff) | |
download | rneovim-848fc8ede84b9cfc4e651e0e3b449060a8a8d70c.tar.gz rneovim-848fc8ede84b9cfc4e651e0e3b449060a8a8d70c.tar.bz2 rneovim-848fc8ede84b9cfc4e651e0e3b449060a8a8d70c.zip |
test: more tests for nvim_eval_statusline "fillchar" (#27502)
Diffstat (limited to 'test/functional/api/vim_spec.lua')
-rw-r--r-- | test/functional/api/vim_spec.lua | 71 |
1 files changed, 55 insertions, 16 deletions
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua index 3d2fa7cd1f..9a4a457637 100644 --- a/test/functional/api/vim_spec.lua +++ b/test/functional/api/vim_spec.lua @@ -3655,6 +3655,7 @@ describe('API', function() eq({ 2, 2, buf, mark[4] }, mark) end) end) + describe('nvim_eval_statusline', function() it('works', function() eq({ @@ -3662,57 +3663,89 @@ describe('API', function() width = 31, }, api.nvim_eval_statusline('%%StatusLineString%#WarningMsg#WithHighlights', {})) end) + it("doesn't exceed maxwidth", function() eq({ str = 'Should be trun>', width = 15, }, api.nvim_eval_statusline('Should be truncated%<', { maxwidth = 15 })) 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( - { str = 'a~~~b', width = 5 }, - api.nvim_eval_statusline('a%=b', { fillchar = '~', maxwidth = 5 }) + { str = 'a$$$b', width = 5 }, + api.nvim_eval_statusline('a%=b', { winid = oldwin, maxwidth = 5 }) ) - end) - it('supports single-width multibyte fillchar', function() eq( - { str = 'a━━━b', width = 5 }, - api.nvim_eval_statusline('a%=b', { fillchar = '━', maxwidth = 5 }) + { str = 'a%%%b', width = 5 }, + api.nvim_eval_statusline('a%=b', { use_winbar = true, maxwidth = 5 }) ) - end) - it('treats double-width fillchar as single-width', function() eq( - { str = 'a哦哦哦b', width = 5 }, - api.nvim_eval_statusline('a%=b', { fillchar = '哦', maxwidth = 5 }) + { str = 'a b', width = 5 }, + api.nvim_eval_statusline('a%=b', { use_tabline = true, 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 }) + { str = 'a b', width = 5 }, + api.nvim_eval_statusline('a%=b', { use_statuscol_lnum = 1, maxwidth = 5 }) ) end) + + for fc, desc in pairs({ + ['~'] = 'supports ASCII fillchar', + ['━'] = 'supports single-width multibyte fillchar', + ['c̳'] = '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() eq( "Invalid 'fillchar': expected single character", pcall_err(api.nvim_eval_statusline, '', { fillchar = 'aa' }) ) end) + it('rejects empty string fillchar', function() eq( "Invalid 'fillchar': expected single character", pcall_err(api.nvim_eval_statusline, '', { fillchar = '' }) ) end) + it('rejects non-string fillchar', function() eq( "Invalid 'fillchar': expected String, got Integer", pcall_err(api.nvim_eval_statusline, '', { fillchar = 1 }) ) end) + it('rejects invalid string', function() eq('E539: Illegal character <}>', pcall_err(api.nvim_eval_statusline, '%{%}', {})) end) + it('supports various items', function() eq({ str = '0', width = 1 }, api.nvim_eval_statusline('%l', { maxwidth = 5 })) command('set readonly') @@ -3727,6 +3760,7 @@ describe('API', function() screen:expect({ any = '123456' }) eq({ str = '<3456', width = 5 }, api.nvim_eval_statusline('%S', { maxwidth = 5 })) end) + describe('highlight parsing', function() it('works', function() eq( @@ -3744,6 +3778,7 @@ describe('API', function() ) ) end) + it('works with no highlight', function() eq({ str = 'TextWithNoHighlight', @@ -3753,9 +3788,9 @@ describe('API', function() }, }, api.nvim_eval_statusline('TextWithNoHighlight', { highlights = true })) end) + it('works with inactive statusline', function() command('split') - eq( { str = 'TextWithNoHighlightTextWithWarningHighlight', @@ -3771,6 +3806,7 @@ describe('API', function() ) ) end) + it('works with tabline', function() eq( { @@ -3787,6 +3823,7 @@ describe('API', function() ) ) end) + it('works with winbar', function() eq( { @@ -3803,6 +3840,7 @@ describe('API', function() ) ) end) + it('works with statuscolumn', function() exec([[ let &stc='%C%s%=%l ' @@ -3842,6 +3880,7 @@ describe('API', function() api.nvim_eval_statusline('%l%#ErrorMsg# ', { use_statuscol_lnum = 3, highlights = true }) ) end) + it('no memory leak with click functions', function() api.nvim_eval_statusline('%@ClickFunc@StatusLineStringWithClickFunc%T', {}) eq({ |