xref: /vim-8.2.3635/src/testdir/test_display.vim (revision a06e345a)
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