123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275 |
- " Test for breakindent
- "
- " Note: if you get strange failures when adding new tests, it might be that
- " while the test is run, the breakindent caching gets in its way.
- " It helps to change the tabstop setting and force a redraw (e.g. see
- " Test_breakindent08())
- source check.vim
- CheckOption breakindent
- source view_util.vim
- source screendump.vim
- func SetUp()
- let s:input ="\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP"
- endfunc
- func s:screen_lines(lnum, width) abort
- return ScreenLines([a:lnum, a:lnum + 2], a:width)
- endfunc
- func s:screen_lines2(lnums, lnume, width) abort
- return ScreenLines([a:lnums, a:lnume], a:width)
- endfunc
- func s:compare_lines(expect, actual)
- call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
- endfunc
- func s:test_windows(...)
- call NewWindow(10, 20)
- setl ts=4 sw=4 sts=4 breakindent
- put =s:input
- exe get(a:000, 0, '')
- endfunc
- func s:close_windows(...)
- call CloseWindow()
- exe get(a:000, 0, '')
- endfunc
- func Test_breakindent01()
- " simple breakindent test
- call s:test_windows('setl briopt=min:0')
- let lines = s:screen_lines(line('.'),8)
- let expect = [
- \ " abcd",
- \ " qrst",
- \ " GHIJ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows()
- endfunc
- func Test_breakindent01_vartabs()
- " like 01 but with vartabs feature
- if !has("vartabs")
- return
- endif
- call s:test_windows('setl briopt=min:0 vts=4')
- let lines = s:screen_lines(line('.'),8)
- let expect = [
- \ " abcd",
- \ " qrst",
- \ " GHIJ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set vts&')
- endfunc
- func Test_breakindent02()
- " simple breakindent test with showbreak set
- set sbr=>>
- call s:test_windows('setl briopt=min:0 sbr=')
- let lines = s:screen_lines(line('.'),8)
- let expect = [
- \ " abcd",
- \ " >>qr",
- \ " >>EF",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr=')
- endfunc
- func Test_breakindent02_vartabs()
- if !has("vartabs")
- return
- endif
- " simple breakindent test with showbreak set
- call s:test_windows('setl briopt=min:0 sbr=>> vts=4')
- let lines = s:screen_lines(line('.'), 8)
- let expect = [
- \ " abcd",
- \ " >>qr",
- \ " >>EF",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr= vts&')
- endfunc
- func Test_breakindent03()
- " simple breakindent test with showbreak set and briopt including sbr
- call s:test_windows('setl briopt=sbr,min:0 sbr=++')
- let lines = s:screen_lines(line('.'), 8)
- let expect=[
- \ " abcd",
- \ "++ qrst",
- \ "++ GHIJ",
- \ ]
- call s:compare_lines(expect, lines)
- " clean up
- call s:close_windows('set sbr=')
- endfunc
- func Test_breakindent03_vartabs()
- " simple breakindent test with showbreak set and briopt including sbr
- if !has("vartabs")
- return
- endif
- call s:test_windows('setl briopt=sbr,min:0 sbr=++ vts=4')
- let lines = s:screen_lines(line('.'), 8)
- let expect = [
- \ " abcd",
- \ "++ qrst",
- \ "++ GHIJ",
- \ ]
- call s:compare_lines(expect, lines)
- " clean up
- call s:close_windows('set sbr= vts&')
- endfunc
- func Test_breakindent04()
- " breakindent set with min width 18
- set sbr=<<<
- call s:test_windows('setl sbr=NONE briopt=min:18')
- let lines = s:screen_lines(line('.'), 8)
- let expect = [
- \ " abcd",
- \ " qrstuv",
- \ " IJKLMN",
- \ ]
- call s:compare_lines(expect, lines)
- " clean up
- call s:close_windows('set sbr=')
- set sbr=
- endfunc
- func Test_breakindent04_vartabs()
- " breakindent set with min width 18
- if !has("vartabs")
- return
- endif
- call s:test_windows('setl sbr= briopt=min:18 vts=4')
- let lines = s:screen_lines(line('.'), 8)
- let expect = [
- \ " abcd",
- \ " qrstuv",
- \ " IJKLMN",
- \ ]
- call s:compare_lines(expect, lines)
- " clean up
- call s:close_windows('set sbr= vts&')
- endfunc
- func Test_breakindent05()
- " breakindent set and shift by 2
- call s:test_windows('setl briopt=shift:2,min:0')
- let lines = s:screen_lines(line('.'),8)
- let expect = [
- \ " abcd",
- \ " qr",
- \ " EF",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows()
- endfunc
- func Test_breakindent05_vartabs()
- " breakindent set and shift by 2
- if !has("vartabs")
- return
- endif
- call s:test_windows('setl briopt=shift:2,min:0 vts=4')
- let lines = s:screen_lines(line('.'),8)
- let expect = [
- \ " abcd",
- \ " qr",
- \ " EF",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set vts&')
- endfunc
- func Test_breakindent06()
- " breakindent set and shift by -1
- call s:test_windows('setl briopt=shift:-1,min:0')
- let lines = s:screen_lines(line('.'),8)
- let expect = [
- \ " abcd",
- \ " qrstu",
- \ " HIJKL",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows()
- endfunc
- func Test_breakindent06_vartabs()
- " breakindent set and shift by -1
- if !has("vartabs")
- return
- endif
- call s:test_windows('setl briopt=shift:-1,min:0 vts=4')
- let lines = s:screen_lines(line('.'),8)
- let expect = [
- \ " abcd",
- \ " qrstu",
- \ " HIJKL",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set vts&')
- endfunc
- func Test_breakindent07()
- " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
- call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n')
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ab",
- \ "? m",
- \ "? x",
- \ ]
- call s:compare_lines(expect, lines)
- " clean up
- call s:close_windows('set sbr= cpo-=n')
- endfunc
- func Test_breakindent07_vartabs()
- if !has("vartabs")
- return
- endif
- " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
- call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n vts=4')
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ab",
- \ "? m",
- \ "? x",
- \ ]
- call s:compare_lines(expect, lines)
- " clean up
- call s:close_windows('set sbr= cpo-=n vts&')
- endfunc
- func Test_breakindent07a()
- " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
- call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4')
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ab",
- \ " ? m",
- \ " ? x",
- \ ]
- call s:compare_lines(expect, lines)
- " clean up
- call s:close_windows('set sbr=')
- endfunc
- func Test_breakindent07a_vartabs()
- if !has("vartabs")
- return
- endif
- " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
- call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 vts=4')
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ab",
- \ " ? m",
- \ " ? x",
- \ ]
- call s:compare_lines(expect, lines)
- " clean up
- call s:close_windows('set sbr= vts&')
- endfunc
- func Test_breakindent08()
- " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
- call s:test_windows('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 lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ^Iabcd",
- \ "# opq",
- \ "# BCD",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr= cpo-=n')
- endfunc
- func Test_breakindent08_vartabs()
- if !has("vartabs")
- return
- endif
- " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
- call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4 vts=4')
- " make sure, cache is invalidated!
- set ts=8
- redraw!
- set ts=4
- redraw!
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ^Iabcd",
- \ "# opq",
- \ "# BCD",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr= cpo-=n vts&')
- endfunc
- func Test_breakindent08a()
- " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
- call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list')
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ^Iabcd",
- \ " # opq",
- \ " # BCD",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr=')
- endfunc
- func Test_breakindent08a_vartabs()
- if !has("vartabs")
- return
- endif
- " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
- call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list vts=4')
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ^Iabcd",
- \ " # opq",
- \ " # BCD",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr= vts&')
- endfunc
- func Test_breakindent09()
- " breakindent set and shift by 1, Number and list set sbr=#
- call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list')
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ^Iabcd",
- \ " #op",
- \ " #AB",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr=')
- endfunc
- func Test_breakindent09_vartabs()
- if !has("vartabs")
- return
- endif
- " breakindent set and shift by 1, Number and list set sbr=#
- call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list vts=4')
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ^Iabcd",
- \ " #op",
- \ " #AB",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr= vts&')
- endfunc
- func Test_breakindent10()
- " breakindent set, Number set sbr=~
- call s:test_windows('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 lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ab",
- \ "~ mn",
- \ "~ yz",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr= cpo-=n')
- endfunc
- func Test_breakindent10_vartabs()
- if !has("vartabs")
- return
- endif
- " breakindent set, Number set sbr=~
- call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0 vts=4')
- " make sure, cache is invalidated!
- set ts=8
- redraw!
- set ts=4
- redraw!
- let lines = s:screen_lines(line('.'),10)
- let expect = [
- \ " 2 ab",
- \ "~ mn",
- \ "~ yz",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set sbr= cpo-=n vts&')
- endfunc
- func Test_breakindent11()
- " test strdisplaywidth()
- call s:test_windows('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=')
- call assert_equal(4, strdisplaywidth("\t", 4))
- endfunc
- func Test_breakindent11_vartabs()
- if !has("vartabs")
- return
- endif
- " test strdisplaywidth()
- call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4')
- let text = getline(2)
- let width = strlen(text[1:]) + 2->indent() + strlen(&sbr) * 3 " text wraps 3 times
- call assert_equal(width, text->strdisplaywidth())
- call s:close_windows('set sbr= vts&')
- endfunc
- func Test_breakindent12()
- " test breakindent with long indent
- let s:input="\t\t\t\t\t{"
- call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>-')
- let lines = s:screen_lines(2,16)
- let expect = [
- \ " 2 >--->--->--->",
- \ " ---{ ",
- \ "~ ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set nuw=4 listchars&')
- endfunc
- func Test_breakindent12_vartabs()
- if !has("vartabs")
- return
- endif
- " test breakindent with long indent
- let s:input = "\t\t\t\t\t{"
- call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>- vts=4')
- let lines = s:screen_lines(2,16)
- let expect = [
- \ " 2 >--->--->--->",
- \ " ---{ ",
- \ "~ ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set nuw=4 listchars& vts&')
- endfunc
- func Test_breakindent13()
- let s:input = ""
- call s:test_windows('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()
- endfunc
- func Test_breakindent13_vartabs()
- if !has("vartabs")
- return
- endif
- let s:input = ""
- call s:test_windows('setl breakindent briopt=min:10 ts=8 vts=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('set vts&')
- endfunc
- func Test_breakindent14()
- let s:input = ""
- call s:test_windows('setl breakindent briopt= ts=8')
- vert resize 30
- norm! 3a1234567890
- norm! a abcde
- exec "norm! 0\<C-V>tex"
- let lines = s:screen_lines(line('.'),8)
- let expect = [
- \ "e ",
- \ "~ ",
- \ "~ ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows()
- endfunc
- func Test_breakindent14_vartabs()
- if !has("vartabs")
- return
- endif
- let s:input = ""
- call s:test_windows('setl breakindent briopt= ts=8 vts=8')
- vert resize 30
- norm! 3a1234567890
- norm! a abcde
- exec "norm! 0\<C-V>tex"
- let lines = s:screen_lines(line('.'),8)
- let expect = [
- \ "e ",
- \ "~ ",
- \ "~ ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set vts&')
- endfunc
- func Test_breakindent15()
- let s:input = ""
- call s:test_windows('setl breakindent briopt= ts=8 sw=8')
- vert resize 30
- norm! 4a1234567890
- exe "normal! >>\<C-V>3f0x"
- let lines = s:screen_lines(line('.'),20)
- let expect = [
- \ " 1234567890 ",
- \ "~ ",
- \ "~ ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows()
- endfunc
- func Test_breakindent15_vartabs()
- if !has("vartabs")
- return
- endif
- let s:input = ""
- call s:test_windows('setl breakindent briopt= ts=8 sw=8 vts=8')
- vert resize 30
- norm! 4a1234567890
- exe "normal! >>\<C-V>3f0x"
- let lines = s:screen_lines(line('.'),20)
- let expect = [
- \ " 1234567890 ",
- \ "~ ",
- \ "~ ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set vts&')
- endfunc
- func Test_breakindent16()
- " Check that overlong lines are indented correctly.
- let s:input = ""
- call s:test_windows('setl breakindent briopt=min:0 ts=4')
- call setline(1, "\t".repeat("1234567890", 10))
- resize 6
- norm! 1gg$
- redraw!
- let lines = s:screen_lines(1,10)
- let expect = [
- \ "<<< 789012",
- \ " 345678",
- \ " 901234",
- \ ]
- call s:compare_lines(expect, lines)
- let lines = s:screen_lines(4,10)
- let expect = [
- \ " 567890",
- \ " 123456",
- \ " 7890 ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows()
- endfunc
- func Test_breakindent16_vartabs()
- if !has("vartabs")
- return
- endif
- " Check that overlong lines are indented correctly.
- let s:input = ""
- call s:test_windows('setl breakindent briopt=min:0 ts=4 vts=4')
- call setline(1, "\t".repeat("1234567890", 10))
- resize 6
- norm! 1gg$
- redraw!
- let lines = s:screen_lines(1,10)
- let expect = [
- \ "<<< 789012",
- \ " 345678",
- \ " 901234",
- \ ]
- call s:compare_lines(expect, lines)
- let lines = s:screen_lines(4,10)
- let expect = [
- \ " 567890",
- \ " 123456",
- \ " 7890 ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set vts&')
- endfunc
- func Test_breakindent17_vartabs()
- if !has("vartabs")
- return
- endif
- let s:input = ""
- call s:test_windows('setl breakindent list listchars=tab:<-> showbreak=+++')
- call setline(1, "\t" . repeat('a', 63))
- vert resize 30
- norm! 1gg$
- redraw!
- let lines = s:screen_lines(1, 30)
- let expect = [
- \ "<-->aaaaaaaaaaaaaaaaaaaaaaaaaa",
- \ " +++aaaaaaaaaaaaaaaaaaaaaaa",
- \ " +++aaaaaaaaaaaaaa ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set breakindent& list& listchars& showbreak&')
- endfunc
- func Test_breakindent18_vartabs()
- if !has("vartabs")
- return
- endif
- let s:input = ""
- call s:test_windows('setl breakindent list listchars=tab:<->')
- call setline(1, "\t" . repeat('a', 63))
- vert resize 30
- norm! 1gg$
- redraw!
- let lines = s:screen_lines(1, 30)
- let expect = [
- \ "<-->aaaaaaaaaaaaaaaaaaaaaaaaaa",
- \ " aaaaaaaaaaaaaaaaaaaaaaaaaa",
- \ " aaaaaaaaaaa ",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set breakindent& list& listchars&')
- endfunc
- func Test_breakindent19_sbr_nextpage()
- let s:input = ""
- call s:test_windows('setl breakindent briopt=shift:2,sbr,min:18 sbr=>')
- call setline(1, repeat('a', 200))
- norm! 1gg
- redraw!
- let lines = s:screen_lines(1, 20)
- let expect = [
- \ "aaaaaaaaaaaaaaaaaaaa",
- \ "> aaaaaaaaaaaaaaaaaa",
- \ "> aaaaaaaaaaaaaaaaaa",
- \ ]
- call s:compare_lines(expect, lines)
- " Scroll down one screen line
- setl scrolloff=5
- norm! 5gj
- let lines = s:screen_lines(1, 20)
- let expect = [
- \ "aaaaaaaaaaaaaaaaaaaa",
- \ "> aaaaaaaaaaaaaaaaaa",
- \ "> aaaaaaaaaaaaaaaaaa",
- \ ]
- call s:compare_lines(expect, lines)
- redraw!
- " moving the cursor doesn't change the text offset
- norm! l
- redraw!
- let lines = s:screen_lines(1, 20)
- call s:compare_lines(expect, lines)
- setl breakindent briopt=min:18 sbr=>
- norm! 5gj
- let lines = s:screen_lines(1, 20)
- let expect = [
- \ ">aaaaaaaaaaaaaaaaaaa",
- \ ">aaaaaaaaaaaaaaaaaaa",
- \ ">aaaaaaaaaaaaaaaaaaa",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set breakindent& briopt& sbr&')
- endfunc
- func Test_breakindent20_cpo_n_nextpage()
- let s:input = ""
- call s:test_windows('setl breakindent briopt=min:14 cpo+=n number')
- call setline(1, repeat('abcdefghijklmnopqrst', 10))
- norm! 1gg
- redraw!
- let lines = s:screen_lines(1, 20)
- let expect = [
- \ " 1 abcdefghijklmnop",
- \ " qrstabcdefghijkl",
- \ " mnopqrstabcdefgh",
- \ ]
- call s:compare_lines(expect, lines)
- " Scroll down one screen line
- setl scrolloff=5
- norm! 6gj
- redraw!
- let lines = s:screen_lines(1, 20)
- let expect = [
- \ "<<< qrstabcdefghijkl",
- \ " mnopqrstabcdefgh",
- \ " ijklmnopqrstabcd",
- \ ]
- call s:compare_lines(expect, lines)
- setl briopt+=shift:2
- norm! 1gg
- let lines = s:screen_lines(1, 20)
- let expect = [
- \ " 1 abcdefghijklmnop",
- \ " qrstabcdefghij",
- \ " klmnopqrstabcd",
- \ ]
- call s:compare_lines(expect, lines)
- " Scroll down one screen line
- norm! 6gj
- let lines = s:screen_lines(1, 20)
- let expect = [
- \ "<<< qrstabcdefghij",
- \ " klmnopqrstabcd",
- \ " efghijklmnopqr",
- \ ]
- call s:compare_lines(expect, lines)
- call s:close_windows('set breakindent& briopt& cpo& number&')
- endfunc
- func Test_breakindent20_list()
- call s:test_windows('setl breakindent breakindentopt= linebreak')
- " default:
- call setline(1, [' 1. Congress shall make no law',
- \ ' 2.) Congress shall make no law',
- \ ' 3.] Congress shall make no law'])
- norm! 1gg
- redraw!
- let lines = s:screen_lines2(1, 6, 20)
- let expect = [
- \ " 1. Congress ",
- \ "shall make no law ",
- \ " 2.) Congress ",
- \ "shall make no law ",
- \ " 3.] Congress ",
- \ "shall make no law ",
- \ ]
- call s:compare_lines(expect, lines)
- " set minimum text width
- setl briopt=min:5
- redraw!
- let lines = s:screen_lines2(1, 6, 20)
- let expect = [
- \ " 1. Congress ",
- \ " shall make no law ",
- \ " 2.) Congress ",
- \ " shall make no law ",
- \ " 3.] Congress ",
- \ " shall make no law ",
- \ ]
- call s:compare_lines(expect, lines)
- " set additional handing indent
- setl briopt+=list:4
- redraw!
- let expect = [
- \ " 1. Congress ",
- \ " shall make no ",
- \ " law ",
- \ " 2.) Congress ",
- \ " shall make no ",
- \ " law ",
- \ " 3.] Congress ",
- \ " shall make no ",
- \ " law ",
- \ ]
- let lines = s:screen_lines2(1, 9, 20)
- call s:compare_lines(expect, lines)
- " reset linebreak option
- " Note: it indents by one additional
- " space, because of the leading space.
- setl linebreak&vim list listchars=eol:$,space:_
- redraw!
- let expect = [
- \ "__1.__Congress_shall",
- \ " _make_no_law$ ",
- \ "__2.)_Congress_shall",
- \ " _make_no_law$ ",
- \ "__3.]_Congress_shall",
- \ " _make_no_law$ ",
- \ ]
- let lines = s:screen_lines2(1, 6, 20)
- call s:compare_lines(expect, lines)
- " check formatlistpat indent
- setl briopt=min:5,list:-1
- setl linebreak list&vim listchars&vim
- let &l:flp = '^\s*\d\+\.\?[\]:)}\t ]\s*'
- redraw!
- let expect = [
- \ " 1. Congress ",
- \ " shall make no ",
- \ " law ",
- \ " 2.) Congress ",
- \ " shall make no ",
- \ " law ",
- \ " 3.] Congress ",
- \ " shall make no ",
- \ " law ",
- \ ]
- let lines = s:screen_lines2(1, 9, 20)
- call s:compare_lines(expect, lines)
- " check with TABs
- call setline(1, ["\t1.\tCongress shall make no law",
- \ "\t2.) Congress shall make no law",
- \ "\t3.] Congress shall make no law"])
- setl tabstop=4 list listchars=tab:<->
- norm! 1gg
- redraw!
- let expect = [
- \ "<-->1.<>Congress ",
- \ " shall make ",
- \ " no law ",
- \ "<-->2.) Congress ",
- \ " shall make ",
- \ " no law ",
- \ "<-->3.] Congress ",
- \ " shall make ",
- \ " no law ",
- \ ]
- let lines = s:screen_lines2(1, 9, 20)
- call s:compare_lines(expect, lines)
- setl tabstop=2 nolist
- redraw!
- let expect = [
- \ " 1. Congress ",
- \ " shall make no ",
- \ " law ",
- \ " 2.) Congress ",
- \ " shall make no ",
- \ " law ",
- \ " 3.] Congress ",
- \ " shall make no ",
- \ " law ",
- \ ]
- let lines = s:screen_lines2(1, 9, 20)
- call s:compare_lines(expect, lines)
- setl tabstop& list listchars=space:_
- redraw!
- let expect = [
- \ "^I1.^ICongress_ ",
- \ " shall_make_no_",
- \ " law ",
- \ "^I2.)_Congress_ ",
- \ " shall_make_no_",
- \ " law ",
- \ "^I3.]_Congress_ ",
- \ " shall_make_no_",
- \ " law ",
- \ ]
- let lines = s:screen_lines2(1, 9, 20)
- call s:compare_lines(expect, lines)
- " check formatlistpat indent with different list levels
- let &l:flp = '^\s*\(\*\|•\)\+\s\+'
- setl list&vim listchars&vim
- %delete _
- call setline(1, ['* Congress shall make no law',
- \ '••• Congress shall make no law',
- \ '**** Congress shall make no law'])
- norm! 1gg
- redraw!
- let expect = [
- \ "* Congress shall ",
- \ " make no law ",
- \ "••• Congress shall ",
- \ " make no law ",
- \ "**** Congress shall ",
- \ " make no law ",
- \ ]
- let lines = s:screen_lines2(1, 6, 20)
- call s:compare_lines(expect, lines)
- " check formatlistpat indent with different list level
- " showbreak and sbr
- setl briopt=min:5,sbr,list:-1
- setl showbreak=>
- redraw!
- let expect = [
- \ "* Congress shall ",
- \ "> make no law ",
- \ "••• Congress shall ",
- \ "> make no law ",
- \ "**** Congress shall ",
- \ "> make no law ",
- \ ]
- let lines = s:screen_lines2(1, 6, 20)
- call s:compare_lines(expect, lines)
- " check formatlistpat indent with different list level
- " showbreak sbr and shift
- setl briopt=min:5,sbr,list:-1,shift:2
- setl showbreak=>
- redraw!
- let expect = [
- \ "* Congress shall ",
- \ "> make no law ",
- \ "••• Congress shall ",
- \ "> make no law ",
- \ "**** Congress shall ",
- \ "> make no law ",
- \ ]
- let lines = s:screen_lines2(1, 6, 20)
- call s:compare_lines(expect, lines)
- " check breakindent works if breakindentopt=list:-1
- " for a non list content
- %delete _
- call setline(1, [' Congress shall make no law',
- \ ' Congress shall make no law',
- \ ' Congress shall make no law'])
- norm! 1gg
- setl briopt=min:5,list:-1
- setl showbreak=
- redraw!
- let expect = [
- \ " Congress shall ",
- \ " make no law ",
- \ " Congress shall ",
- \ " make no law ",
- \ " Congress shall ",
- \ " make no law ",
- \ ]
- let lines = s:screen_lines2(1, 6, 20)
- call s:compare_lines(expect, lines)
- call s:close_windows('set breakindent& briopt& linebreak& list& listchars& showbreak&')
- endfunc
- " The following used to crash Vim. This is fixed by 8.2.3391.
- " This is a regression introduced by 8.2.2903.
- func Test_window_resize_with_linebreak()
- new
- 53vnew
- setl linebreak
- setl showbreak=>>
- setl breakindent
- setl breakindentopt=shift:4
- call setline(1, "\naaaaaaaaa\n\na\naaaaa\n¯aaaaaaaaaa\naaaaaaaaaaaa\naaa\n\"a:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - aaaaaaaa\"\naaaaaaaa\n\"a")
- redraw!
- call assert_equal([" >>aa^@\"a: "], ScreenLines(2, 14))
- vertical resize 52
- redraw!
- call assert_equal([" >>aaa^@\"a:"], ScreenLines(2, 14))
- set linebreak& showbreak& breakindent& breakindentopt&
- %bw!
- endfunc
- func Test_cursor_position_with_showbreak()
- CheckScreendump
- let lines =<< trim END
- vim9script
- &signcolumn = 'yes'
- &showbreak = '++'
- &breakindentopt = 'shift:2'
- var leftcol: number = win_getid()->getwininfo()->get(0, {})->get('textoff')
- repeat('x', &columns - leftcol - 1)->setline(1)
- 'second line'->setline(2)
- END
- call writefile(lines, 'XscriptShowbreak', 'D')
- let buf = RunVimInTerminal('-S XscriptShowbreak', #{rows: 6})
- call term_sendkeys(buf, "AX")
- call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_1', {})
- " No line wraps, so changing 'showbreak' should lead to the same screen.
- call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal showbreak=+\<CR>")
- call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_1', {})
- " No line wraps, so setting 'breakindent' should lead to the same screen.
- call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal breakindent\<CR>")
- call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_1', {})
- " The first line now wraps because of "eol" in 'listchars'.
- call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal list\<CR>")
- call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_2', {})
- call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal nobreakindent\<CR>")
- call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_3', {})
- call StopVimInTerminal(buf)
- endfunc
- func Test_visual_starts_before_skipcol()
- CheckScreendump
- let lines =<< trim END
- 1new
- setlocal breakindent
- call setline(1, "\t" .. join(range(100)))
- END
- call writefile(lines, 'XvisualStartsBeforeSkipcol', 'D')
- let buf = RunVimInTerminal('-S XvisualStartsBeforeSkipcol', #{rows: 6})
- call term_sendkeys(buf, "v$")
- call VerifyScreenDump(buf, 'Test_visual_starts_before_skipcol_1', {})
- call term_sendkeys(buf, "\<Esc>:setlocal showbreak=+++\<CR>gv")
- call VerifyScreenDump(buf, 'Test_visual_starts_before_skipcol_2', {})
- call term_sendkeys(buf, "\<Esc>:setlocal breakindentopt+=sbr\<CR>gv")
- call VerifyScreenDump(buf, 'Test_visual_starts_before_skipcol_3', {})
- call term_sendkeys(buf, "\<Esc>:setlocal nobreakindent\<CR>gv")
- call VerifyScreenDump(buf, 'Test_visual_starts_before_skipcol_4', {})
- call StopVimInTerminal(buf)
- endfunc
- func Test_no_spurious_match()
- let s:input = printf('- y %s y %s', repeat('x', 50), repeat('x', 50))
- call s:test_windows('setl breakindent breakindentopt=list:-1 formatlistpat=^- hls')
- let @/ = '\%>3v[y]'
- redraw!
- call searchcount().total->assert_equal(1)
- " cleanup
- set hls&vim
- bwipeout!
- endfunc
- func Test_no_extra_indent()
- call s:test_windows('setl breakindent breakindentopt=list:-1,min:10')
- %d
- let &l:formatlistpat='^\s*\d\+\.\s\+'
- let text = 'word '
- let len = text->strcharlen()
- let line1 = text->repeat((winwidth(0) / len) * 2)
- let line2 = repeat(' ', 2) .. '1. ' .. line1
- call setline(1, [line2])
- redraw!
- " 1) matches formatlist pattern, so indent
- let expect = [
- \ " 1. word word word ",
- \ " word word word ",
- \ " word word ",
- \ "~ ",
- \ ]
- let lines = s:screen_lines2(1, 4, 20)
- call s:compare_lines(expect, lines)
- " 2) change formatlist pattern
- " -> indent adjusted
- let &l:formatlistpat='^\s*\d\+\.'
- let expect = [
- \ " 1. word word word ",
- \ " word word word ",
- \ " word word ",
- \ "~ ",
- \ ]
- let lines = s:screen_lines2(1, 4, 20)
- " 3) no local formatlist pattern,
- " so use global one -> indent
- let g_flp = &g:flp
- let &g:formatlistpat='^\s*\d\+\.\s\+'
- let &l:formatlistpat=''
- let expect = [
- \ " 1. word word word ",
- \ " word word word ",
- \ " word word ",
- \ "~ ",
- \ ]
- let lines = s:screen_lines2(1, 4, 20)
- call s:compare_lines(expect, lines)
- let &g:flp = g_flp
- let &l:formatlistpat='^\s*\d\+\.'
- " 4) add something in front, no additional indent
- norm! gg0
- exe ":norm! 5iword \<esc>"
- redraw!
- let expect = [
- \ "word word word word ",
- \ "word 1. word word ",
- \ "word word word word ",
- \ "word word ",
- \ "~ ",
- \ ]
- let lines = s:screen_lines2(1, 5, 20)
- call s:compare_lines(expect, lines)
- bwipeout!
- endfunc
- func Test_breakindent_column()
- call s:test_windows('setl breakindent breakindentopt=column:10')
- redraw!
- " 1) default: does not indent, too wide :(
- let expect = [
- \ " ",
- \ " abcdefghijklmnop",
- \ "qrstuvwxyzABCDEFGHIJ",
- \ "KLMNOP "
- \ ]
- let lines = s:screen_lines2(1, 4, 20)
- call s:compare_lines(expect, lines)
- " 2) lower min value, so that breakindent works
- setl breakindentopt+=min:5
- redraw!
- let expect = [
- \ " ",
- \ " abcdefghijklmnop",
- \ " qrstuvwxyz",
- \ " ABCDEFGHIJ",
- \ " KLMNOP "
- \ ]
- let lines = s:screen_lines2(1, 5, 20)
- " 3) set shift option -> no influence
- setl breakindentopt+=shift:5
- redraw!
- let expect = [
- \ " ",
- \ " abcdefghijklmnop",
- \ " qrstuvwxyz",
- \ " ABCDEFGHIJ",
- \ " KLMNOP "
- \ ]
- let lines = s:screen_lines2(1, 5, 20)
- call s:compare_lines(expect, lines)
- " 4) add showbreak value
- setl showbreak=++
- redraw!
- let expect = [
- \ " ",
- \ " abcdefghijklmnop",
- \ " ++qrstuvwx",
- \ " ++yzABCDEF",
- \ " ++GHIJKLMN",
- \ " ++OP "
- \ ]
- let lines = s:screen_lines2(1, 6, 20)
- call s:compare_lines(expect, lines)
- bwipeout!
- endfunc
- func Test_linebreak_list()
- " This was setting wlv.c_extra to NUL while wlv.p_extra is NULL
- filetype plugin on
- syntax enable
- edit! $VIMRUNTIME/doc/index.txt
- /v_P
- setlocal list
- setlocal listchars=tab:>-
- setlocal linebreak
- setlocal nowrap
- setlocal filetype=help
- redraw!
- bwipe!
- endfunc
- func Test_breakindent_change_display_uhex()
- call s:test_windows('setl briopt=min:0 list listchars=eol:$')
- redraw!
- let lines = s:screen_lines(line('.'), 20)
- let expect = [
- \ "^Iabcdefghijklmnopqr",
- \ " stuvwxyzABCDEFGHIJ",
- \ " KLMNOP$ "
- \ ]
- call s:compare_lines(expect, lines)
- set display+=uhex
- redraw!
- let lines = s:screen_lines(line('.'), 20)
- let expect = [
- \ "<09>abcdefghijklmnop",
- \ " qrstuvwxyzABCDEF",
- \ " GHIJKLMNOP$ "
- \ ]
- call s:compare_lines(expect, lines)
- set display&
- call s:close_windows()
- endfunc
- func Test_breakindent_list_split()
- 10new
- 61vsplit
- setlocal tabstop=8 breakindent list listchars=tab:<->,eol:$
- put =s:input
- 30vsplit
- setlocal listchars=eol:$
- let expect = [
- \ "^IabcdefghijklmnopqrstuvwxyzAB|<------>abcdefghijklmnopqrstuv",
- \ " CDEFGHIJKLMNOP$ | wxyzABCDEFGHIJKLMNOP$ ",
- \ "~ |~ "
- \ ]
- redraw!
- let lines = s:screen_lines(line('.'), 61)
- call s:compare_lines(expect, lines)
- wincmd p
- redraw!
- let lines = s:screen_lines(line('.'), 61)
- call s:compare_lines(expect, lines)
- bwipe!
- endfunc
- func Test_breakindent_min_with_signcol()
- call s:test_windows('setl briopt=min:15 signcolumn=yes')
- redraw!
- let expect = [
- \ " abcdefghijklmn",
- \ " opqrstuvwxyzABC",
- \ " DEFGHIJKLMNOP "
- \ ]
- let lines = s:screen_lines(line('.'), 20)
- call s:compare_lines(expect, lines)
- setl briopt=min:17
- redraw!
- let expect = [
- \ " abcdefghijklmn",
- \ " opqrstuvwxyzABCDE",
- \ " FGHIJKLMNOP "
- \ ]
- let lines = s:screen_lines(line('.'), 20)
- call s:compare_lines(expect, lines)
- setl briopt=min:19
- redraw!
- let expect = [
- \ " abcdefghijklmn",
- \ " opqrstuvwxyzABCDEF",
- \ " GHIJKLMNOP "
- \ ]
- let lines = s:screen_lines(line('.'), 20)
- call s:compare_lines(expect, lines)
- call s:close_windows()
- endfunc
- func Test_breakindent_with_double_width_wrap()
- 50vnew
- setlocal tabstop=8 breakindent nolist
- call setline(1, "\t" .. repeat('a', winwidth(0) - 9) .. '口口口')
- normal! $g0
- call assert_equal(2, winline())
- call assert_equal(9, wincol())
- bwipe!
- endfunc
- " vim: shiftwidth=2 sts=2 expandtab
|