local helpers = require('test.functional.helpers')(after_each) local Screen = require('test.functional.ui.screen') local command, rawfeed = helpers.command, helpers.rawfeed local clear = helpers.clear local exec_lua = helpers.exec_lua local funcs = helpers.funcs local nvim_prog = helpers.nvim_prog local matches = helpers.matches clear() if funcs.executable('man') == 0 then pending('missing "man" command', function() end) return end describe(':Man', function() before_each(function() clear() end) describe('man.lua: highlight_line()', function() local screen before_each(function() command('syntax on') command('set filetype=man') command('syntax off') -- Ignore syntax groups screen = Screen.new(52, 5) screen:set_default_attr_ids({ b = { bold = true }, i = { italic = true }, u = { underline = true }, bi = { bold = true, italic = true }, biu = { bold = true, italic = true, underline = true }, c = { foreground = Screen.colors.Blue }, -- control chars eob = { bold = true, foreground = Screen.colors.Blue } -- empty line '~'s }) screen:attach() end) it('clears backspaces from text and adds highlights', function() rawfeed([[ ithis iiss aa test with _o_v_e_r_s_t_r_u_c_k text]]) screen:expect{grid=[[ this i{c:^H}is{c:^H}s a{c:^H}a test | with _{c:^H}o_{c:^H}v_{c:^H}e_{c:^H}r_{c:^H}s_{c:^H}t_{c:^H}r_{c:^H}u_{c:^H}c_{c:^H}k tex^t | {eob:~ }| {eob:~ }| | ]]} exec_lua[[require'man'.init_pager()]] screen:expect([[ ^this {b:is} {b:a} test | with {u:overstruck} text | {eob:~ }| {eob:~ }| | ]]) end) it('clears escape sequences from text and adds highlights', function() rawfeed([[ ithis [1mis [3ma [4mtest[0m [4mwith[24m [4mescaped[24m [4mtext[24m]]) screen:expect{grid=[=[ this {c:^[}[1mis {c:^[}[3ma {c:^[}[4mtest{c:^[}[0m | {c:^[}[4mwith{c:^[}[24m {c:^[}[4mescaped{c:^[}[24m {c:^[}[4mtext{c:^[}[24^m | {eob:~ }| {eob:~ }| | ]=]} exec_lua[[require'man'.init_pager()]] screen:expect([[ ^this {b:is }{bi:a }{biu:test} | {u:with} {u:escaped} {u:text} | {eob:~ }| {eob:~ }| | ]]) end) it('highlights multibyte text', function() rawfeed([[ ithis iiss ああ test with _ö_v_e_r_s_t_r_u_̃_c_k te[3mxt¶[0m]]) exec_lua[[require'man'.init_pager()]] screen:expect([[ ^this {b:is} {b:あ} test | with {u:överstrũck} te{i:xt¶} | {eob:~ }| {eob:~ }| | ]]) end) it('highlights underscores based on context', function() rawfeed([[ i__bbeeggiinnss mmiidd__ddllee _m_i_d___d_l_e]]) exec_lua[[require'man'.init_pager()]] screen:expect([[ {b:^_begins} | {b:mid_dle} | {u:mid_dle} | {eob:~ }| | ]]) end) it('highlights various bullet formats', function() rawfeed([[ i· ·· +o ++oo double]]) exec_lua[[require'man'.init_pager()]] screen:expect([[ ^· {b:·} | {b:·} | {b:·} double | {eob:~ }| | ]]) end) it('handles : characters in input', function() rawfeed([[ i[40m 0 [41m 1 [42m 2 [43m 3 [44m 4 [45m 5 [46m 6 [47m 7 [100m 8 [101m 9 [102m 10 [103m 11 [104m 12 [105m 13 [106m 14 [107m 15 [48:5:16m 16 ]]) exec_lua[[require'man'.init_pager()]] screen:expect([[ ^ 0 1 2 3 | 4 5 6 7 8 9 | 10 11 12 13 14 15 | 16 | | ]]) end) end) it('q quits in "$MANPAGER mode" (:Man!) #18281', function() -- This will hang if #18281 regresses. local args = {nvim_prog, '--headless', '+autocmd VimLeave * echo "quit works!!"', '+Man!', '+call nvim_input("q")'} matches('quit works!!', funcs.system(args, {'manpage contents'})) end) end)