blob: 7856ee82ab30e56821a8927c52f6a14fe2272e06 [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
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
16function! s:compare_lines(expect, actual)
17 call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
18endfunction
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
Bram Moolenaarabc39ab2017-03-01 18:04:05 +0100220
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