xref: /vim-8.2.3635/src/testdir/test_listlbr.vim (revision 577fadfc)
1" Test for linebreak and list option (non-utf8)
2
3set encoding=latin1
4scriptencoding latin1
5
6if !exists("+linebreak") || !has("conceal")
7  finish
8endif
9
10source view_util.vim
11
12function s:screen_lines(lnum, width) abort
13  return ScreenLines(a:lnum, a:width)
14endfunction
15
16func s:compare_lines(expect, actual)
17  call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
18endfunc
19
20function s:test_windows(...)
21  call NewWindow(10, 20)
22  setl ts=8 sw=4 sts=4 linebreak sbr= wrap
23  exe get(a:000, 0, '')
24endfunction
25
26function s:close_windows(...)
27  call CloseWindow()
28  exe get(a:000, 0, '')
29endfunction
30
31func Test_set_linebreak()
32  call s:test_windows('setl ts=4 sbr=+')
33  call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ")
34  let lines = s:screen_lines([1, 4], winwidth(0))
35  let expect = [
36\ "    abcdef          ",
37\ "+hijklmn            ",
38\ "+pqrstuvwxyz_1060ABC",
39\ "+DEFGHIJKLMNOP      ",
40\ ]
41  call s:compare_lines(expect, lines)
42  call s:close_windows()
43endfunc
44
45func Test_linebreak_with_list()
46  call s:test_windows('setl ts=4 sbr=+ list listchars=')
47  call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ")
48  let lines = s:screen_lines([1, 4], winwidth(0))
49  let expect = [
50\ "^Iabcdef hijklmn^I  ",
51\ "+pqrstuvwxyz_1060ABC",
52\ "+DEFGHIJKLMNOP      ",
53\ "~                   ",
54\ ]
55  call s:compare_lines(expect, lines)
56  call s:close_windows()
57endfunc
58
59func Test_linebreak_with_nolist()
60  call s:test_windows('setl ts=4 sbr=+ nolist')
61  call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ")
62  let lines = s:screen_lines([1, 4], winwidth(0))
63  let expect = [
64\ "    abcdef          ",
65\ "+hijklmn            ",
66\ "+pqrstuvwxyz_1060ABC",
67\ "+DEFGHIJKLMNOP      ",
68\ ]
69  call s:compare_lines(expect, lines)
70  call s:close_windows()
71endfunc
72
73func Test_should_break()
74  call s:test_windows('setl sbr=+ nolist')
75  call setline(1, "1\t" . repeat('a', winwidth(0)-2))
76  let lines = s:screen_lines([1, 4], winwidth(0))
77  let expect = [
78\ "1                   ",
79\ "+aaaaaaaaaaaaaaaaaa ",
80\ "~                   ",
81\ "~                   ",
82\ ]
83  call s:compare_lines(expect, lines)
84  call s:close_windows()
85endfunc
86
87func Test_linebreak_with_conceal()
88  call s:test_windows('setl cpo&vim sbr=+ list conceallevel=2 concealcursor=nv listchars=tab:ab')
89  call setline(1, "_S_\t bla")
90  syn match ConcealVar contained /_/ conceal
91  syn match All /.*/ contains=ConcealVar
92  let lines = s:screen_lines([1, 4], winwidth(0))
93  let expect = [
94\ "Sabbbbbb bla        ",
95\ "~                   ",
96\ "~                   ",
97\ "~                   ",
98\ ]
99  call s:compare_lines(expect, lines)
100  call s:close_windows()
101endfunc
102
103func Test_virtual_block()
104  call s:test_windows('setl sbr=+')
105  call setline(1, [
106\ "REMOVE: this not",
107\ "REMOVE: aaaaaaaaaaaaa",
108\ ])
109  exe "norm! 1/^REMOVE:"
110  exe "norm! 0\<C-V>jf x"
111  $put
112  let lines = s:screen_lines([1, 4], winwidth(0))
113  let expect = [
114\ "this not            ",
115\ "aaaaaaaaaaaaa       ",
116\ "REMOVE:             ",
117\ "REMOVE:             ",
118\ ]
119  call s:compare_lines(expect, lines)
120  call s:close_windows()
121endfunc
122
123func Test_virtual_block_and_vbA()
124  call s:test_windows()
125  call setline(1, "long line: " . repeat("foobar ", 40) . "TARGET at end")
126  exe "norm! $3B\<C-v>eAx\<Esc>"
127  let lines = s:screen_lines([1, 10], winwidth(0))
128  let expect = [
129\ "foobar foobar       ",
130\ "foobar foobar       ",
131\ "foobar foobar       ",
132\ "foobar foobar       ",
133\ "foobar foobar       ",
134\ "foobar foobar       ",
135\ "foobar foobar       ",
136\ "foobar foobar       ",
137\ "foobar foobar       ",
138\ "foobar TARGETx at   ",
139\ ]
140  call s:compare_lines(expect, lines)
141  call s:close_windows()
142endfunc
143
144func Test_virtual_char_and_block()
145  call s:test_windows()
146  call setline(1, "1111-1111-1111-11-1111-1111-1111")
147  exe "norm! 0f-lv3lc2222\<Esc>bgj."
148  let lines = s:screen_lines([1, 2], winwidth(0))
149  let expect = [
150\ "1111-2222-1111-11-  ",
151\ "1111-2222-1111      ",
152\ ]
153  call s:compare_lines(expect, lines)
154  call s:close_windows()
155endfunc
156
157func Test_undo_after_block_visual()
158  call s:test_windows()
159  call setline(1, ["aaa", "aaa", "a"])
160  exe "norm! gg\<C-V>2j~e."
161  let lines = s:screen_lines([1, 3], winwidth(0))
162  let expect = [
163\ "AaA                 ",
164\ "AaA                 ",
165\ "A                   ",
166\ ]
167  call s:compare_lines(expect, lines)
168  call s:close_windows()
169endfunc
170
171func Test_norm_after_block_visual()
172  call s:test_windows()
173  call setline(1, ["abcd{ef", "ghijklm", "no}pgrs"])
174  exe "norm! ggf{\<C-V>\<C-V>c%"
175  let lines = s:screen_lines([1, 3], winwidth(0))
176  let expect = [
177\ "abcdpgrs            ",
178\ "~                   ",
179\ "~                   ",
180\ ]
181  call s:compare_lines(expect, lines)
182  call s:close_windows()
183endfunc
184
185func Test_block_replace_after_wrapping()
186  call s:test_windows()
187  call setline(1, repeat("a", 150))
188  exe "norm! 0yypk147|\<C-V>jr0"
189  call assert_equal(repeat("a", 146) . "0aaa", getline(1))
190  call assert_equal(repeat("a", 146) . "0aaa", getline(2))
191  let lines = s:screen_lines([1, 10], winwidth(0))
192  let expect = [
193\ "aaaaaaaaaaaaaaaaaaaa",
194\ "aaaaaaaaaaaaaaaaaaaa",
195\ "aaaaaaaaaaaaaaaaaaaa",
196\ "aaaaaaaaaaaaaaaaaaaa",
197\ "aaaaaaaaaaaaaaaaaaaa",
198\ "aaaaaaaaaaaaaaaaaaaa",
199\ "aaaaaaaaaaaaaaaaaaaa",
200\ "aaaaaa0aaa          ",
201\ "@                   ",
202\ "@                   ",
203\ ]
204  call s:compare_lines(expect, lines)
205  call s:close_windows()
206endfunc
207
208func Test_list_with_listchars()
209  call s:test_windows('setl list listchars=space:_,trail:-,tab:>-,eol:$')
210  call setline(1, "a aaaaaaaaaaaaaaaaaaaaaa\ta ")
211  let lines = s:screen_lines([1, 3], winwidth(0))
212  let expect = [
213\ "a_                  ",
214\ "aaaaaaaaaaaaaaaaaaaa",
215\ "aa>-----a-$         ",
216\ ]
217  call s:compare_lines(expect, lines)
218  call s:close_windows()
219endfunc
220
221func Test_list_with_tab_and_skipping_first_chars()
222  call s:test_windows('setl list listchars=tab:>- ts=70 nowrap')
223  call setline(1, ["iiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa"])
224  call cursor(4,64)
225  norm! 2zl
226  let lines = s:screen_lines([1, 4], winwidth(0))
227  let expect = [
228\ "---------------aaaaa",
229\ "---------------aaaaa",
230\ "---------------aaaaa",
231\ "iiiiiiiii>-----aaaaa",
232\ ]
233  call s:compare_lines(expect, lines)
234  call s:close_windows()
235endfu
236