blob: d9b62abd8f65341337896e54e3d489aac40d88c6 [file] [log] [blame]
Bram Moolenaar544d3bc2017-02-05 21:14:50 +01001" Test for linebreak and list option (non-utf8)
2
3set encoding=latin1
4scriptencoding latin1
5
Bram Moolenaarb46fecd2019-06-15 17:58:09 +02006source check.vim
7CheckOption linebreak
8CheckFeature conceal
Bram Moolenaar544d3bc2017-02-05 21:14:50 +01009
10source view_util.vim
11
12function s:screen_lines(lnum, width) abort
13 return ScreenLines(a:lnum, a:width)
14endfunction
15
Bram Moolenaar1e115362019-01-09 23:01:02 +010016func s:compare_lines(expect, actual)
Bram Moolenaar544d3bc2017-02-05 21:14:50 +010017 call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
Bram Moolenaar1e115362019-01-09 23:01:02 +010018endfunc
Bram Moolenaar544d3bc2017-02-05 21:14:50 +010019
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
Bram Moolenaar03c3bd92020-01-23 20:58:09 +0100103func 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
Bram Moolenaar544d3bc2017-02-05 21:14:50 +0100134func 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
Bram Moolenaarabc39ab2017-03-01 18:04:05 +0100251
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