1429ab176SBram Moolenaar" Tests for 'conceal'. 2429ab176SBram Moolenaar 38c5a278fSBram Moolenaarsource check.vim 48c5a278fSBram MoolenaarCheckFeature conceal 5429ab176SBram Moolenaar 6429ab176SBram Moolenaarsource screendump.vim 78c5a278fSBram MoolenaarCheckScreendump 8429ab176SBram Moolenaar 9429ab176SBram Moolenaarfunc Test_conceal_two_windows() 10c79745a8SBram Moolenaar let code =<< trim [CODE] 11c79745a8SBram Moolenaar let lines = ["one one one one one", "two |hidden| here", "three |hidden| three"] 12c79745a8SBram Moolenaar call setline(1, lines) 13c79745a8SBram Moolenaar syntax match test /|hidden|/ conceal 14c79745a8SBram Moolenaar set conceallevel=2 15c79745a8SBram Moolenaar set concealcursor= 16c79745a8SBram Moolenaar exe "normal /here\r" 17c79745a8SBram Moolenaar new 18c79745a8SBram Moolenaar call setline(1, lines) 19c79745a8SBram Moolenaar call setline(4, "Second window") 20c79745a8SBram Moolenaar syntax match test /|hidden|/ conceal 21c79745a8SBram Moolenaar set conceallevel=2 22c79745a8SBram Moolenaar set concealcursor=nc 23c79745a8SBram Moolenaar exe "normal /here\r" 24c79745a8SBram Moolenaar [CODE] 25c79745a8SBram Moolenaar 26c79745a8SBram Moolenaar call writefile(code, 'XTest_conceal') 27429ab176SBram Moolenaar " Check that cursor line is concealed 28429ab176SBram Moolenaar let buf = RunVimInTerminal('-S XTest_conceal', {}) 29429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_01', {}) 30429ab176SBram Moolenaar 31429ab176SBram Moolenaar " Check that with concealed text vertical cursor movement is correct. 32429ab176SBram Moolenaar call term_sendkeys(buf, "k") 33429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_02', {}) 34429ab176SBram Moolenaar 35429ab176SBram Moolenaar " Check that with cursor line is not concealed 36429ab176SBram Moolenaar call term_sendkeys(buf, "j") 37429ab176SBram Moolenaar call term_sendkeys(buf, ":set concealcursor=\r") 38429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_03', {}) 39429ab176SBram Moolenaar 40429ab176SBram Moolenaar " Check that with cursor line is not concealed when moving cursor down 41429ab176SBram Moolenaar call term_sendkeys(buf, "j") 42429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_04', {}) 43429ab176SBram Moolenaar 44429ab176SBram Moolenaar " Check that with cursor line is not concealed when switching windows 45429ab176SBram Moolenaar call term_sendkeys(buf, "\<C-W>\<C-W>") 46429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_05', {}) 47429ab176SBram Moolenaar 48429ab176SBram Moolenaar " Check that with cursor line is only concealed in Normal mode 49429ab176SBram Moolenaar call term_sendkeys(buf, ":set concealcursor=n\r") 50429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_06n', {}) 51429ab176SBram Moolenaar call term_sendkeys(buf, "a") 52429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_06i', {}) 53429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>/e") 54429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_06c', {}) 55429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>v") 56429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_06v', {}) 57429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>") 58429ab176SBram Moolenaar 59429ab176SBram Moolenaar " Check that with cursor line is only concealed in Insert mode 60429ab176SBram Moolenaar call term_sendkeys(buf, ":set concealcursor=i\r") 61429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_07n', {}) 62*644b49faSBram Moolenaar call term_sendkeys(buf, "14|a") 63429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_07i', {}) 64*644b49faSBram Moolenaar call term_sendkeys(buf, "\<Esc>") 65*644b49faSBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_07in', {}) 66*644b49faSBram Moolenaar call term_sendkeys(buf, "/e") 67429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_07c', {}) 68429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>v") 69429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_07v', {}) 70429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>") 71429ab176SBram Moolenaar 72429ab176SBram Moolenaar " Check that with cursor line is only concealed in Command mode 73429ab176SBram Moolenaar call term_sendkeys(buf, ":set concealcursor=c\r") 74429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_08n', {}) 75429ab176SBram Moolenaar call term_sendkeys(buf, "a") 76429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_08i', {}) 77429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>/e") 78429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_08c', {}) 79429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>v") 80429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_08v', {}) 81429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>") 82429ab176SBram Moolenaar 83429ab176SBram Moolenaar " Check that with cursor line is only concealed in Visual mode 84429ab176SBram Moolenaar call term_sendkeys(buf, ":set concealcursor=v\r") 85429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_09n', {}) 86429ab176SBram Moolenaar call term_sendkeys(buf, "a") 87429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_09i', {}) 88429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>/e") 89429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_09c', {}) 90429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>v") 91429ab176SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_09v', {}) 92429ab176SBram Moolenaar call term_sendkeys(buf, "\<Esc>") 93429ab176SBram Moolenaar 94465e8b59SBram Moolenaar " Check moving the cursor while in insert mode. 95465e8b59SBram Moolenaar call term_sendkeys(buf, ":set concealcursor=\r") 96465e8b59SBram Moolenaar call term_sendkeys(buf, "a") 97465e8b59SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_10', {}) 98465e8b59SBram Moolenaar call term_sendkeys(buf, "\<Down>") 99465e8b59SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_11', {}) 100465e8b59SBram Moolenaar call term_sendkeys(buf, "\<Esc>") 101465e8b59SBram Moolenaar 102465e8b59SBram Moolenaar " Check the "o" command 103465e8b59SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_12', {}) 104465e8b59SBram Moolenaar call term_sendkeys(buf, "o") 105465e8b59SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_two_windows_13', {}) 106465e8b59SBram Moolenaar call term_sendkeys(buf, "\<Esc>") 107465e8b59SBram Moolenaar 108429ab176SBram Moolenaar " clean up 109429ab176SBram Moolenaar call StopVimInTerminal(buf) 110429ab176SBram Moolenaar call delete('XTest_conceal') 111429ab176SBram Moolenaarendfunc 112bbee8d51SBram Moolenaar 113bbee8d51SBram Moolenaarfunc Test_conceal_with_cursorline() 114bbee8d51SBram Moolenaar " Opens a help window, where 'conceal' is set, switches to the other window 115bbee8d51SBram Moolenaar " where 'cursorline' needs to be updated when the cursor moves. 116c79745a8SBram Moolenaar let code =<< trim [CODE] 117c79745a8SBram Moolenaar set cursorline 118c79745a8SBram Moolenaar normal othis is a test 119c79745a8SBram Moolenaar new 120c79745a8SBram Moolenaar call setline(1, ["one", "two", "three", "four", "five"]) 121c79745a8SBram Moolenaar set ft=help 122c79745a8SBram Moolenaar normal M 123c79745a8SBram Moolenaar [CODE] 124c79745a8SBram Moolenaar 125c79745a8SBram Moolenaar call writefile(code, 'XTest_conceal_cul') 126bbee8d51SBram Moolenaar let buf = RunVimInTerminal('-S XTest_conceal_cul', {}) 127bbee8d51SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_cul_01', {}) 128bbee8d51SBram Moolenaar 129bbee8d51SBram Moolenaar call term_sendkeys(buf, ":wincmd w\r") 130bbee8d51SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_cul_02', {}) 131bbee8d51SBram Moolenaar 132bbee8d51SBram Moolenaar call term_sendkeys(buf, "k") 133bbee8d51SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_cul_03', {}) 134bbee8d51SBram Moolenaar 135bbee8d51SBram Moolenaar " clean up 136bbee8d51SBram Moolenaar call StopVimInTerminal(buf) 137bbee8d51SBram Moolenaar call delete('XTest_conceal_cul') 138bbee8d51SBram Moolenaarendfunc 1395babc6e8SBram Moolenaar 1405babc6e8SBram Moolenaarfunc Test_conceal_resize_term() 1415babc6e8SBram Moolenaar let code =<< trim [CODE] 1425babc6e8SBram Moolenaar call setline(1, '`one` `two` `three` `four` `five`, the backticks should be concealed') 1435babc6e8SBram Moolenaar setl cocu=n cole=3 1445babc6e8SBram Moolenaar syn region CommentCodeSpan matchgroup=Comment start=/`/ end=/`/ concealends 1455babc6e8SBram Moolenaar normal fb 1465babc6e8SBram Moolenaar [CODE] 1475babc6e8SBram Moolenaar call writefile(code, 'XTest_conceal_resize') 1485babc6e8SBram Moolenaar let buf = RunVimInTerminal('-S XTest_conceal_resize', {'rows': 6}) 1495babc6e8SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_resize_01', {}) 1505babc6e8SBram Moolenaar 1515babc6e8SBram Moolenaar call win_execute(buf->win_findbuf()[0], 'wincmd +') 1526a2c5a7dSBram Moolenaar call TermWait(buf) 1535babc6e8SBram Moolenaar call VerifyScreenDump(buf, 'Test_conceal_resize_02', {}) 1545babc6e8SBram Moolenaar 1555babc6e8SBram Moolenaar " clean up 1565babc6e8SBram Moolenaar call StopVimInTerminal(buf) 1575babc6e8SBram Moolenaar call delete('XTest_conceal_resize') 1585babc6e8SBram Moolenaarendfunc 159213ed008SBram Moolenaar 160213ed008SBram Moolenaar" Tests for correct display (cursor column position) with +conceal and 161213ed008SBram Moolenaar" tabulators. Need to run this test in a separate Vim instance. Otherwise the 162213ed008SBram Moolenaar" screen is not updated (lazy redraw) and the cursor position is wrong. 163213ed008SBram Moolenaarfunc Test_conceal_cursor_pos() 164213ed008SBram Moolenaar let code =<< trim [CODE] 165213ed008SBram Moolenaar :let l = ['start:', '.concealed. text', "|concealed|\ttext"] 166213ed008SBram Moolenaar :let l += ['', "\t.concealed.\ttext", "\t|concealed|\ttext", ''] 167213ed008SBram Moolenaar :let l += [".a.\t.b.\t.c.\t.d.", "|a|\t|b|\t|c|\t|d|"] 168213ed008SBram Moolenaar :call append(0, l) 169213ed008SBram Moolenaar :call cursor(1, 1) 170213ed008SBram Moolenaar :" Conceal settings. 171213ed008SBram Moolenaar :set conceallevel=2 172213ed008SBram Moolenaar :set concealcursor=nc 173213ed008SBram Moolenaar :syntax match test /|/ conceal 174213ed008SBram Moolenaar :" Save current cursor position. Only works in <expr> mode, can't be used 175213ed008SBram Moolenaar :" with :normal because it moves the cursor to the command line. Thanks 176213ed008SBram Moolenaar :" to ZyX <[email protected]> for the idea to use an <expr> mapping. 177213ed008SBram Moolenaar :let curpos = [] 178213ed008SBram Moolenaar :nnoremap <expr> GG ":let curpos += ['".screenrow().":".screencol()."']\n" 179213ed008SBram Moolenaar :normal ztj 180213ed008SBram Moolenaar GGk 181213ed008SBram Moolenaar :" We should end up in the same column when running these commands on the 182213ed008SBram Moolenaar :" two lines. 183213ed008SBram Moolenaar :normal ft 184213ed008SBram Moolenaar GGk 185213ed008SBram Moolenaar :normal $ 186213ed008SBram Moolenaar GGk 187213ed008SBram Moolenaar :normal 0j 188213ed008SBram Moolenaar GGk 189213ed008SBram Moolenaar :normal ft 190213ed008SBram Moolenaar GGk 191213ed008SBram Moolenaar :normal $ 192213ed008SBram Moolenaar GGk 193213ed008SBram Moolenaar :normal 0j0j 194213ed008SBram Moolenaar GGk 195213ed008SBram Moolenaar :" Same for next test block. 196213ed008SBram Moolenaar :normal ft 197213ed008SBram Moolenaar GGk 198213ed008SBram Moolenaar :normal $ 199213ed008SBram Moolenaar GGk 200213ed008SBram Moolenaar :normal 0j 201213ed008SBram Moolenaar GGk 202213ed008SBram Moolenaar :normal ft 203213ed008SBram Moolenaar GGk 204213ed008SBram Moolenaar :normal $ 205213ed008SBram Moolenaar GGk 206213ed008SBram Moolenaar :normal 0j0j 207213ed008SBram Moolenaar GGk 208213ed008SBram Moolenaar :" And check W with multiple tabs and conceals in a line. 209213ed008SBram Moolenaar :normal W 210213ed008SBram Moolenaar GGk 211213ed008SBram Moolenaar :normal W 212213ed008SBram Moolenaar GGk 213213ed008SBram Moolenaar :normal W 214213ed008SBram Moolenaar GGk 215213ed008SBram Moolenaar :normal $ 216213ed008SBram Moolenaar GGk 217213ed008SBram Moolenaar :normal 0j 218213ed008SBram Moolenaar GGk 219213ed008SBram Moolenaar :normal W 220213ed008SBram Moolenaar GGk 221213ed008SBram Moolenaar :normal W 222213ed008SBram Moolenaar GGk 223213ed008SBram Moolenaar :normal W 224213ed008SBram Moolenaar GGk 225213ed008SBram Moolenaar :normal $ 226213ed008SBram Moolenaar GGk 227213ed008SBram Moolenaar :set lbr 228213ed008SBram Moolenaar :normal $ 229213ed008SBram Moolenaar GGk 230213ed008SBram Moolenaar :set list listchars=tab:>- 231213ed008SBram Moolenaar :normal 0 232213ed008SBram Moolenaar GGk 233213ed008SBram Moolenaar :normal W 234213ed008SBram Moolenaar GGk 235213ed008SBram Moolenaar :normal W 236213ed008SBram Moolenaar GGk 237213ed008SBram Moolenaar :normal W 238213ed008SBram Moolenaar GGk 239213ed008SBram Moolenaar :normal $ 240213ed008SBram Moolenaar GGk 241213ed008SBram Moolenaar :call writefile(curpos, 'Xconceal_curpos.out') 242213ed008SBram Moolenaar :q! 243213ed008SBram Moolenaar 244213ed008SBram Moolenaar [CODE] 245213ed008SBram Moolenaar call writefile(code, 'XTest_conceal_curpos') 246213ed008SBram Moolenaar 247213ed008SBram Moolenaar if RunVim([], [], '-s XTest_conceal_curpos') 248213ed008SBram Moolenaar call assert_equal([ 249213ed008SBram Moolenaar \ '2:1', '2:17', '2:20', '3:1', '3:17', '3:20', '5:8', '5:25', 250213ed008SBram Moolenaar \ '5:28', '6:8', '6:25', '6:28', '8:1', '8:9', '8:17', '8:25', 251213ed008SBram Moolenaar \ '8:27', '9:1', '9:9', '9:17', '9:25', '9:26', '9:26', '9:1', 252213ed008SBram Moolenaar \ '9:9', '9:17', '9:25', '9:26'], readfile('Xconceal_curpos.out')) 253213ed008SBram Moolenaar endif 254213ed008SBram Moolenaar 255213ed008SBram Moolenaar call delete('Xconceal_curpos.out') 256213ed008SBram Moolenaar call delete('XTest_conceal_curpos') 257213ed008SBram Moolenaarendfunc 258213ed008SBram Moolenaar 259fc838d6cSBram Moolenaarfunc Test_conceal_eol() 260fc838d6cSBram Moolenaar new! 261fc838d6cSBram Moolenaar setlocal concealcursor=n conceallevel=1 262fc838d6cSBram Moolenaar call setline(1, ["x", ""]) 263fc838d6cSBram Moolenaar call matchaddpos('Conceal', [[2, 1, 1]], 2, -1, {'conceal': 1}) 264fc838d6cSBram Moolenaar redraw! 265fc838d6cSBram Moolenaar 266fc838d6cSBram Moolenaar call assert_notequal(screenchar(1, 1), screenchar(2, 2)) 267fc838d6cSBram Moolenaar call assert_equal(screenattr(1, 1), screenattr(1, 2)) 268fc838d6cSBram Moolenaar call assert_equal(screenattr(1, 2), screenattr(2, 2)) 269fc838d6cSBram Moolenaar call assert_equal(screenattr(2, 1), screenattr(2, 2)) 270fc838d6cSBram Moolenaar 271fc838d6cSBram Moolenaar set list 272fc838d6cSBram Moolenaar redraw! 273fc838d6cSBram Moolenaar 274fc838d6cSBram Moolenaar call assert_equal(screenattr(1, 1), screenattr(2, 2)) 275fc838d6cSBram Moolenaar call assert_notequal(screenattr(1, 1), screenattr(1, 2)) 276fc838d6cSBram Moolenaar call assert_notequal(screenattr(1, 2), screenattr(2, 1)) 277fc838d6cSBram Moolenaar 278fc838d6cSBram Moolenaar set nolist 279fc838d6cSBram Moolenaarendfunc 280fc838d6cSBram Moolenaar 281213ed008SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 282