Mercurial > vim
view src/testdir/test_breakindent.vim @ 10627:fb9c28aca006 v8.0.0203
patch 8.0.0203: order of complication flags is sometimes wrong
commit https://github.com/vim/vim/commit/6e78e27b8aace2e4c2412bfc4de6567509258d28
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Jan 17 19:20:15 2017 +0100
patch 8.0.0203: order of complication flags is sometimes wrong
Problem: Order of complication flags is sometimes wrong.
Solution: Put interface-specific flags before ALL_CFLAGS. (idea by Yousong
Zhou, closes #1100)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 17 Jan 2017 19:30:04 +0100 |
parents | 957a1d560bda |
children | 678edb254216 |
line wrap: on
line source
" Test for breakindent " " Note: if you get strange failures when adding new tests, it might be that " while the test is run, the breakindent cacheing gets in its way. " It helps to change the tabastop setting and force a redraw (e.g. see " Test_breakindent08()) if !exists('+breakindent') finish endif let s:input ="\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP" function s:screenline(lnum, width) abort " always get 4 screen lines redraw! let line = [] for j in range(3) for c in range(1, a:width) call add(line, nr2char(screenchar(a:lnum+j, c))) endfor call add(line, "\n") endfor return join(line, '') endfunction function s:testwindows(...) 10new vsp vert resize 20 setl ts=4 sw=4 sts=4 breakindent put =s:input if a:0 exe a:1 endif endfunction function s:close_windows(...) bw! if a:0 exe a:1 endif unlet! g:line g:expect endfunction function Test_breakindent01() " simple breakindent test call s:testwindows('setl briopt=min:0') let g:line=s:screenline(line('.'),8) let g:expect=" abcd\n qrst\n GHIJ\n" call assert_equal(g:expect, g:line) call s:close_windows() endfunction function Test_breakindent02() " simple breakindent test with showbreak set call s:testwindows('setl briopt=min:0 sbr=>>') let g:line=s:screenline(line('.'),8) let g:expect=" abcd\n >>qr\n >>EF\n" call assert_equal(g:expect, g:line) call s:close_windows('set sbr=') endfunction function Test_breakindent03() " simple breakindent test with showbreak set and briopt including sbr call s:testwindows('setl briopt=sbr,min:0 sbr=++') let g:line=s:screenline(line('.'),8) let g:expect=" abcd\n++ qrst\n++ GHIJ\n" call assert_equal(g:expect, g:line) " clean up call s:close_windows('set sbr=') endfunction function Test_breakindent04() " breakindent set with min width 18 call s:testwindows('setl sbr= briopt=min:18') let g:line=s:screenline(line('.'),8) let g:expect=" abcd\n qrstuv\n IJKLMN\n" call assert_equal(g:expect, g:line) " clean up call s:close_windows('set sbr=') endfunction function Test_breakindent05() " breakindent set and shift by 2 call s:testwindows('setl briopt=shift:2,min:0') let g:line=s:screenline(line('.'),8) let g:expect=" abcd\n qr\n EF\n" call assert_equal(g:expect, g:line) call s:close_windows() endfunction function Test_breakindent06() " breakindent set and shift by -1 call s:testwindows('setl briopt=shift:-1,min:0') let g:line=s:screenline(line('.'),8) let g:expect=" abcd\n qrstu\n HIJKL\n" call assert_equal(g:expect, g:line) call s:close_windows() endfunction function Test_breakindent07() " breakindent set and shift by 1, Number set sbr=? and briopt:sbr call s:testwindows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n') let g:line=s:screenline(line('.'),10) let g:expect=" 2 ab\n? m\n? x\n" call assert_equal(g:expect, g:line) " clean up call s:close_windows('set sbr= cpo-=n') endfunction function Test_breakindent07a() " breakindent set and shift by 1, Number set sbr=? and briopt:sbr call s:testwindows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4') let g:line=s:screenline(line('.'),10) let g:expect=" 2 ab\n ? m\n ? x\n" call assert_equal(g:expect, g:line) " clean up call s:close_windows('set sbr=') endfunction function Test_breakindent08() " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr call s:testwindows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4') " make sure, cache is invalidated! set ts=8 redraw! set ts=4 redraw! let g:line=s:screenline(line('.'),10) let g:expect=" 2 ^Iabcd\n# opq\n# BCD\n" call assert_equal(g:expect, g:line) call s:close_windows('set sbr= cpo-=n') endfunction function Test_breakindent08a() " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr call s:testwindows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list') let g:line=s:screenline(line('.'),10) let g:expect=" 2 ^Iabcd\n # opq\n # BCD\n" call assert_equal(g:expect, g:line) call s:close_windows('set sbr=') endfunction function Test_breakindent09() " breakindent set and shift by 1, Number and list set sbr=# call s:testwindows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list') let g:line=s:screenline(line('.'),10) let g:expect=" 2 ^Iabcd\n #op\n #AB\n" call assert_equal(g:expect, g:line) call s:close_windows('set sbr=') endfunction function Test_breakindent10() " breakindent set, Number set sbr=~ call s:testwindows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0') " make sure, cache is invalidated! set ts=8 redraw! set ts=4 redraw! let g:line=s:screenline(line('.'),10) let g:expect=" 2 ab\n~ mn\n~ yz\n" call assert_equal(g:expect, g:line) call s:close_windows('set sbr= cpo-=n') endfunction function Test_breakindent11() " test strdisplaywidth() call s:testwindows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4') let text=getline(2) let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times call assert_equal(width, strdisplaywidth(text)) call s:close_windows('set sbr=') endfunction function Test_breakindent12() " test breakindent with long indent let s:input="\t\t\t\t\t{" call s:testwindows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>-') let g:line=s:screenline(2,16) let g:expect=" 2 >--->--->--->\n ---{ \n~ \n" call assert_equal(g:expect, g:line) call s:close_windows('set nuw=4 listchars=') endfunction function Test_breakindent13() let s:input="" call s:testwindows('setl breakindent briopt=min:10 ts=8') vert resize 20 call setline(1, [" a\tb\tc\td\te", " z y x w v"]) 1 norm! fbgj"ayl 2 norm! fygj"byl call assert_equal('d', @a) call assert_equal('w', @b) call s:close_windows() endfunction function Test_breakindent14() let s:input="" call s:testwindows('setl breakindent briopt= ts=8') vert resize 30 norm! 3a1234567890 norm! a abcde exec "norm! 0\<C-V>tex" let g:line=s:screenline(line('.'),8) let g:expect="e \n~ \n~ \n" call assert_equal(g:expect, g:line) call s:close_windows() endfunction function Test_breakindent15() let s:input="" call s:testwindows('setl breakindent briopt= ts=8 sw=8') vert resize 30 norm! 4a1234567890 exe "normal! >>\<C-V>3f0x" let g:line=s:screenline(line('.'),20) let g:expect=" 1234567890 \n~ \n~ \n" call assert_equal(g:expect, g:line) call s:close_windows() endfunction function Test_breakindent16() " Check that overlong lines are indented correctly. " TODO: currently it does not fail even when the bug is not fixed. let s:input="" call s:testwindows('setl breakindent briopt=min:0 ts=4') call setline(1, "\t".repeat("1234567890", 10)) resize 6 norm! 1gg$ redraw! let g:line=s:screenline(1,10) let g:expect=" 123456\n 789012\n 345678\n" call assert_equal(g:expect, g:line) let g:line=s:screenline(4,10) let g:expect=" 901234\n 567890\n 123456\n" call assert_equal(g:expect, g:line) call s:close_windows() endfunction