16c896867SBram Moolenaar" Test for breakindent
26c896867SBram Moolenaar"
36c896867SBram Moolenaar" Note: if you get strange failures when adding new tests, it might be that
44b96df5aSBram Moolenaar" while the test is run, the breakindent caching gets in its way.
5544d3bc9SBram Moolenaar" It helps to change the tabstop setting and force a redraw (e.g. see
66c896867SBram Moolenaar" Test_breakindent08())
78c5a278fSBram Moolenaarsource check.vim
88c5a278fSBram MoolenaarCheckOption breakindent
96c896867SBram Moolenaar
10544d3bc9SBram Moolenaarsource view_util.vim
11544d3bc9SBram Moolenaar
126c896867SBram Moolenaarlet s:input ="\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP"
136c896867SBram Moolenaar
1404958cbaSBram Moolenaarfunc s:screen_lines(lnum, width) abort
15544d3bc9SBram Moolenaar  return ScreenLines([a:lnum, a:lnum + 2], a:width)
1604958cbaSBram Moolenaarendfunc
176c896867SBram Moolenaar
184a0b85adSChristian Brabandtfunc s:screen_lines2(lnums, lnume, width) abort
194a0b85adSChristian Brabandt  return ScreenLines([a:lnums, a:lnume], a:width)
204a0b85adSChristian Brabandtendfunc
214a0b85adSChristian Brabandt
2204958cbaSBram Moolenaarfunc s:compare_lines(expect, actual)
23544d3bc9SBram Moolenaar  call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
2404958cbaSBram Moolenaarendfunc
25544d3bc9SBram Moolenaar
2604958cbaSBram Moolenaarfunc s:test_windows(...)
27544d3bc9SBram Moolenaar  call NewWindow(10, 20)
286c896867SBram Moolenaar  setl ts=4 sw=4 sts=4 breakindent
296c896867SBram Moolenaar  put =s:input
30544d3bc9SBram Moolenaar  exe get(a:000, 0, '')
3104958cbaSBram Moolenaarendfunc
326c896867SBram Moolenaar
3304958cbaSBram Moolenaarfunc s:close_windows(...)
34544d3bc9SBram Moolenaar  call CloseWindow()
35544d3bc9SBram Moolenaar  exe get(a:000, 0, '')
3604958cbaSBram Moolenaarendfunc
376c896867SBram Moolenaar
3804958cbaSBram Moolenaarfunc Test_breakindent01()
396c896867SBram Moolenaar  " simple breakindent test
40544d3bc9SBram Moolenaar  call s:test_windows('setl briopt=min:0')
41544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),8)
42544d3bc9SBram Moolenaar  let expect = [
43544d3bc9SBram Moolenaar	\ "    abcd",
44544d3bc9SBram Moolenaar	\ "    qrst",
45544d3bc9SBram Moolenaar	\ "    GHIJ",
46544d3bc9SBram Moolenaar	\ ]
47544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
486c896867SBram Moolenaar  call s:close_windows()
4904958cbaSBram Moolenaarendfunc
506c896867SBram Moolenaar
5104958cbaSBram Moolenaarfunc Test_breakindent01_vartabs()
5204958cbaSBram Moolenaar  " like 01 but with vartabs feature
536d91bcb4SBram Moolenaar  CheckFeature vartabs
5404958cbaSBram Moolenaar  call s:test_windows('setl briopt=min:0 vts=4')
5504958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),8)
5604958cbaSBram Moolenaar  let expect = [
5704958cbaSBram Moolenaar	\ "    abcd",
5804958cbaSBram Moolenaar	\ "    qrst",
5904958cbaSBram Moolenaar	\ "    GHIJ",
6004958cbaSBram Moolenaar	\ ]
6104958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
6204958cbaSBram Moolenaar  call s:close_windows('set vts&')
6304958cbaSBram Moolenaarendfunc
6404958cbaSBram Moolenaar
6504958cbaSBram Moolenaarfunc Test_breakindent02()
666c896867SBram Moolenaar  " simple breakindent test with showbreak set
67ee85702cSBram Moolenaar  set sbr=>>
68ee85702cSBram Moolenaar  call s:test_windows('setl briopt=min:0 sbr=')
69544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),8)
70544d3bc9SBram Moolenaar  let expect = [
71544d3bc9SBram Moolenaar	\ "    abcd",
72544d3bc9SBram Moolenaar	\ "    >>qr",
73544d3bc9SBram Moolenaar	\ "    >>EF",
74544d3bc9SBram Moolenaar	\ ]
75544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
766c896867SBram Moolenaar  call s:close_windows('set sbr=')
7704958cbaSBram Moolenaarendfunc
786c896867SBram Moolenaar
7904958cbaSBram Moolenaarfunc Test_breakindent02_vartabs()
806d91bcb4SBram Moolenaar  CheckFeature vartabs
8104958cbaSBram Moolenaar  " simple breakindent test with showbreak set
8204958cbaSBram Moolenaar  call s:test_windows('setl briopt=min:0 sbr=>> vts=4')
8304958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),8)
8404958cbaSBram Moolenaar  let expect = [
8504958cbaSBram Moolenaar	\ "    abcd",
8604958cbaSBram Moolenaar	\ "    >>qr",
8704958cbaSBram Moolenaar	\ "    >>EF",
8804958cbaSBram Moolenaar	\ ]
8904958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
9004958cbaSBram Moolenaar  call s:close_windows('set sbr= vts&')
9104958cbaSBram Moolenaarendfunc
9204958cbaSBram Moolenaar
9304958cbaSBram Moolenaarfunc Test_breakindent03()
946c896867SBram Moolenaar  " simple breakindent test with showbreak set and briopt including sbr
95544d3bc9SBram Moolenaar  call s:test_windows('setl briopt=sbr,min:0 sbr=++')
96544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),8)
97544d3bc9SBram Moolenaar  let expect = [
98544d3bc9SBram Moolenaar	\ "    abcd",
99544d3bc9SBram Moolenaar	\ "++  qrst",
100544d3bc9SBram Moolenaar	\ "++  GHIJ",
101544d3bc9SBram Moolenaar	\ ]
102544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
1036c896867SBram Moolenaar  " clean up
1046c896867SBram Moolenaar  call s:close_windows('set sbr=')
10504958cbaSBram Moolenaarendfunc
1066c896867SBram Moolenaar
10704958cbaSBram Moolenaarfunc Test_breakindent03_vartabs()
10804958cbaSBram Moolenaar  " simple breakindent test with showbreak set and briopt including sbr
1096d91bcb4SBram Moolenaar  CheckFeature vartabs
11004958cbaSBram Moolenaar  call s:test_windows('setl briopt=sbr,min:0 sbr=++ vts=4')
11104958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),8)
11204958cbaSBram Moolenaar  let expect = [
11304958cbaSBram Moolenaar	\ "    abcd",
11404958cbaSBram Moolenaar	\ "++  qrst",
11504958cbaSBram Moolenaar	\ "++  GHIJ",
11604958cbaSBram Moolenaar	\ ]
11704958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
11804958cbaSBram Moolenaar  " clean up
11904958cbaSBram Moolenaar  call s:close_windows('set sbr= vts&')
12004958cbaSBram Moolenaarendfunc
12104958cbaSBram Moolenaar
12204958cbaSBram Moolenaarfunc Test_breakindent04()
1236c896867SBram Moolenaar  " breakindent set with min width 18
124ee85702cSBram Moolenaar  set sbr=<<<
125ee85702cSBram Moolenaar  call s:test_windows('setl sbr=NONE briopt=min:18')
126544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),8)
127544d3bc9SBram Moolenaar  let expect = [
128544d3bc9SBram Moolenaar	\ "    abcd",
129544d3bc9SBram Moolenaar	\ "  qrstuv",
130544d3bc9SBram Moolenaar	\ "  IJKLMN",
131544d3bc9SBram Moolenaar	\ ]
132544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
1336c896867SBram Moolenaar  " clean up
1346c896867SBram Moolenaar  call s:close_windows('set sbr=')
135ee85702cSBram Moolenaar  set sbr=
13604958cbaSBram Moolenaarendfunc
1376c896867SBram Moolenaar
13804958cbaSBram Moolenaarfunc Test_breakindent04_vartabs()
13904958cbaSBram Moolenaar  " breakindent set with min width 18
1406d91bcb4SBram Moolenaar  CheckFeature vartabs
14104958cbaSBram Moolenaar  call s:test_windows('setl sbr= briopt=min:18 vts=4')
14204958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),8)
14304958cbaSBram Moolenaar  let expect = [
14404958cbaSBram Moolenaar	\ "    abcd",
14504958cbaSBram Moolenaar	\ "  qrstuv",
14604958cbaSBram Moolenaar	\ "  IJKLMN",
14704958cbaSBram Moolenaar	\ ]
14804958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
14904958cbaSBram Moolenaar  " clean up
15004958cbaSBram Moolenaar  call s:close_windows('set sbr= vts&')
15104958cbaSBram Moolenaarendfunc
15204958cbaSBram Moolenaar
15304958cbaSBram Moolenaarfunc Test_breakindent05()
1546c896867SBram Moolenaar  " breakindent set and shift by 2
155544d3bc9SBram Moolenaar  call s:test_windows('setl briopt=shift:2,min:0')
156544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),8)
157544d3bc9SBram Moolenaar  let expect = [
158544d3bc9SBram Moolenaar	\ "    abcd",
159544d3bc9SBram Moolenaar	\ "      qr",
160544d3bc9SBram Moolenaar	\ "      EF",
161544d3bc9SBram Moolenaar	\ ]
162544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
1636c896867SBram Moolenaar  call s:close_windows()
16404958cbaSBram Moolenaarendfunc
1656c896867SBram Moolenaar
16604958cbaSBram Moolenaarfunc Test_breakindent05_vartabs()
16704958cbaSBram Moolenaar  " breakindent set and shift by 2
1686d91bcb4SBram Moolenaar  CheckFeature vartabs
16904958cbaSBram Moolenaar  call s:test_windows('setl briopt=shift:2,min:0 vts=4')
17004958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),8)
17104958cbaSBram Moolenaar  let expect = [
17204958cbaSBram Moolenaar	\ "    abcd",
17304958cbaSBram Moolenaar	\ "      qr",
17404958cbaSBram Moolenaar	\ "      EF",
17504958cbaSBram Moolenaar	\ ]
17604958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
17704958cbaSBram Moolenaar  call s:close_windows('set vts&')
17804958cbaSBram Moolenaarendfunc
17904958cbaSBram Moolenaar
18004958cbaSBram Moolenaarfunc Test_breakindent06()
1816c896867SBram Moolenaar  " breakindent set and shift by -1
182544d3bc9SBram Moolenaar  call s:test_windows('setl briopt=shift:-1,min:0')
183544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),8)
184544d3bc9SBram Moolenaar  let expect = [
185544d3bc9SBram Moolenaar	\ "    abcd",
186544d3bc9SBram Moolenaar	\ "   qrstu",
187544d3bc9SBram Moolenaar	\ "   HIJKL",
188544d3bc9SBram Moolenaar	\ ]
189544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
1906c896867SBram Moolenaar  call s:close_windows()
19104958cbaSBram Moolenaarendfunc
1926c896867SBram Moolenaar
19304958cbaSBram Moolenaarfunc Test_breakindent06_vartabs()
19404958cbaSBram Moolenaar  " breakindent set and shift by -1
1956d91bcb4SBram Moolenaar  CheckFeature vartabs
19604958cbaSBram Moolenaar  call s:test_windows('setl briopt=shift:-1,min:0 vts=4')
19704958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),8)
19804958cbaSBram Moolenaar  let expect = [
19904958cbaSBram Moolenaar	\ "    abcd",
20004958cbaSBram Moolenaar	\ "   qrstu",
20104958cbaSBram Moolenaar	\ "   HIJKL",
20204958cbaSBram Moolenaar	\ ]
20304958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
20404958cbaSBram Moolenaar  call s:close_windows('set vts&')
20504958cbaSBram Moolenaarendfunc
20604958cbaSBram Moolenaar
20704958cbaSBram Moolenaarfunc Test_breakindent07()
2086c896867SBram Moolenaar  " breakindent set and shift by 1, Number  set sbr=? and briopt:sbr
209544d3bc9SBram Moolenaar  call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n')
210544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),10)
211544d3bc9SBram Moolenaar  let expect = [
212544d3bc9SBram Moolenaar	\ "  2     ab",
213544d3bc9SBram Moolenaar	\ "?        m",
214544d3bc9SBram Moolenaar	\ "?        x",
215544d3bc9SBram Moolenaar	\ ]
216544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
2176c896867SBram Moolenaar  " clean up
2186c896867SBram Moolenaar  call s:close_windows('set sbr= cpo-=n')
21904958cbaSBram Moolenaarendfunc
2206c896867SBram Moolenaar
22104958cbaSBram Moolenaarfunc Test_breakindent07_vartabs()
2226d91bcb4SBram Moolenaar  CheckFeature vartabs
22304958cbaSBram Moolenaar  " breakindent set and shift by 1, Number  set sbr=? and briopt:sbr
22404958cbaSBram Moolenaar  call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n vts=4')
22504958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),10)
22604958cbaSBram Moolenaar  let expect = [
22704958cbaSBram Moolenaar	\ "  2     ab",
22804958cbaSBram Moolenaar	\ "?        m",
22904958cbaSBram Moolenaar	\ "?        x",
23004958cbaSBram Moolenaar	\ ]
23104958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
23204958cbaSBram Moolenaar  " clean up
23304958cbaSBram Moolenaar  call s:close_windows('set sbr= cpo-=n vts&')
23404958cbaSBram Moolenaarendfunc
23504958cbaSBram Moolenaar
23604958cbaSBram Moolenaarfunc Test_breakindent07a()
2376c896867SBram Moolenaar  " breakindent set and shift by 1, Number  set sbr=? and briopt:sbr
238544d3bc9SBram Moolenaar  call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4')
239544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),10)
240544d3bc9SBram Moolenaar  let expect = [
241544d3bc9SBram Moolenaar	\ "  2     ab",
242544d3bc9SBram Moolenaar	\ "    ?    m",
243544d3bc9SBram Moolenaar	\ "    ?    x",
244544d3bc9SBram Moolenaar	\ ]
245544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
2466c896867SBram Moolenaar  " clean up
2476c896867SBram Moolenaar  call s:close_windows('set sbr=')
24804958cbaSBram Moolenaarendfunc
2496c896867SBram Moolenaar
25004958cbaSBram Moolenaarfunc Test_breakindent07a_vartabs()
2516d91bcb4SBram Moolenaar  CheckFeature vartabs
25204958cbaSBram Moolenaar  " breakindent set and shift by 1, Number  set sbr=? and briopt:sbr
25304958cbaSBram Moolenaar  call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 vts=4')
25404958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),10)
25504958cbaSBram Moolenaar  let expect = [
25604958cbaSBram Moolenaar	\ "  2     ab",
25704958cbaSBram Moolenaar	\ "    ?    m",
25804958cbaSBram Moolenaar	\ "    ?    x",
25904958cbaSBram Moolenaar	\ ]
26004958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
26104958cbaSBram Moolenaar  " clean up
26204958cbaSBram Moolenaar  call s:close_windows('set sbr= vts&')
26304958cbaSBram Moolenaarendfunc
26404958cbaSBram Moolenaar
26504958cbaSBram Moolenaarfunc Test_breakindent08()
2666c896867SBram Moolenaar  " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
267544d3bc9SBram Moolenaar  call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4')
2686c896867SBram Moolenaar  " make sure, cache is invalidated!
2696c896867SBram Moolenaar  set ts=8
2706c896867SBram Moolenaar  redraw!
2716c896867SBram Moolenaar  set ts=4
2726c896867SBram Moolenaar  redraw!
273544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),10)
274544d3bc9SBram Moolenaar  let expect = [
275544d3bc9SBram Moolenaar	\ "  2 ^Iabcd",
276544d3bc9SBram Moolenaar	\ "#      opq",
277544d3bc9SBram Moolenaar	\ "#      BCD",
278544d3bc9SBram Moolenaar	\ ]
279544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
2806c896867SBram Moolenaar  call s:close_windows('set sbr= cpo-=n')
28104958cbaSBram Moolenaarendfunc
2826c896867SBram Moolenaar
28304958cbaSBram Moolenaarfunc Test_breakindent08_vartabs()
2846d91bcb4SBram Moolenaar  CheckFeature vartabs
28504958cbaSBram Moolenaar  " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
28604958cbaSBram Moolenaar  call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4 vts=4')
28704958cbaSBram Moolenaar  " make sure, cache is invalidated!
28804958cbaSBram Moolenaar  set ts=8
28904958cbaSBram Moolenaar  redraw!
29004958cbaSBram Moolenaar  set ts=4
29104958cbaSBram Moolenaar  redraw!
29204958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),10)
29304958cbaSBram Moolenaar  let expect = [
29404958cbaSBram Moolenaar	\ "  2 ^Iabcd",
29504958cbaSBram Moolenaar	\ "#      opq",
29604958cbaSBram Moolenaar	\ "#      BCD",
29704958cbaSBram Moolenaar	\ ]
29804958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
29904958cbaSBram Moolenaar  call s:close_windows('set sbr= cpo-=n vts&')
30004958cbaSBram Moolenaarendfunc
30104958cbaSBram Moolenaar
30204958cbaSBram Moolenaarfunc Test_breakindent08a()
3036c896867SBram Moolenaar  " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
304544d3bc9SBram Moolenaar  call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list')
305544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),10)
306544d3bc9SBram Moolenaar  let expect = [
307544d3bc9SBram Moolenaar	\ "  2 ^Iabcd",
308544d3bc9SBram Moolenaar	\ "    #  opq",
309544d3bc9SBram Moolenaar	\ "    #  BCD",
310544d3bc9SBram Moolenaar	\ ]
311544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
3126c896867SBram Moolenaar  call s:close_windows('set sbr=')
31304958cbaSBram Moolenaarendfunc
3146c896867SBram Moolenaar
31504958cbaSBram Moolenaarfunc Test_breakindent08a_vartabs()
3166d91bcb4SBram Moolenaar  CheckFeature vartabs
31704958cbaSBram Moolenaar  " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
31804958cbaSBram Moolenaar  call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list vts=4')
31904958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),10)
32004958cbaSBram Moolenaar  let expect = [
32104958cbaSBram Moolenaar	\ "  2 ^Iabcd",
32204958cbaSBram Moolenaar	\ "    #  opq",
32304958cbaSBram Moolenaar	\ "    #  BCD",
32404958cbaSBram Moolenaar	\ ]
32504958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
32604958cbaSBram Moolenaar  call s:close_windows('set sbr= vts&')
32704958cbaSBram Moolenaarendfunc
32804958cbaSBram Moolenaar
32904958cbaSBram Moolenaarfunc Test_breakindent09()
3306c896867SBram Moolenaar  " breakindent set and shift by 1, Number and list set sbr=#
331544d3bc9SBram Moolenaar  call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list')
332544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),10)
333544d3bc9SBram Moolenaar  let expect = [
334544d3bc9SBram Moolenaar	\ "  2 ^Iabcd",
335544d3bc9SBram Moolenaar	\ "       #op",
336544d3bc9SBram Moolenaar	\ "       #AB",
337544d3bc9SBram Moolenaar	\ ]
338544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
3396c896867SBram Moolenaar  call s:close_windows('set sbr=')
34004958cbaSBram Moolenaarendfunc
3416c896867SBram Moolenaar
34204958cbaSBram Moolenaarfunc Test_breakindent09_vartabs()
3436d91bcb4SBram Moolenaar  CheckFeature vartabs
34404958cbaSBram Moolenaar  " breakindent set and shift by 1, Number and list set sbr=#
34504958cbaSBram Moolenaar  call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list vts=4')
34604958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),10)
34704958cbaSBram Moolenaar  let expect = [
34804958cbaSBram Moolenaar	\ "  2 ^Iabcd",
34904958cbaSBram Moolenaar	\ "       #op",
35004958cbaSBram Moolenaar	\ "       #AB",
35104958cbaSBram Moolenaar	\ ]
35204958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
35304958cbaSBram Moolenaar  call s:close_windows('set sbr= vts&')
35404958cbaSBram Moolenaarendfunc
35504958cbaSBram Moolenaar
35604958cbaSBram Moolenaarfunc Test_breakindent10()
3576c896867SBram Moolenaar  " breakindent set, Number set sbr=~
358544d3bc9SBram Moolenaar  call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0')
3596c896867SBram Moolenaar  " make sure, cache is invalidated!
3606c896867SBram Moolenaar  set ts=8
3616c896867SBram Moolenaar  redraw!
3626c896867SBram Moolenaar  set ts=4
3636c896867SBram Moolenaar  redraw!
364544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),10)
365544d3bc9SBram Moolenaar  let expect = [
366544d3bc9SBram Moolenaar	\ "  2     ab",
367544d3bc9SBram Moolenaar	\ "~       mn",
368544d3bc9SBram Moolenaar	\ "~       yz",
369544d3bc9SBram Moolenaar	\ ]
370544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
3716c896867SBram Moolenaar  call s:close_windows('set sbr= cpo-=n')
37204958cbaSBram Moolenaarendfunc
3736c896867SBram Moolenaar
37404958cbaSBram Moolenaarfunc Test_breakindent10_vartabs()
3756d91bcb4SBram Moolenaar  CheckFeature vartabs
37604958cbaSBram Moolenaar  " breakindent set, Number set sbr=~
37704958cbaSBram Moolenaar  call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0 vts=4')
37804958cbaSBram Moolenaar  " make sure, cache is invalidated!
37904958cbaSBram Moolenaar  set ts=8
38004958cbaSBram Moolenaar  redraw!
38104958cbaSBram Moolenaar  set ts=4
38204958cbaSBram Moolenaar  redraw!
38304958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),10)
38404958cbaSBram Moolenaar  let expect = [
38504958cbaSBram Moolenaar	\ "  2     ab",
38604958cbaSBram Moolenaar	\ "~       mn",
38704958cbaSBram Moolenaar	\ "~       yz",
38804958cbaSBram Moolenaar	\ ]
38904958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
39004958cbaSBram Moolenaar  call s:close_windows('set sbr= cpo-=n vts&')
39104958cbaSBram Moolenaarendfunc
39204958cbaSBram Moolenaar
39304958cbaSBram Moolenaarfunc Test_breakindent11()
3946c896867SBram Moolenaar  " test strdisplaywidth()
395544d3bc9SBram Moolenaar  call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4')
3966c896867SBram Moolenaar  let text = getline(2)
3976c896867SBram Moolenaar  let width = strlen(text[1:]) + indent(2) + strlen(&sbr) * 3 " text wraps 3 times
3986c896867SBram Moolenaar  call assert_equal(width, strdisplaywidth(text))
3996c896867SBram Moolenaar  call s:close_windows('set sbr=')
4000e05de46SBram Moolenaar  call assert_equal(4, strdisplaywidth("\t", 4))
40104958cbaSBram Moolenaarendfunc
4026c896867SBram Moolenaar
40304958cbaSBram Moolenaarfunc Test_breakindent11_vartabs()
4046d91bcb4SBram Moolenaar  CheckFeature vartabs
40504958cbaSBram Moolenaar  " test strdisplaywidth()
40604958cbaSBram Moolenaar  call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4')
40704958cbaSBram Moolenaar  let text = getline(2)
408f9f24ce7SBram Moolenaar  let width = strlen(text[1:]) + 2->indent() + strlen(&sbr) * 3 " text wraps 3 times
409f6ed61e1SBram Moolenaar  call assert_equal(width, text->strdisplaywidth())
41004958cbaSBram Moolenaar  call s:close_windows('set sbr= vts&')
41104958cbaSBram Moolenaarendfunc
41204958cbaSBram Moolenaar
41304958cbaSBram Moolenaarfunc Test_breakindent12()
4146c896867SBram Moolenaar  " test breakindent with long indent
4156c896867SBram Moolenaar  let s:input = "\t\t\t\t\t{"
416544d3bc9SBram Moolenaar  call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>-')
417544d3bc9SBram Moolenaar  let lines = s:screen_lines(2,16)
418544d3bc9SBram Moolenaar  let expect = [
419544d3bc9SBram Moolenaar	\ " 2 >--->--->--->",
420544d3bc9SBram Moolenaar	\ "          ---{  ",
421544d3bc9SBram Moolenaar	\ "~               ",
422544d3bc9SBram Moolenaar	\ ]
423544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
4246c896867SBram Moolenaar  call s:close_windows('set nuw=4 listchars=')
42504958cbaSBram Moolenaarendfunc
4266c896867SBram Moolenaar
42704958cbaSBram Moolenaarfunc Test_breakindent12_vartabs()
4286d91bcb4SBram Moolenaar  CheckFeature vartabs
42904958cbaSBram Moolenaar  " test breakindent with long indent
43004958cbaSBram Moolenaar  let s:input = "\t\t\t\t\t{"
43104958cbaSBram Moolenaar  call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>- vts=4')
43204958cbaSBram Moolenaar  let lines = s:screen_lines(2,16)
43304958cbaSBram Moolenaar  let expect = [
43404958cbaSBram Moolenaar	\ " 2 >--->--->--->",
43504958cbaSBram Moolenaar	\ "          ---{  ",
43604958cbaSBram Moolenaar	\ "~               ",
43704958cbaSBram Moolenaar	\ ]
43804958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
43904958cbaSBram Moolenaar  call s:close_windows('set nuw=4 listchars= vts&')
44004958cbaSBram Moolenaarendfunc
44104958cbaSBram Moolenaar
44204958cbaSBram Moolenaarfunc Test_breakindent13()
4436c896867SBram Moolenaar  let s:input = ""
444544d3bc9SBram Moolenaar  call s:test_windows('setl breakindent briopt=min:10 ts=8')
4456c896867SBram Moolenaar  vert resize 20
4466c896867SBram Moolenaar  call setline(1, ["    a\tb\tc\td\te", "    z   y       x       w       v"])
4476c896867SBram Moolenaar  1
4486c896867SBram Moolenaar  norm! fbgj"ayl
4496c896867SBram Moolenaar  2
4506c896867SBram Moolenaar  norm! fygj"byl
4516c896867SBram Moolenaar  call assert_equal('d', @a)
4526c896867SBram Moolenaar  call assert_equal('w', @b)
4536c896867SBram Moolenaar  call s:close_windows()
45404958cbaSBram Moolenaarendfunc
4556c896867SBram Moolenaar
45604958cbaSBram Moolenaarfunc Test_breakindent13_vartabs()
4576d91bcb4SBram Moolenaar  CheckFeature vartabs
45804958cbaSBram Moolenaar  let s:input = ""
45904958cbaSBram Moolenaar  call s:test_windows('setl breakindent briopt=min:10 ts=8 vts=8')
46004958cbaSBram Moolenaar  vert resize 20
46104958cbaSBram Moolenaar  call setline(1, ["    a\tb\tc\td\te", "    z   y       x       w       v"])
46204958cbaSBram Moolenaar  1
46304958cbaSBram Moolenaar  norm! fbgj"ayl
46404958cbaSBram Moolenaar  2
46504958cbaSBram Moolenaar  norm! fygj"byl
46604958cbaSBram Moolenaar  call assert_equal('d', @a)
46704958cbaSBram Moolenaar  call assert_equal('w', @b)
46804958cbaSBram Moolenaar  call s:close_windows('set vts&')
46904958cbaSBram Moolenaarendfunc
47004958cbaSBram Moolenaar
47104958cbaSBram Moolenaarfunc Test_breakindent14()
4726c896867SBram Moolenaar  let s:input = ""
473544d3bc9SBram Moolenaar  call s:test_windows('setl breakindent briopt= ts=8')
4746c896867SBram Moolenaar  vert resize 30
4756c896867SBram Moolenaar  norm! 3a1234567890
4766c896867SBram Moolenaar  norm! a    abcde
4776c896867SBram Moolenaar  exec "norm! 0\<C-V>tex"
478544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),8)
479544d3bc9SBram Moolenaar  let expect = [
480544d3bc9SBram Moolenaar	\ "e       ",
481544d3bc9SBram Moolenaar	\ "~       ",
482544d3bc9SBram Moolenaar	\ "~       ",
483544d3bc9SBram Moolenaar	\ ]
484544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
4856c896867SBram Moolenaar  call s:close_windows()
48604958cbaSBram Moolenaarendfunc
4876c896867SBram Moolenaar
48804958cbaSBram Moolenaarfunc Test_breakindent14_vartabs()
4896d91bcb4SBram Moolenaar  CheckFeature vartabs
49004958cbaSBram Moolenaar  let s:input = ""
49104958cbaSBram Moolenaar  call s:test_windows('setl breakindent briopt= ts=8 vts=8')
49204958cbaSBram Moolenaar  vert resize 30
49304958cbaSBram Moolenaar  norm! 3a1234567890
49404958cbaSBram Moolenaar  norm! a    abcde
49504958cbaSBram Moolenaar  exec "norm! 0\<C-V>tex"
49604958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),8)
49704958cbaSBram Moolenaar  let expect = [
49804958cbaSBram Moolenaar	\ "e       ",
49904958cbaSBram Moolenaar	\ "~       ",
50004958cbaSBram Moolenaar	\ "~       ",
50104958cbaSBram Moolenaar	\ ]
50204958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
50304958cbaSBram Moolenaar  call s:close_windows('set vts&')
50404958cbaSBram Moolenaarendfunc
50504958cbaSBram Moolenaar
50604958cbaSBram Moolenaarfunc Test_breakindent15()
5076c896867SBram Moolenaar  let s:input = ""
508544d3bc9SBram Moolenaar  call s:test_windows('setl breakindent briopt= ts=8 sw=8')
5096c896867SBram Moolenaar  vert resize 30
5106c896867SBram Moolenaar  norm! 4a1234567890
5116c896867SBram Moolenaar  exe "normal! >>\<C-V>3f0x"
512544d3bc9SBram Moolenaar  let lines = s:screen_lines(line('.'),20)
513544d3bc9SBram Moolenaar  let expect = [
514544d3bc9SBram Moolenaar	\ "        1234567890  ",
515544d3bc9SBram Moolenaar	\ "~                   ",
516544d3bc9SBram Moolenaar	\ "~                   ",
517544d3bc9SBram Moolenaar	\ ]
518544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
5196c896867SBram Moolenaar  call s:close_windows()
52004958cbaSBram Moolenaarendfunc
5216c896867SBram Moolenaar
52204958cbaSBram Moolenaarfunc Test_breakindent15_vartabs()
5236d91bcb4SBram Moolenaar  CheckFeature vartabs
52404958cbaSBram Moolenaar  let s:input = ""
52504958cbaSBram Moolenaar  call s:test_windows('setl breakindent briopt= ts=8 sw=8 vts=8')
52604958cbaSBram Moolenaar  vert resize 30
52704958cbaSBram Moolenaar  norm! 4a1234567890
52804958cbaSBram Moolenaar  exe "normal! >>\<C-V>3f0x"
52904958cbaSBram Moolenaar  let lines = s:screen_lines(line('.'),20)
53004958cbaSBram Moolenaar  let expect = [
53104958cbaSBram Moolenaar	\ "        1234567890  ",
53204958cbaSBram Moolenaar	\ "~                   ",
53304958cbaSBram Moolenaar	\ "~                   ",
53404958cbaSBram Moolenaar	\ ]
53504958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
53604958cbaSBram Moolenaar  call s:close_windows('set vts&')
53704958cbaSBram Moolenaarendfunc
53804958cbaSBram Moolenaar
53904958cbaSBram Moolenaarfunc Test_breakindent16()
5406c896867SBram Moolenaar  " Check that overlong lines are indented correctly.
5416c896867SBram Moolenaar  let s:input = ""
542544d3bc9SBram Moolenaar  call s:test_windows('setl breakindent briopt=min:0 ts=4')
5436c896867SBram Moolenaar  call setline(1, "\t".repeat("1234567890", 10))
5446c896867SBram Moolenaar  resize 6
5456c896867SBram Moolenaar  norm! 1gg$
5466c896867SBram Moolenaar  redraw!
547544d3bc9SBram Moolenaar  let lines = s:screen_lines(1,10)
548544d3bc9SBram Moolenaar  let expect = [
549544d3bc9SBram Moolenaar	\ "    789012",
550544d3bc9SBram Moolenaar	\ "    345678",
551abc39ab6SBram Moolenaar	\ "    901234",
552544d3bc9SBram Moolenaar	\ ]
553544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
554544d3bc9SBram Moolenaar  let lines = s:screen_lines(4,10)
555544d3bc9SBram Moolenaar  let expect = [
556544d3bc9SBram Moolenaar	\ "    567890",
557544d3bc9SBram Moolenaar	\ "    123456",
558abc39ab6SBram Moolenaar	\ "    7890  ",
559544d3bc9SBram Moolenaar	\ ]
560544d3bc9SBram Moolenaar  call s:compare_lines(expect, lines)
5616c896867SBram Moolenaar  call s:close_windows()
56204958cbaSBram Moolenaarendfunc
56304958cbaSBram Moolenaar
56404958cbaSBram Moolenaarfunc Test_breakindent16_vartabs()
5656d91bcb4SBram Moolenaar  CheckFeature vartabs
56604958cbaSBram Moolenaar  " Check that overlong lines are indented correctly.
56704958cbaSBram Moolenaar  let s:input = ""
56804958cbaSBram Moolenaar  call s:test_windows('setl breakindent briopt=min:0 ts=4 vts=4')
56904958cbaSBram Moolenaar  call setline(1, "\t".repeat("1234567890", 10))
57004958cbaSBram Moolenaar  resize 6
57104958cbaSBram Moolenaar  norm! 1gg$
57204958cbaSBram Moolenaar  redraw!
57304958cbaSBram Moolenaar  let lines = s:screen_lines(1,10)
57404958cbaSBram Moolenaar  let expect = [
57504958cbaSBram Moolenaar	\ "    789012",
57604958cbaSBram Moolenaar	\ "    345678",
57704958cbaSBram Moolenaar	\ "    901234",
57804958cbaSBram Moolenaar	\ ]
57904958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
58004958cbaSBram Moolenaar  let lines = s:screen_lines(4,10)
58104958cbaSBram Moolenaar  let expect = [
58204958cbaSBram Moolenaar	\ "    567890",
58304958cbaSBram Moolenaar	\ "    123456",
58404958cbaSBram Moolenaar	\ "    7890  ",
58504958cbaSBram Moolenaar	\ ]
58604958cbaSBram Moolenaar  call s:compare_lines(expect, lines)
58704958cbaSBram Moolenaar  call s:close_windows('set vts&')
58804958cbaSBram Moolenaarendfunc
5892f7b7b1eSBram Moolenaar
5902f7b7b1eSBram Moolenaarfunc Test_breakindent17_vartabs()
5916d91bcb4SBram Moolenaar  CheckFeature vartabs
5922f7b7b1eSBram Moolenaar  let s:input = ""
5932f7b7b1eSBram Moolenaar  call s:test_windows('setl breakindent list listchars=tab:<-> showbreak=+++')
5942f7b7b1eSBram Moolenaar  call setline(1, "\t" . repeat('a', 63))
5952f7b7b1eSBram Moolenaar  vert resize 30
5962f7b7b1eSBram Moolenaar  norm! 1gg$
5972f7b7b1eSBram Moolenaar  redraw!
5982f7b7b1eSBram Moolenaar  let lines = s:screen_lines(1, 30)
5992f7b7b1eSBram Moolenaar  let expect = [
6002f7b7b1eSBram Moolenaar	\ "<-->aaaaaaaaaaaaaaaaaaaaaaaaaa",
6012f7b7b1eSBram Moolenaar	\ "    +++aaaaaaaaaaaaaaaaaaaaaaa",
6022f7b7b1eSBram Moolenaar	\ "    +++aaaaaaaaaaaaaa         ",
6032f7b7b1eSBram Moolenaar	\ ]
6042f7b7b1eSBram Moolenaar  call s:compare_lines(expect, lines)
6052f7b7b1eSBram Moolenaar  call s:close_windows('set breakindent& list& listchars& showbreak&')
6062f7b7b1eSBram Moolenaarendfunc
6072f7b7b1eSBram Moolenaar
6082f7b7b1eSBram Moolenaarfunc Test_breakindent18_vartabs()
6096d91bcb4SBram Moolenaar  CheckFeature vartabs
6102f7b7b1eSBram Moolenaar  let s:input = ""
6112f7b7b1eSBram Moolenaar  call s:test_windows('setl breakindent list listchars=tab:<->')
6122f7b7b1eSBram Moolenaar  call setline(1, "\t" . repeat('a', 63))
6132f7b7b1eSBram Moolenaar  vert resize 30
6142f7b7b1eSBram Moolenaar  norm! 1gg$
6152f7b7b1eSBram Moolenaar  redraw!
6162f7b7b1eSBram Moolenaar  let lines = s:screen_lines(1, 30)
6172f7b7b1eSBram Moolenaar  let expect = [
6182f7b7b1eSBram Moolenaar	\ "<-->aaaaaaaaaaaaaaaaaaaaaaaaaa",
6192f7b7b1eSBram Moolenaar	\ "    aaaaaaaaaaaaaaaaaaaaaaaaaa",
6202f7b7b1eSBram Moolenaar	\ "    aaaaaaaaaaa               ",
6212f7b7b1eSBram Moolenaar	\ ]
6222f7b7b1eSBram Moolenaar  call s:compare_lines(expect, lines)
6232f7b7b1eSBram Moolenaar  call s:close_windows('set breakindent& list& listchars&')
6242f7b7b1eSBram Moolenaarendfunc
6252f7b7b1eSBram Moolenaar
626dfede9a7SBram Moolenaarfunc Test_breakindent19_sbr_nextpage()
627dfede9a7SBram Moolenaar  let s:input = ""
628dfede9a7SBram Moolenaar  call s:test_windows('setl breakindent briopt=shift:2,sbr,min:18 sbr=>')
629dfede9a7SBram Moolenaar  call setline(1, repeat('a', 200))
630dfede9a7SBram Moolenaar  norm! 1gg
631dfede9a7SBram Moolenaar  redraw!
632dfede9a7SBram Moolenaar  let lines = s:screen_lines(1, 20)
633dfede9a7SBram Moolenaar  let expect = [
634dfede9a7SBram Moolenaar	\ "aaaaaaaaaaaaaaaaaaaa",
635dfede9a7SBram Moolenaar	\ "> aaaaaaaaaaaaaaaaaa",
636dfede9a7SBram Moolenaar	\ "> aaaaaaaaaaaaaaaaaa",
637dfede9a7SBram Moolenaar	\ ]
638dfede9a7SBram Moolenaar  call s:compare_lines(expect, lines)
639dfede9a7SBram Moolenaar  " Scroll down one screen line
640dfede9a7SBram Moolenaar  setl scrolloff=5
6415202929dSBram Moolenaar  norm! 5gj
642dfede9a7SBram Moolenaar  let lines = s:screen_lines(1, 20)
643dfede9a7SBram Moolenaar  let expect = [
6445202929dSBram Moolenaar	\ "aaaaaaaaaaaaaaaaaaaa",
645dfede9a7SBram Moolenaar	\ "> aaaaaaaaaaaaaaaaaa",
646dfede9a7SBram Moolenaar	\ "> aaaaaaaaaaaaaaaaaa",
647dfede9a7SBram Moolenaar	\ ]
648dfede9a7SBram Moolenaar  call s:compare_lines(expect, lines)
6495202929dSBram Moolenaar  redraw!
6505202929dSBram Moolenaar  " moving the cursor doesn't change the text offset
6515202929dSBram Moolenaar  norm! l
6525202929dSBram Moolenaar  redraw!
6535202929dSBram Moolenaar  let lines = s:screen_lines(1, 20)
6545202929dSBram Moolenaar  call s:compare_lines(expect, lines)
6551aa76b8fSBram Moolenaar
6561aa76b8fSBram Moolenaar  setl breakindent briopt=min:18 sbr=>
6571aa76b8fSBram Moolenaar  norm! 5gj
6581aa76b8fSBram Moolenaar  let lines = s:screen_lines(1, 20)
6591aa76b8fSBram Moolenaar  let expect = [
6601aa76b8fSBram Moolenaar	\ ">aaaaaaaaaaaaaaaaaaa",
6611aa76b8fSBram Moolenaar	\ ">aaaaaaaaaaaaaaaaaaa",
6621aa76b8fSBram Moolenaar	\ ">aaaaaaaaaaaaaaaaaaa",
6631aa76b8fSBram Moolenaar	\ ]
6641aa76b8fSBram Moolenaar  call s:compare_lines(expect, lines)
665dfede9a7SBram Moolenaar  call s:close_windows('set breakindent& briopt& sbr&')
666dfede9a7SBram Moolenaarendfunc
6670e05de46SBram Moolenaar
668e882f7a7SBram Moolenaarfunc Test_breakindent20_cpo_n_nextpage()
669e882f7a7SBram Moolenaar  let s:input = ""
670e882f7a7SBram Moolenaar  call s:test_windows('setl breakindent briopt=min:14 cpo+=n number')
671e882f7a7SBram Moolenaar  call setline(1, repeat('a', 200))
672e882f7a7SBram Moolenaar  norm! 1gg
673e882f7a7SBram Moolenaar  redraw!
674e882f7a7SBram Moolenaar  let lines = s:screen_lines(1, 20)
675e882f7a7SBram Moolenaar  let expect = [
676e882f7a7SBram Moolenaar	\ "  1 aaaaaaaaaaaaaaaa",
677e882f7a7SBram Moolenaar	\ "    aaaaaaaaaaaaaaaa",
678e882f7a7SBram Moolenaar	\ "    aaaaaaaaaaaaaaaa",
679e882f7a7SBram Moolenaar	\ ]
680e882f7a7SBram Moolenaar  call s:compare_lines(expect, lines)
681e882f7a7SBram Moolenaar  " Scroll down one screen line
682e882f7a7SBram Moolenaar  setl scrolloff=5
683e882f7a7SBram Moolenaar  norm! 5gj
684e882f7a7SBram Moolenaar  redraw!
685e882f7a7SBram Moolenaar  let lines = s:screen_lines(1, 20)
686e882f7a7SBram Moolenaar  let expect = [
687e882f7a7SBram Moolenaar	\ "--1 aaaaaaaaaaaaaaaa",
688e882f7a7SBram Moolenaar	\ "    aaaaaaaaaaaaaaaa",
689e882f7a7SBram Moolenaar	\ "    aaaaaaaaaaaaaaaa",
690e882f7a7SBram Moolenaar	\ ]
691e882f7a7SBram Moolenaar  call s:compare_lines(expect, lines)
692e882f7a7SBram Moolenaar
693e882f7a7SBram Moolenaar  setl briopt+=shift:2
694e882f7a7SBram Moolenaar  norm! 1gg
695e882f7a7SBram Moolenaar  let lines = s:screen_lines(1, 20)
696e882f7a7SBram Moolenaar  let expect = [
697e882f7a7SBram Moolenaar	\ "  1 aaaaaaaaaaaaaaaa",
698e882f7a7SBram Moolenaar	\ "      aaaaaaaaaaaaaa",
699e882f7a7SBram Moolenaar	\ "      aaaaaaaaaaaaaa",
700e882f7a7SBram Moolenaar	\ ]
701e882f7a7SBram Moolenaar  call s:compare_lines(expect, lines)
702e882f7a7SBram Moolenaar  " Scroll down one screen line
703e882f7a7SBram Moolenaar  norm! 5gj
704e882f7a7SBram Moolenaar  let lines = s:screen_lines(1, 20)
705e882f7a7SBram Moolenaar  let expect = [
706e882f7a7SBram Moolenaar	\ "--1   aaaaaaaaaaaaaa",
707e882f7a7SBram Moolenaar	\ "      aaaaaaaaaaaaaa",
708e882f7a7SBram Moolenaar	\ "      aaaaaaaaaaaaaa",
709e882f7a7SBram Moolenaar	\ ]
710e882f7a7SBram Moolenaar  call s:compare_lines(expect, lines)
711e882f7a7SBram Moolenaar
712e882f7a7SBram Moolenaar  call s:close_windows('set breakindent& briopt& cpo& number&')
713e882f7a7SBram Moolenaarendfunc
714e882f7a7SBram Moolenaar
7154a0b85adSChristian Brabandtfunc Test_breakindent20_list()
7164a0b85adSChristian Brabandt  call s:test_windows('setl breakindent breakindentopt= linebreak')
7174a0b85adSChristian Brabandt  " default:
7184a0b85adSChristian Brabandt  call setline(1, ['  1.  Congress shall make no law',
7194a0b85adSChristian Brabandt        \ '  2.) Congress shall make no law',
7204a0b85adSChristian Brabandt        \ '  3.] Congress shall make no law'])
7214a0b85adSChristian Brabandt  norm! 1gg
7224a0b85adSChristian Brabandt  redraw!
7234a0b85adSChristian Brabandt  let lines = s:screen_lines2(1, 6, 20)
7244a0b85adSChristian Brabandt  let expect = [
7254a0b85adSChristian Brabandt	\ "  1.  Congress      ",
7264a0b85adSChristian Brabandt	\ "shall make no law   ",
7274a0b85adSChristian Brabandt	\ "  2.) Congress      ",
7284a0b85adSChristian Brabandt	\ "shall make no law   ",
7294a0b85adSChristian Brabandt	\ "  3.] Congress      ",
7304a0b85adSChristian Brabandt	\ "shall make no law   ",
7314a0b85adSChristian Brabandt	\ ]
7324a0b85adSChristian Brabandt  call s:compare_lines(expect, lines)
7334a0b85adSChristian Brabandt  " set mininum indent
7344a0b85adSChristian Brabandt  setl briopt=min:5
7354a0b85adSChristian Brabandt  redraw!
7364a0b85adSChristian Brabandt  let lines = s:screen_lines2(1, 6, 20)
7374a0b85adSChristian Brabandt  let expect = [
7384a0b85adSChristian Brabandt	\ "  1.  Congress      ",
7394a0b85adSChristian Brabandt	\ "  shall make no law ",
7404a0b85adSChristian Brabandt	\ "  2.) Congress      ",
7414a0b85adSChristian Brabandt	\ "  shall make no law ",
7424a0b85adSChristian Brabandt	\ "  3.] Congress      ",
7434a0b85adSChristian Brabandt	\ "  shall make no law ",
7444a0b85adSChristian Brabandt	\ ]
7454a0b85adSChristian Brabandt  call s:compare_lines(expect, lines)
7464a0b85adSChristian Brabandt  " set additional handing indent
7474a0b85adSChristian Brabandt  setl briopt+=list:4
7484a0b85adSChristian Brabandt  redraw!
7494a0b85adSChristian Brabandt  let expect = [
7504a0b85adSChristian Brabandt	\ "  1.  Congress      ",
7514a0b85adSChristian Brabandt	\ "      shall make no ",
7524a0b85adSChristian Brabandt	\ "      law           ",
7534a0b85adSChristian Brabandt	\ "  2.) Congress      ",
7544a0b85adSChristian Brabandt	\ "      shall make no ",
7554a0b85adSChristian Brabandt	\ "      law           ",
7564a0b85adSChristian Brabandt	\ "  3.] Congress      ",
7574a0b85adSChristian Brabandt	\ "      shall make no ",
7584a0b85adSChristian Brabandt	\ "      law           ",
7594a0b85adSChristian Brabandt	\ ]
7604a0b85adSChristian Brabandt  let lines = s:screen_lines2(1, 9, 20)
7614a0b85adSChristian Brabandt  call s:compare_lines(expect, lines)
762f674b358SMaxim Kim
7634a0b85adSChristian Brabandt  " reset linebreak option
7644a0b85adSChristian Brabandt  " Note: it indents by one additional
7654a0b85adSChristian Brabandt  " space, because of the leading space.
7664a0b85adSChristian Brabandt  setl linebreak&vim list listchars=eol:$,space:_
7674a0b85adSChristian Brabandt  redraw!
7684a0b85adSChristian Brabandt  let expect = [
7694a0b85adSChristian Brabandt	\ "__1.__Congress_shall",
7704a0b85adSChristian Brabandt	\ "      _make_no_law$ ",
7714a0b85adSChristian Brabandt	\ "__2.)_Congress_shall",
7724a0b85adSChristian Brabandt	\ "      _make_no_law$ ",
7734a0b85adSChristian Brabandt	\ "__3.]_Congress_shall",
7744a0b85adSChristian Brabandt	\ "      _make_no_law$ ",
7754a0b85adSChristian Brabandt	\ ]
7764a0b85adSChristian Brabandt  let lines = s:screen_lines2(1, 6, 20)
7774a0b85adSChristian Brabandt  call s:compare_lines(expect, lines)
7784a0b85adSChristian Brabandt
779f674b358SMaxim Kim  " check formatlistpat indent
780f674b358SMaxim Kim  setl briopt=min:5,list:-1
781f674b358SMaxim Kim  setl linebreak list&vim listchars&vim
782f674b358SMaxim Kim  let &l:flp = '^\s*\d\+\.\?[\]:)}\t ]\s*'
783f674b358SMaxim Kim  redraw!
784f674b358SMaxim Kim  let expect = [
785f674b358SMaxim Kim	\ "  1.  Congress      ",
786f674b358SMaxim Kim	\ "      shall make no ",
787f674b358SMaxim Kim	\ "      law           ",
788f674b358SMaxim Kim	\ "  2.) Congress      ",
789f674b358SMaxim Kim	\ "      shall make no ",
790f674b358SMaxim Kim	\ "      law           ",
791f674b358SMaxim Kim	\ "  3.] Congress      ",
792f674b358SMaxim Kim	\ "      shall make no ",
793f674b358SMaxim Kim	\ "      law           ",
794f674b358SMaxim Kim	\ ]
795f674b358SMaxim Kim  let lines = s:screen_lines2(1, 9, 20)
796f674b358SMaxim Kim  call s:compare_lines(expect, lines)
797f674b358SMaxim Kim  " check formatlistpat indent with different list levels
798f674b358SMaxim Kim  let &l:flp = '^\s*\*\+\s\+'
799f674b358SMaxim Kim  redraw!
800f674b358SMaxim Kim  %delete _
801f674b358SMaxim Kim  call setline(1, ['* Congress shall make no law',
802f674b358SMaxim Kim        \ '*** Congress shall make no law',
803f674b358SMaxim Kim        \ '**** Congress shall make no law'])
804f674b358SMaxim Kim  norm! 1gg
805f674b358SMaxim Kim  let expect = [
806f674b358SMaxim Kim	\ "* Congress shall    ",
807f674b358SMaxim Kim	\ "  make no law       ",
808f674b358SMaxim Kim	\ "*** Congress shall  ",
809f674b358SMaxim Kim	\ "    make no law     ",
810f674b358SMaxim Kim	\ "**** Congress shall ",
811f674b358SMaxim Kim	\ "     make no law    ",
812f674b358SMaxim Kim	\ ]
813f674b358SMaxim Kim  let lines = s:screen_lines2(1, 6, 20)
814f674b358SMaxim Kim  call s:compare_lines(expect, lines)
815f674b358SMaxim Kim
816f674b358SMaxim Kim  " check formatlistpat indent with different list level
817f674b358SMaxim Kim  " showbreak and sbr
818f674b358SMaxim Kim  setl briopt=min:5,sbr,list:-1,shift:2
819f674b358SMaxim Kim  setl showbreak=>
820f674b358SMaxim Kim  redraw!
821f674b358SMaxim Kim  let expect = [
822f674b358SMaxim Kim	\ "* Congress shall    ",
823f674b358SMaxim Kim	\ "> make no law       ",
824f674b358SMaxim Kim	\ "*** Congress shall  ",
825f674b358SMaxim Kim	\ ">   make no law     ",
826f674b358SMaxim Kim	\ "**** Congress shall ",
827f674b358SMaxim Kim	\ ">    make no law    ",
828f674b358SMaxim Kim	\ ]
829f674b358SMaxim Kim  let lines = s:screen_lines2(1, 6, 20)
830f674b358SMaxim Kim  call s:compare_lines(expect, lines)
831f674b358SMaxim Kim  call s:close_windows('set breakindent& briopt& linebreak& list& listchars& showbreak&')
8324a0b85adSChristian Brabandtendfunc
8334a0b85adSChristian Brabandt
834*03d25799SYegappan Lakshmanan" The following used to crash Vim. This is fixed by 8.2.3391.
835*03d25799SYegappan Lakshmanan" This is a regression introduced by 8.2.2903.
836*03d25799SYegappan Lakshmananfunc Test_window_resize_with_linebreak()
837*03d25799SYegappan Lakshmanan  new
838*03d25799SYegappan Lakshmanan  53vnew
839*03d25799SYegappan Lakshmanan  set linebreak
840*03d25799SYegappan Lakshmanan  set showbreak=>>
841*03d25799SYegappan Lakshmanan  set breakindent
842*03d25799SYegappan Lakshmanan  set breakindentopt=shift:4
843*03d25799SYegappan Lakshmanan  call setline(1, "\naaaaaaaaa\n\na\naaaaa\n¯aaaaaaaaaa\naaaaaaaaaaaa\naaa\n\"a:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - aaaaaaaa\"\naaaaaaaa\n\"a")
844*03d25799SYegappan Lakshmanan  redraw!
845*03d25799SYegappan Lakshmanan  call assert_equal(["    >>aa^@\"a: "], ScreenLines(2, 14))
846*03d25799SYegappan Lakshmanan  vertical resize 52
847*03d25799SYegappan Lakshmanan  redraw!
848*03d25799SYegappan Lakshmanan  call assert_equal(["    >>aaa^@\"a:"], ScreenLines(2, 14))
849*03d25799SYegappan Lakshmanan  %bw!
850*03d25799SYegappan Lakshmananendfunc
851*03d25799SYegappan Lakshmanan
8520e05de46SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
853