xref: /vim-8.2.3635/src/testdir/test_listlbr.vim (revision beae4084)
1" Test for linebreak and list option (non-utf8)
2
3set encoding=latin1
4scriptencoding latin1
5
6source check.vim
7CheckOption linebreak
8CheckFeature conceal
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_linebreak_with_visual_operations()
104  call s:test_windows()
105  let line = '1234567890 2234567890 3234567890'
106  call setline(1, line)
107
108  " yank
109  exec "norm! ^w\<C-V>ey"
110  call assert_equal('2234567890', @@)
111  exec "norm! w\<C-V>ey"
112  call assert_equal('3234567890', @@)
113
114  " increment / decrement
115  exec "norm! ^w\<C-V>\<C-A>w\<C-V>\<C-X>"
116  call assert_equal('1234567890 3234567890 2234567890', getline(1))
117
118  " replace
119  exec "norm! ^w\<C-V>3lraw\<C-V>3lrb"
120  call assert_equal('1234567890 aaaa567890 bbbb567890', getline(1))
121
122  " tilde
123  exec "norm! ^w\<C-V>2l~w\<C-V>2l~"
124  call assert_equal('1234567890 AAAa567890 BBBb567890', getline(1))
125
126  " delete and insert
127  exec "norm! ^w\<C-V>3lc2345\<Esc>w\<C-V>3lc3456\<Esc>"
128  call assert_equal('1234567890 2345567890 3456567890', getline(1))
129  call assert_equal('BBBb', @@)
130
131  call s:close_windows()
132endfunc
133
134func Test_virtual_block()
135  call s:test_windows('setl sbr=+')
136  call setline(1, [
137\ "REMOVE: this not",
138\ "REMOVE: aaaaaaaaaaaaa",
139\ ])
140  exe "norm! 1/^REMOVE:"
141  exe "norm! 0\<C-V>jf x"
142  $put
143  let lines = s:screen_lines([1, 4], winwidth(0))
144  let expect = [
145\ "this not            ",
146\ "aaaaaaaaaaaaa       ",
147\ "REMOVE:             ",
148\ "REMOVE:             ",
149\ ]
150  call s:compare_lines(expect, lines)
151  call s:close_windows()
152endfunc
153
154func Test_virtual_block_and_vbA()
155  call s:test_windows()
156  call setline(1, "long line: " . repeat("foobar ", 40) . "TARGET at end")
157  exe "norm! $3B\<C-v>eAx\<Esc>"
158  let lines = s:screen_lines([1, 10], winwidth(0))
159  let expect = [
160\ "foobar foobar       ",
161\ "foobar foobar       ",
162\ "foobar foobar       ",
163\ "foobar foobar       ",
164\ "foobar foobar       ",
165\ "foobar foobar       ",
166\ "foobar foobar       ",
167\ "foobar foobar       ",
168\ "foobar foobar       ",
169\ "foobar TARGETx at   ",
170\ ]
171  call s:compare_lines(expect, lines)
172  call s:close_windows()
173endfunc
174
175func Test_virtual_char_and_block()
176  call s:test_windows()
177  call setline(1, "1111-1111-1111-11-1111-1111-1111")
178  exe "norm! 0f-lv3lc2222\<Esc>bgj."
179  let lines = s:screen_lines([1, 2], winwidth(0))
180  let expect = [
181\ "1111-2222-1111-11-  ",
182\ "1111-2222-1111      ",
183\ ]
184  call s:compare_lines(expect, lines)
185  call s:close_windows()
186endfunc
187
188func Test_undo_after_block_visual()
189  call s:test_windows()
190  call setline(1, ["aaa", "aaa", "a"])
191  exe "norm! gg\<C-V>2j~e."
192  let lines = s:screen_lines([1, 3], winwidth(0))
193  let expect = [
194\ "AaA                 ",
195\ "AaA                 ",
196\ "A                   ",
197\ ]
198  call s:compare_lines(expect, lines)
199  call s:close_windows()
200endfunc
201
202func Test_norm_after_block_visual()
203  call s:test_windows()
204  call setline(1, ["abcd{ef", "ghijklm", "no}pgrs"])
205  exe "norm! ggf{\<C-V>\<C-V>c%"
206  let lines = s:screen_lines([1, 3], winwidth(0))
207  let expect = [
208\ "abcdpgrs            ",
209\ "~                   ",
210\ "~                   ",
211\ ]
212  call s:compare_lines(expect, lines)
213  call s:close_windows()
214endfunc
215
216func Test_block_replace_after_wrapping()
217  call s:test_windows()
218  call setline(1, repeat("a", 150))
219  exe "norm! 0yypk147|\<C-V>jr0"
220  call assert_equal(repeat("a", 146) . "0aaa", getline(1))
221  call assert_equal(repeat("a", 146) . "0aaa", getline(2))
222  let lines = s:screen_lines([1, 10], winwidth(0))
223  let expect = [
224\ "aaaaaaaaaaaaaaaaaaaa",
225\ "aaaaaaaaaaaaaaaaaaaa",
226\ "aaaaaaaaaaaaaaaaaaaa",
227\ "aaaaaaaaaaaaaaaaaaaa",
228\ "aaaaaaaaaaaaaaaaaaaa",
229\ "aaaaaaaaaaaaaaaaaaaa",
230\ "aaaaaaaaaaaaaaaaaaaa",
231\ "aaaaaa0aaa          ",
232\ "@                   ",
233\ "@                   ",
234\ ]
235  call s:compare_lines(expect, lines)
236  call s:close_windows()
237endfunc
238
239func Test_list_with_listchars()
240  call s:test_windows('setl list listchars=space:_,trail:-,tab:>-,eol:$')
241  call setline(1, "a aaaaaaaaaaaaaaaaaaaaaa\ta ")
242  let lines = s:screen_lines([1, 3], winwidth(0))
243  let expect = [
244\ "a_                  ",
245\ "aaaaaaaaaaaaaaaaaaaa",
246\ "aa>-----a-$         ",
247\ ]
248  call s:compare_lines(expect, lines)
249  call s:close_windows()
250endfunc
251
252func Test_list_with_tab_and_skipping_first_chars()
253  call s:test_windows('setl list listchars=tab:>- ts=70 nowrap')
254  call setline(1, ["iiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa"])
255  call cursor(4,64)
256  norm! 2zl
257  let lines = s:screen_lines([1, 4], winwidth(0))
258  let expect = [
259\ "---------------aaaaa",
260\ "---------------aaaaa",
261\ "---------------aaaaa",
262\ "iiiiiiiii>-----aaaaa",
263\ ]
264  call s:compare_lines(expect, lines)
265  call s:close_windows()
266endfu
267