blob: a7c8b06f539f92eeb46bf42d1a9d8b9cd6d98d11 [file] [log] [blame]
Bram Moolenaar4d585022016-04-14 19:50:22 +02001" Test for matchadd() and conceal feature
Bram Moolenaarb0f94c12019-06-13 22:19:53 +02002
Bram Moolenaar4d585022016-04-14 19:50:22 +02003if !has('conceal')
Bram Moolenaarb0f94c12019-06-13 22:19:53 +02004 throw 'Skipped, conceal feature missing'
Bram Moolenaar4d585022016-04-14 19:50:22 +02005endif
6
7if !has('gui_running') && has('unix')
8 set term=ansi
9endif
10
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010011source shared.vim
Bram Moolenaar4d585022016-04-14 19:50:22 +020012
Bram Moolenaar1e115362019-01-09 23:01:02 +010013func Test_simple_matchadd()
Bram Moolenaar4d585022016-04-14 19:50:22 +020014 new
15
16 1put='# This is a Test'
17 " 1234567890123456
18 let expect = '# This is a Test'
19
20 call cursor(1, 1)
21 call matchadd('Conceal', '\%2l ')
22 redraw!
23 let lnum = 2
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010024 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +020025 call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
26 call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
27 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
28 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
29 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
30 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
31
32 quit!
Bram Moolenaar1e115362019-01-09 23:01:02 +010033endfunc
Bram Moolenaar4d585022016-04-14 19:50:22 +020034
Bram Moolenaar1e115362019-01-09 23:01:02 +010035func Test_simple_matchadd_and_conceal()
Bram Moolenaar4d585022016-04-14 19:50:22 +020036 new
37 setlocal concealcursor=n conceallevel=1
38
39 1put='# This is a Test'
40 " 1234567890123456
41 let expect = '#XThisXisXaXTest'
42
43 call cursor(1, 1)
44 call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'})
45 redraw!
46 let lnum = 2
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010047 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +020048 call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
49 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
50 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
51 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
52 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
53
54 quit!
Bram Moolenaar1e115362019-01-09 23:01:02 +010055endfunc
Bram Moolenaar4d585022016-04-14 19:50:22 +020056
Bram Moolenaar1e115362019-01-09 23:01:02 +010057func Test_matchadd_and_conceallevel_3()
Bram Moolenaar4d585022016-04-14 19:50:22 +020058 new
59
60 setlocal conceallevel=3
61 " set filetype and :syntax on to change screenattr()
62 setlocal filetype=conf
63 syntax on
64
65 1put='# This is a Test'
66 " 1234567890123456
67 let expect = '#ThisisaTest'
68
69 call cursor(1, 1)
70 call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'})
71 redraw!
72 let lnum = 2
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010073 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +020074 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 2))
75 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
76 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
77 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
78 call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 16))
79
80 " more matchadd()
81 " 1234567890123456
82 let expect = '#Thisisa Test'
83
84 call matchadd('ErrorMsg', '\%2l Test', 20, -1, {'conceal': 'X'})
85 redraw!
Bram Moolenaar5f73ef82018-02-27 21:09:30 +010086 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +020087 call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 2))
88 call assert_equal(screenattr(lnum, 2) , screenattr(lnum, 7))
89 call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 10))
90 call assert_equal(screenattr(lnum, 10), screenattr(lnum, 12))
91 call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 16))
92 call assert_notequal(screenattr(lnum, 10), screenattr(lnum, 16))
93
94 syntax off
95 quit!
Bram Moolenaar1e115362019-01-09 23:01:02 +010096endfunc
Bram Moolenaar4d585022016-04-14 19:50:22 +020097
Bram Moolenaar1e115362019-01-09 23:01:02 +010098func Test_default_conceal_char()
Bram Moolenaar4d585022016-04-14 19:50:22 +020099 new
100 setlocal concealcursor=n conceallevel=1
101
102 1put='# This is a Test'
103 " 1234567890123456
104 let expect = '# This is a Test'
105
106 call cursor(1, 1)
107 call matchadd('Conceal', '\%2l ', 10, -1, {})
108 redraw!
109 let lnum = 2
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100110 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +0200111 call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
112 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
113 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
114 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
115 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
116
117 " 1234567890123456
118 let expect = '#+This+is+a+Test'
119 let listchars_save = &listchars
120 set listchars=conceal:+
121 redraw!
122
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100123 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +0200124 call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
125 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
126 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
127 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
128 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
129
130 let &listchars = listchars_save
131 quit!
Bram Moolenaar1e115362019-01-09 23:01:02 +0100132endfunc
Bram Moolenaar4d585022016-04-14 19:50:22 +0200133
Bram Moolenaar1e115362019-01-09 23:01:02 +0100134func Test_syn_and_match_conceal()
Bram Moolenaar4d585022016-04-14 19:50:22 +0200135 new
136 setlocal concealcursor=n conceallevel=1
137
138 1put='# This is a Test'
139 " 1234567890123456
140 let expect = '#ZThisZisZaZTest'
141
142 call cursor(1, 1)
143 call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'})
144 syntax match MyConceal /\%2l / conceal containedin=ALL cchar=*
145 redraw!
146 let lnum = 2
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100147 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +0200148 call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
149 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
150 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
151 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
152 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
153
154 " 1234567890123456
155 let expect = '#*This*is*a*Test'
156 call clearmatches()
157 redraw!
158
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100159 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +0200160 call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
161 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
162 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
163 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
164 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
165
166 syntax off
167 quit!
Bram Moolenaar1e115362019-01-09 23:01:02 +0100168endfunc
Bram Moolenaar4d585022016-04-14 19:50:22 +0200169
Bram Moolenaar1e115362019-01-09 23:01:02 +0100170func Test_clearmatches()
Bram Moolenaar4d585022016-04-14 19:50:22 +0200171 new
172 setlocal concealcursor=n conceallevel=1
173
174 1put='# This is a Test'
175 " 1234567890123456
176 let expect = '# This is a Test'
177
178 call cursor(1, 1)
179 call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'})
180 let a = getmatches()
181 call clearmatches()
182 redraw!
183
184 let lnum = 2
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100185 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +0200186 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 2))
187 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
188 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
189 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
190 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
191
192 " reset match using setmatches()
193 " 1234567890123456
194 let expect = '#ZThisZisZaZTest'
195 call setmatches(a)
196 redraw!
197
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100198 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +0200199 call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
200 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
201 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
202 call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
203 call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
204 call assert_equal({'group': 'Conceal', 'pattern': '\%2l ', 'priority': 10, 'id': a[0].id, 'conceal': 'Z'}, a[0])
205
206 quit!
Bram Moolenaar1e115362019-01-09 23:01:02 +0100207endfunc
Bram Moolenaar4d585022016-04-14 19:50:22 +0200208
Bram Moolenaar1e115362019-01-09 23:01:02 +0100209func Test_using_matchaddpos()
Bram Moolenaar4d585022016-04-14 19:50:22 +0200210 new
211 setlocal concealcursor=n conceallevel=1
212 " set filetype and :syntax on to change screenattr()
213 setlocal filetype=conf
214 syntax on
215
216 1put='# This is a Test'
217 " 1234567890123456
218 let expect = '#Pis a Test'
219
220 call cursor(1, 1)
221 call matchaddpos('Conceal', [[2,2,6]], 10, -1, {'conceal': 'P'})
222 let a = getmatches()
223 redraw!
224
225 let lnum = 2
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100226 call assert_equal(expect, Screenline(lnum))
Bram Moolenaar4d585022016-04-14 19:50:22 +0200227 call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 2))
228 call assert_notequal(screenattr(lnum, 2) , screenattr(lnum, 7))
229 call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 7))
230 call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 10))
231 call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 12))
232 call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 16))
233 call assert_equal(screenattr(lnum, 12), screenattr(lnum, 16))
234 call assert_equal({'group': 'Conceal', 'id': a[0].id, 'priority': 10, 'pos1': [2, 2, 6], 'conceal': 'P'}, a[0])
235
236 syntax off
237 quit!
Bram Moolenaar1e115362019-01-09 23:01:02 +0100238endfunc
Bram Moolenaar4d585022016-04-14 19:50:22 +0200239
Bram Moolenaar1e115362019-01-09 23:01:02 +0100240func Test_matchadd_repeat_conceal_with_syntax_off()
Bram Moolenaar4d585022016-04-14 19:50:22 +0200241 new
242
243 " To test targets in the same line string is replaced with conceal char
244 " correctly, repeat 'TARGET'
245 1put ='TARGET_TARGETTARGET'
246 call cursor(1, 1)
247 redraw
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100248 call assert_equal('TARGET_TARGETTARGET', Screenline(2))
Bram Moolenaar4d585022016-04-14 19:50:22 +0200249
250 setlocal conceallevel=2
251 call matchadd('Conceal', 'TARGET', 10, -1, {'conceal': 't'})
252
253 redraw
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100254 call assert_equal('t_tt', Screenline(2))
Bram Moolenaar4d585022016-04-14 19:50:22 +0200255
256 quit!
Bram Moolenaar1e115362019-01-09 23:01:02 +0100257endfunc
Bram Moolenaar2f979122016-10-27 17:27:44 +0200258
Bram Moolenaar1e115362019-01-09 23:01:02 +0100259func Test_matchadd_and_syn_conceal()
Bram Moolenaar2f979122016-10-27 17:27:44 +0200260 new
261 let cnt='Inductive bool : Type := | true : bool | false : bool.'
262 let expect = 'Inductive - : Type := | true : - | false : -.'
263 0put =cnt
264 " set filetype and :syntax on to change screenattr()
265 set cole=1 cocu=nv
266 hi link CheckedByCoq WarningMsg
267 syntax on
268 syntax keyword coqKwd bool conceal cchar=-
269 redraw!
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100270 call assert_equal(expect, Screenline(1))
Bram Moolenaar2f979122016-10-27 17:27:44 +0200271 call assert_notequal(screenattr(1, 10) , screenattr(1, 11))
272 call assert_notequal(screenattr(1, 11) , screenattr(1, 12))
273 call assert_equal(screenattr(1, 11) , screenattr(1, 32))
274 call matchadd('CheckedByCoq', '\%<2l\%>9c\%<16c')
Bram Moolenaar35a1f592016-10-28 22:10:27 +0200275 redraw!
Bram Moolenaar5f73ef82018-02-27 21:09:30 +0100276 call assert_equal(expect, Screenline(1))
Bram Moolenaar2f979122016-10-27 17:27:44 +0200277 call assert_notequal(screenattr(1, 10) , screenattr(1, 11))
278 call assert_notequal(screenattr(1, 11) , screenattr(1, 12))
279 call assert_equal(screenattr(1, 11) , screenattr(1, 32))
Bram Moolenaar1e115362019-01-09 23:01:02 +0100280endfunc