162706606SBram Moolenaar" Test for displaying stuff 26d91bcb4SBram Moolenaar 362706606SBram Moolenaarif !has('gui_running') && has('unix') 462706606SBram Moolenaar set term=ansi 562706606SBram Moolenaarendif 662706606SBram Moolenaar 7c6cd8409SBram Moolenaarsource view_util.vim 83c8ee629SBram Moolenaarsource check.vim 93c8ee629SBram Moolenaarsource screendump.vim 1062706606SBram Moolenaar 111e115360SBram Moolenaarfunc Test_display_foldcolumn() 123c8ee629SBram Moolenaar CheckFeature folding 133c8ee629SBram Moolenaar 1462706606SBram Moolenaar new 1562706606SBram Moolenaar vnew 1662706606SBram Moolenaar vert resize 25 1770892378SBram Moolenaar call assert_equal(25, winwidth(winnr())) 1870892378SBram Moolenaar set isprint=@ 1962706606SBram Moolenaar 2062706606SBram Moolenaar 1put='e more noise blah blah more stuff here' 2162706606SBram Moolenaar 22c6cd8409SBram Moolenaar let expect = [ 23c6cd8409SBram Moolenaar \ "e more noise blah blah<82", 24c6cd8409SBram Moolenaar \ "> more stuff here " 25c6cd8409SBram Moolenaar \ ] 2662706606SBram Moolenaar 2762706606SBram Moolenaar call cursor(2, 1) 2862706606SBram Moolenaar norm! zt 29c6cd8409SBram Moolenaar let lines = ScreenLines([1,2], winwidth(0)) 30c6cd8409SBram Moolenaar call assert_equal(expect, lines) 3162706606SBram Moolenaar set fdc=2 32c6cd8409SBram Moolenaar let lines = ScreenLines([1,2], winwidth(0)) 33c6cd8409SBram Moolenaar let expect = [ 34c6cd8409SBram Moolenaar \ " e more noise blah blah<", 35c6cd8409SBram Moolenaar \ " 82> more stuff here " 36c6cd8409SBram Moolenaar \ ] 37c6cd8409SBram Moolenaar call assert_equal(expect, lines) 3862706606SBram Moolenaar 3962706606SBram Moolenaar quit! 4062706606SBram Moolenaar quit! 41c6cd8409SBram Moolenaarendfunc 42c6cd8409SBram Moolenaar 431e115360SBram Moolenaarfunc Test_display_foldtext_mbyte() 443c8ee629SBram Moolenaar CheckFeature folding 453c8ee629SBram Moolenaar 46c6cd8409SBram Moolenaar call NewWindow(10, 40) 47c6cd8409SBram Moolenaar call append(0, range(1,20)) 48c6cd8409SBram Moolenaar exe "set foldmethod=manual foldtext=foldtext() fillchars=fold:\u2500,vert:\u2502 fdc=2" 49c6cd8409SBram Moolenaar call cursor(2, 1) 50c6cd8409SBram Moolenaar norm! zf13G 51c6cd8409SBram Moolenaar let lines=ScreenLines([1,3], winwidth(0)+1) 52c6cd8409SBram Moolenaar let expect=[ 53c6cd8409SBram Moolenaar \ " 1 \u2502", 54c6cd8409SBram Moolenaar \ "+ +-- 12 lines: 2". repeat("\u2500", 23). "\u2502", 55c6cd8409SBram Moolenaar \ " 14 \u2502", 56c6cd8409SBram Moolenaar \ ] 57c6cd8409SBram Moolenaar call assert_equal(expect, lines) 588da1e6ceSBram Moolenaar 598da1e6ceSBram Moolenaar set fillchars=fold:-,vert:\| 608da1e6ceSBram Moolenaar let lines=ScreenLines([1,3], winwidth(0)+1) 618da1e6ceSBram Moolenaar let expect=[ 628da1e6ceSBram Moolenaar \ " 1 |", 638da1e6ceSBram Moolenaar \ "+ +-- 12 lines: 2". repeat("-", 23). "|", 648da1e6ceSBram Moolenaar \ " 14 |", 658da1e6ceSBram Moolenaar \ ] 668da1e6ceSBram Moolenaar call assert_equal(expect, lines) 678da1e6ceSBram Moolenaar 68c6cd8409SBram Moolenaar set foldtext& fillchars& foldmethod& fdc& 69c6cd8409SBram Moolenaar bw! 70c6cd8409SBram Moolenaarendfunc 713c8ee629SBram Moolenaar 723c8ee629SBram Moolenaar" check that win_ins_lines() and win_del_lines() work when t_cs is empty. 733c8ee629SBram Moolenaarfunc Test_scroll_without_region() 743c8ee629SBram Moolenaar CheckScreendump 753c8ee629SBram Moolenaar 763c8ee629SBram Moolenaar let lines =<< trim END 773c8ee629SBram Moolenaar call setline(1, range(1, 20)) 783c8ee629SBram Moolenaar set t_cs= 793c8ee629SBram Moolenaar set laststatus=2 803c8ee629SBram Moolenaar END 813c8ee629SBram Moolenaar call writefile(lines, 'Xtestscroll') 823c8ee629SBram Moolenaar let buf = RunVimInTerminal('-S Xtestscroll', #{rows: 10}) 833c8ee629SBram Moolenaar 843c8ee629SBram Moolenaar call VerifyScreenDump(buf, 'Test_scroll_no_region_1', {}) 853c8ee629SBram Moolenaar 863c8ee629SBram Moolenaar call term_sendkeys(buf, ":3delete\<cr>") 873c8ee629SBram Moolenaar call VerifyScreenDump(buf, 'Test_scroll_no_region_2', {}) 883c8ee629SBram Moolenaar 893c8ee629SBram Moolenaar call term_sendkeys(buf, ":4put\<cr>") 903c8ee629SBram Moolenaar call VerifyScreenDump(buf, 'Test_scroll_no_region_3', {}) 913c8ee629SBram Moolenaar 927cc53517SBram Moolenaar call term_sendkeys(buf, ":undo\<cr>") 937cc53517SBram Moolenaar call term_sendkeys(buf, ":undo\<cr>") 947cc53517SBram Moolenaar call term_sendkeys(buf, ":set laststatus=0\<cr>") 957cc53517SBram Moolenaar call VerifyScreenDump(buf, 'Test_scroll_no_region_4', {}) 967cc53517SBram Moolenaar 977cc53517SBram Moolenaar call term_sendkeys(buf, ":3delete\<cr>") 987cc53517SBram Moolenaar call VerifyScreenDump(buf, 'Test_scroll_no_region_5', {}) 997cc53517SBram Moolenaar 1007cc53517SBram Moolenaar call term_sendkeys(buf, ":4put\<cr>") 1017cc53517SBram Moolenaar call VerifyScreenDump(buf, 'Test_scroll_no_region_6', {}) 1027cc53517SBram Moolenaar 1033c8ee629SBram Moolenaar " clean up 1043c8ee629SBram Moolenaar call StopVimInTerminal(buf) 1053c8ee629SBram Moolenaar call delete('Xtestscroll') 1063c8ee629SBram Moolenaarendfunc 107bffba7f7SBram Moolenaar 108bffba7f7SBram Moolenaarfunc Test_display_listchars_precedes() 109bffba7f7SBram Moolenaar call NewWindow(10, 10) 110bffba7f7SBram Moolenaar " Need a physical line that wraps over the complete 111bffba7f7SBram Moolenaar " window size 112bffba7f7SBram Moolenaar call append(0, repeat('aaa aaa aa ', 10)) 113bffba7f7SBram Moolenaar call append(1, repeat(['bbb bbb bbb bbb'], 2)) 114bffba7f7SBram Moolenaar " remove blank trailing line 115bffba7f7SBram Moolenaar $d 116bffba7f7SBram Moolenaar set list nowrap 117bffba7f7SBram Moolenaar call cursor(1, 1) 118bffba7f7SBram Moolenaar " move to end of line and scroll 2 characters back 119bffba7f7SBram Moolenaar norm! $2zh 120bffba7f7SBram Moolenaar let lines=ScreenLines([1,4], winwidth(0)+1) 121bffba7f7SBram Moolenaar let expect = [ 122bffba7f7SBram Moolenaar \ " aaa aa $ |", 123bffba7f7SBram Moolenaar \ "$ |", 124bffba7f7SBram Moolenaar \ "$ |", 125bffba7f7SBram Moolenaar \ "~ |", 126bffba7f7SBram Moolenaar \ ] 127bffba7f7SBram Moolenaar call assert_equal(expect, lines) 128bffba7f7SBram Moolenaar set list listchars+=precedes:< nowrap 129bffba7f7SBram Moolenaar call cursor(1, 1) 130bffba7f7SBram Moolenaar " move to end of line and scroll 2 characters back 131bffba7f7SBram Moolenaar norm! $2zh 132bffba7f7SBram Moolenaar let lines = ScreenLines([1,4], winwidth(0)+1) 133bffba7f7SBram Moolenaar let expect = [ 134bffba7f7SBram Moolenaar \ "<aaa aa $ |", 135bffba7f7SBram Moolenaar \ "< |", 136bffba7f7SBram Moolenaar \ "< |", 137bffba7f7SBram Moolenaar \ "~ |", 138bffba7f7SBram Moolenaar \ ] 139bffba7f7SBram Moolenaar call assert_equal(expect, lines) 140bffba7f7SBram Moolenaar set wrap 141bffba7f7SBram Moolenaar call cursor(1, 1) 142bffba7f7SBram Moolenaar " the complete line should be displayed in the window 143bffba7f7SBram Moolenaar norm! $ 144bffba7f7SBram Moolenaar 145bffba7f7SBram Moolenaar let lines = ScreenLines([1,10], winwidth(0)+1) 146bffba7f7SBram Moolenaar let expect = [ 147bffba7f7SBram Moolenaar \ "<aaa aaa a|", 148bffba7f7SBram Moolenaar \ "a aaa aaa |", 149bffba7f7SBram Moolenaar \ "aa aaa aaa|", 150bffba7f7SBram Moolenaar \ " aa aaa aa|", 151bffba7f7SBram Moolenaar \ "a aa aaa a|", 152bffba7f7SBram Moolenaar \ "aa aa aaa |", 153bffba7f7SBram Moolenaar \ "aaa aa aaa|", 154bffba7f7SBram Moolenaar \ " aaa aa aa|", 155bffba7f7SBram Moolenaar \ "a aaa aa a|", 156bffba7f7SBram Moolenaar \ "aa aaa aa |", 157bffba7f7SBram Moolenaar \ ] 158bffba7f7SBram Moolenaar call assert_equal(expect, lines) 159bffba7f7SBram Moolenaar set list& listchars& wrap& 160bffba7f7SBram Moolenaar bw! 161bffba7f7SBram Moolenaarendfunc 16228686682SBram Moolenaar 16328686682SBram Moolenaar" Check that win_lines() works correctly with the number_only parameter=TRUE 16428686682SBram Moolenaar" should break early to optimize cost of drawing, but needs to make sure 16528686682SBram Moolenaar" that the number column is correctly highlighted. 16628686682SBram Moolenaarfunc Test_scroll_CursorLineNr_update() 16728686682SBram Moolenaar CheckScreendump 16828686682SBram Moolenaar 16928686682SBram Moolenaar let lines =<< trim END 17028686682SBram Moolenaar hi CursorLineNr ctermfg=73 ctermbg=236 17128686682SBram Moolenaar set nu rnu cursorline cursorlineopt=number 17228686682SBram Moolenaar exe ":norm! o\<esc>110ia\<esc>" 17328686682SBram Moolenaar END 17428686682SBram Moolenaar let filename = 'Xdrawscreen' 17528686682SBram Moolenaar call writefile(lines, filename) 17628686682SBram Moolenaar let buf = RunVimInTerminal('-S '.filename, #{rows: 5, cols: 50}) 17728686682SBram Moolenaar call term_sendkeys(buf, "k") 1786a2c5a7dSBram Moolenaar call TermWait(buf) 17928686682SBram Moolenaar call VerifyScreenDump(buf, 'Test_winline_rnu', {}) 18028686682SBram Moolenaar 18128686682SBram Moolenaar " clean up 18228686682SBram Moolenaar call StopVimInTerminal(buf) 18328686682SBram Moolenaar call delete(filename) 18428686682SBram Moolenaarendfunc 1850efd1bdcSBram Moolenaar 1860efd1bdcSBram Moolenaar" check a long file name does not result in the hit-enter prompt 1870efd1bdcSBram Moolenaarfunc Test_edit_long_file_name() 1880efd1bdcSBram Moolenaar CheckScreendump 1890efd1bdcSBram Moolenaar 1906e43b30aSBram Moolenaar let longName = 'x'->repeat(min([&columns, 255])) 1910efd1bdcSBram Moolenaar call writefile([], longName) 1920efd1bdcSBram Moolenaar let buf = RunVimInTerminal('-N -u NONE ' .. longName, #{rows: 8}) 1930efd1bdcSBram Moolenaar 1940efd1bdcSBram Moolenaar call VerifyScreenDump(buf, 'Test_long_file_name_1', {}) 1950efd1bdcSBram Moolenaar 1960efd1bdcSBram Moolenaar " clean up 1970efd1bdcSBram Moolenaar call StopVimInTerminal(buf) 1980efd1bdcSBram Moolenaar call delete(longName) 1990efd1bdcSBram Moolenaarendfunc 2000efd1bdcSBram Moolenaar 20132ee6277SBram Moolenaarfunc Test_unprintable_fileformats() 20232ee6277SBram Moolenaar CheckScreendump 20332ee6277SBram Moolenaar 20432ee6277SBram Moolenaar call writefile(["unix\r", "two"], 'Xunix.txt') 20532ee6277SBram Moolenaar call writefile(["mac\r", "two"], 'Xmac.txt') 20632ee6277SBram Moolenaar let lines =<< trim END 20732ee6277SBram Moolenaar edit Xunix.txt 20832ee6277SBram Moolenaar split Xmac.txt 20932ee6277SBram Moolenaar edit ++ff=mac 21032ee6277SBram Moolenaar END 21132ee6277SBram Moolenaar let filename = 'Xunprintable' 21232ee6277SBram Moolenaar call writefile(lines, filename) 21332ee6277SBram Moolenaar let buf = RunVimInTerminal('-S '.filename, #{rows: 9, cols: 50}) 21432ee6277SBram Moolenaar call VerifyScreenDump(buf, 'Test_display_unprintable_01', {}) 21532ee6277SBram Moolenaar call term_sendkeys(buf, "\<C-W>\<C-W>\<C-L>") 21632ee6277SBram Moolenaar call VerifyScreenDump(buf, 'Test_display_unprintable_02', {}) 21732ee6277SBram Moolenaar 21832ee6277SBram Moolenaar " clean up 21932ee6277SBram Moolenaar call StopVimInTerminal(buf) 22032ee6277SBram Moolenaar call delete('Xunix.txt') 22132ee6277SBram Moolenaar call delete('Xmac.txt') 22232ee6277SBram Moolenaar call delete(filename) 22332ee6277SBram Moolenaarendfunc 224f8992d47SBram Moolenaar 225f8992d47SBram Moolenaar" Test for scrolling that modifies buffer during visual block 226f8992d47SBram Moolenaarfunc Test_visual_block_scroll() 227f8992d47SBram Moolenaar CheckScreendump 228f8992d47SBram Moolenaar 229f8992d47SBram Moolenaar let lines =<< trim END 230f8992d47SBram Moolenaar source $VIMRUNTIME/plugin/matchparen.vim 231f8992d47SBram Moolenaar set scrolloff=1 232f8992d47SBram Moolenaar call setline(1, ['a', 'b', 'c', 'd', 'e', '', '{', '}', '{', 'f', 'g', '}']) 233f8992d47SBram Moolenaar call cursor(5, 1) 234f8992d47SBram Moolenaar END 235f8992d47SBram Moolenaar 236f8992d47SBram Moolenaar let filename = 'Xvisualblockmodifiedscroll' 237f8992d47SBram Moolenaar call writefile(lines, filename) 238f8992d47SBram Moolenaar 239f8992d47SBram Moolenaar let buf = RunVimInTerminal('-S '.filename, #{rows: 7}) 240f8992d47SBram Moolenaar call term_sendkeys(buf, "V\<C-D>\<C-D>") 241f8992d47SBram Moolenaar 242f8992d47SBram Moolenaar call VerifyScreenDump(buf, 'Test_display_visual_block_scroll', {}) 243f8992d47SBram Moolenaar 244f8992d47SBram Moolenaar call StopVimInTerminal(buf) 245f8992d47SBram Moolenaar call delete(filename) 246f8992d47SBram Moolenaarendfunc 2476d91bcb4SBram Moolenaar 2489dc1917fSBram Moolenaarfunc Test_display_scroll_at_topline() 2499dc1917fSBram Moolenaar CheckScreendump 2509dc1917fSBram Moolenaar 2519dc1917fSBram Moolenaar let buf = RunVimInTerminal('', #{cols: 20}) 2529dc1917fSBram Moolenaar call term_sendkeys(buf, ":call setline(1, repeat('a', 21))\<CR>") 253733d259aSBram Moolenaar call TermWait(buf) 2549dc1917fSBram Moolenaar call term_sendkeys(buf, "O\<Esc>") 2559dc1917fSBram Moolenaar call VerifyScreenDump(buf, 'Test_display_scroll_at_topline', #{rows: 4}) 2569dc1917fSBram Moolenaar 2579dc1917fSBram Moolenaar call StopVimInTerminal(buf) 2589dc1917fSBram Moolenaarendfunc 2599dc1917fSBram Moolenaar 260a98f8a23SBram Moolenaar" Test for 'eob' (EndOfBuffer) item in 'fillchars' 261a98f8a23SBram Moolenaarfunc Test_eob_fillchars() 262a98f8a23SBram Moolenaar " default value 263a98f8a23SBram Moolenaar call assert_match('eob:\~', &fillchars) 264a98f8a23SBram Moolenaar " invalid values 265a98f8a23SBram Moolenaar call assert_fails(':set fillchars=eob:', 'E474:') 266a98f8a23SBram Moolenaar call assert_fails(':set fillchars=eob:xy', 'E474:') 267a98f8a23SBram Moolenaar call assert_fails(':set fillchars=eob:\255', 'E474:') 268a98f8a23SBram Moolenaar call assert_fails(':set fillchars=eob:<ff>', 'E474:') 269a98f8a23SBram Moolenaar " default is ~ 270a98f8a23SBram Moolenaar new 2712cec027aSBram Moolenaar redraw 272a98f8a23SBram Moolenaar call assert_equal('~', Screenline(2)) 273a98f8a23SBram Moolenaar set fillchars=eob:+ 2742cec027aSBram Moolenaar redraw 275a98f8a23SBram Moolenaar call assert_equal('+', Screenline(2)) 276a98f8a23SBram Moolenaar set fillchars=eob:\ 2772cec027aSBram Moolenaar redraw 278a98f8a23SBram Moolenaar call assert_equal(' ', nr2char(screenchar(2, 1))) 279a98f8a23SBram Moolenaar set fillchars& 280a98f8a23SBram Moolenaar close 281a98f8a23SBram Moolenaarendfunc 282a98f8a23SBram Moolenaar 2833aca5a6fSBram Moolenaar" Test for 'foldopen', 'foldclose' and 'foldsep' in 'fillchars' 2843aca5a6fSBram Moolenaarfunc Test_fold_fillchars() 2853aca5a6fSBram Moolenaar new 2863aca5a6fSBram Moolenaar set fdc=2 foldenable foldmethod=manual 2873aca5a6fSBram Moolenaar call setline(1, ['one', 'two', 'three', 'four', 'five']) 2883aca5a6fSBram Moolenaar 2,4fold 2893aca5a6fSBram Moolenaar " First check for the default setting for a closed fold 2903aca5a6fSBram Moolenaar let lines = ScreenLines([1, 3], 8) 2913aca5a6fSBram Moolenaar let expected = [ 2923aca5a6fSBram Moolenaar \ ' one ', 2933aca5a6fSBram Moolenaar \ '+ +-- 3', 2943aca5a6fSBram Moolenaar \ ' five ' 2953aca5a6fSBram Moolenaar \ ] 2963aca5a6fSBram Moolenaar call assert_equal(expected, lines) 2973aca5a6fSBram Moolenaar normal 2Gzo 2983aca5a6fSBram Moolenaar " check the characters for an open fold 2993aca5a6fSBram Moolenaar let lines = ScreenLines([1, 5], 8) 3003aca5a6fSBram Moolenaar let expected = [ 3013aca5a6fSBram Moolenaar \ ' one ', 3023aca5a6fSBram Moolenaar \ '- two ', 3033aca5a6fSBram Moolenaar \ '| three ', 3043aca5a6fSBram Moolenaar \ '| four ', 3053aca5a6fSBram Moolenaar \ ' five ' 3063aca5a6fSBram Moolenaar \ ] 3073aca5a6fSBram Moolenaar call assert_equal(expected, lines) 3083aca5a6fSBram Moolenaar 3093aca5a6fSBram Moolenaar " change the setting 3103aca5a6fSBram Moolenaar set fillchars=vert:\|,fold:-,eob:~,foldopen:[,foldclose:],foldsep:- 3113aca5a6fSBram Moolenaar 3123aca5a6fSBram Moolenaar " check the characters for an open fold 3133aca5a6fSBram Moolenaar let lines = ScreenLines([1, 5], 8) 3143aca5a6fSBram Moolenaar let expected = [ 3153aca5a6fSBram Moolenaar \ ' one ', 3163aca5a6fSBram Moolenaar \ '[ two ', 3173aca5a6fSBram Moolenaar \ '- three ', 3183aca5a6fSBram Moolenaar \ '- four ', 3193aca5a6fSBram Moolenaar \ ' five ' 3203aca5a6fSBram Moolenaar \ ] 3213aca5a6fSBram Moolenaar call assert_equal(expected, lines) 3223aca5a6fSBram Moolenaar 3233aca5a6fSBram Moolenaar " check the characters for a closed fold 3243aca5a6fSBram Moolenaar normal 2Gzc 3253aca5a6fSBram Moolenaar let lines = ScreenLines([1, 3], 8) 3263aca5a6fSBram Moolenaar let expected = [ 3273aca5a6fSBram Moolenaar \ ' one ', 3283aca5a6fSBram Moolenaar \ '] +-- 3', 3293aca5a6fSBram Moolenaar \ ' five ' 3303aca5a6fSBram Moolenaar \ ] 3313aca5a6fSBram Moolenaar call assert_equal(expected, lines) 3323aca5a6fSBram Moolenaar 3333aca5a6fSBram Moolenaar %bw! 3343aca5a6fSBram Moolenaar set fillchars& fdc& foldmethod& foldenable& 3353aca5a6fSBram Moolenaarendfunc 3363aca5a6fSBram Moolenaar 337*a06e345aSBram Moolenaarfunc Test_display_linebreak_breakat() 338*a06e345aSBram Moolenaar new 339*a06e345aSBram Moolenaar vert resize 25 340*a06e345aSBram Moolenaar let _breakat = &breakat 341*a06e345aSBram Moolenaar setl signcolumn=yes linebreak breakat=) showbreak=+\ 342*a06e345aSBram Moolenaar call setline(1, repeat('x', winwidth(0) - 2) .. ')abc') 343*a06e345aSBram Moolenaar let lines = ScreenLines([1, 2], 25) 344*a06e345aSBram Moolenaar let expected = [ 345*a06e345aSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxx', 346*a06e345aSBram Moolenaar \ ' + )abc ' 347*a06e345aSBram Moolenaar \ ] 348*a06e345aSBram Moolenaar call assert_equal(expected, lines) 349*a06e345aSBram Moolenaar %bw! 350*a06e345aSBram Moolenaar let &breakat=_breakat 351*a06e345aSBram Moolenaarendfunc 352*a06e345aSBram Moolenaar 353*a06e345aSBram Moolenaar 3546d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 355