Mercurial > vim
comparison src/testdir/test_regexp_latin.vim @ 18898:ad9e9e92ad55 v8.2.0010
patch 8.2.0010: test64 is old style
Commit: https://github.com/vim/vim/commit/f9cb05c14753d984f002c0c090688f8510147e6b
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Dec 15 13:39:22 2019 +0100
patch 8.2.0010: test64 is old style
Problem: Test64 is old style.
Solution: Convert to new style test. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/5363)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 15 Dec 2019 13:45:04 +0100 |
parents | fec4416adb80 |
children | 2a017e9dc6da |
comparison
equal
deleted
inserted
replaced
18897:e96a45cb70d2 | 18898:ad9e9e92ad55 |
---|---|
139 " this used to be very slow, not it should be about a second | 139 " this used to be very slow, not it should be about a second |
140 set spc=\\v(((((Nxxxxxxx&&xxxx){179})+)+)+){179} | 140 set spc=\\v(((((Nxxxxxxx&&xxxx){179})+)+)+){179} |
141 call assert_inrange(0.01, 10.0, reltimefloat(reltime(start))) | 141 call assert_inrange(0.01, 10.0, reltimefloat(reltime(start))) |
142 set spc= | 142 set spc= |
143 endfunc | 143 endfunc |
144 | |
145 " Tests for regexp patterns without multi-byte support. | |
146 func Test_regexp_single_line_pat() | |
147 " tl is a List of Lists with: | |
148 " regexp engine | |
149 " regexp pattern | |
150 " text to test the pattern on | |
151 " expected match (optional) | |
152 " expected submatch 1 (optional) | |
153 " expected submatch 2 (optional) | |
154 " etc. | |
155 " When there is no match use only the first two items. | |
156 let tl = [] | |
157 | |
158 call add(tl, [2, 'ab', 'aab', 'ab']) | |
159 call add(tl, [2, 'b', 'abcdef', 'b']) | |
160 call add(tl, [2, 'bc*', 'abccccdef', 'bcccc']) | |
161 call add(tl, [2, 'bc\{-}', 'abccccdef', 'b']) | |
162 call add(tl, [2, 'bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd']) | |
163 call add(tl, [2, 'bc*', 'abbdef', 'b']) | |
164 call add(tl, [2, 'c*', 'ccc', 'ccc']) | |
165 call add(tl, [2, 'bc*', 'abdef', 'b']) | |
166 call add(tl, [2, 'c*', 'abdef', '']) | |
167 call add(tl, [2, 'bc\+', 'abccccdef', 'bcccc']) | |
168 call add(tl, [2, 'bc\+', 'abdef']) " no match | |
169 | |
170 " operator \| | |
171 call add(tl, [2, 'a\|ab', 'cabd', 'a']) " alternation is ordered | |
172 | |
173 call add(tl, [2, 'c\?', 'ccb', 'c']) | |
174 call add(tl, [2, 'bc\?', 'abd', 'b']) | |
175 call add(tl, [2, 'bc\?', 'abccd', 'bc']) | |
176 | |
177 call add(tl, [2, '\va{1}', 'ab', 'a']) | |
178 | |
179 call add(tl, [2, '\va{2}', 'aa', 'aa']) | |
180 call add(tl, [2, '\va{2}', 'caad', 'aa']) | |
181 call add(tl, [2, '\va{2}', 'aba']) | |
182 call add(tl, [2, '\va{2}', 'ab']) | |
183 call add(tl, [2, '\va{2}', 'abaa', 'aa']) | |
184 call add(tl, [2, '\va{2}', 'aaa', 'aa']) | |
185 | |
186 call add(tl, [2, '\vb{1}', 'abca', 'b']) | |
187 call add(tl, [2, '\vba{2}', 'abaa', 'baa']) | |
188 call add(tl, [2, '\vba{3}', 'aabaac']) | |
189 | |
190 call add(tl, [2, '\v(ab){1}', 'ab', 'ab', 'ab']) | |
191 call add(tl, [2, '\v(ab){1}', 'dabc', 'ab', 'ab']) | |
192 call add(tl, [2, '\v(ab){1}', 'acb']) | |
193 | |
194 call add(tl, [2, '\v(ab){0,2}', 'acb', "", ""]) | |
195 call add(tl, [2, '\v(ab){0,2}', 'ab', 'ab', 'ab']) | |
196 call add(tl, [2, '\v(ab){1,2}', 'ab', 'ab', 'ab']) | |
197 call add(tl, [2, '\v(ab){1,2}', 'ababc', 'abab', 'ab']) | |
198 call add(tl, [2, '\v(ab){2,4}', 'ababcab', 'abab', 'ab']) | |
199 call add(tl, [2, '\v(ab){2,4}', 'abcababa', 'abab', 'ab']) | |
200 | |
201 call add(tl, [2, '\v(ab){2}', 'abab', 'abab', 'ab']) | |
202 call add(tl, [2, '\v(ab){2}', 'cdababe', 'abab', 'ab']) | |
203 call add(tl, [2, '\v(ab){2}', 'abac']) | |
204 call add(tl, [2, '\v(ab){2}', 'abacabab', 'abab', 'ab']) | |
205 call add(tl, [2, '\v((ab){2}){2}', 'abababab', 'abababab', 'abab', 'ab']) | |
206 call add(tl, [2, '\v((ab){2}){2}', 'abacabababab', 'abababab', 'abab', 'ab']) | |
207 | |
208 call add(tl, [2, '\v(a{1}){1}', 'a', 'a', 'a']) | |
209 call add(tl, [2, '\v(a{2}){1}', 'aa', 'aa', 'aa']) | |
210 call add(tl, [2, '\v(a{2}){1}', 'aaac', 'aa', 'aa']) | |
211 call add(tl, [2, '\v(a{2}){1}', 'daaac', 'aa', 'aa']) | |
212 call add(tl, [2, '\v(a{1}){2}', 'daaac', 'aa', 'a']) | |
213 call add(tl, [2, '\v(a{1}){2}', 'aaa', 'aa', 'a']) | |
214 call add(tl, [2, '\v(a{2})+', 'adaac', 'aa', 'aa']) | |
215 call add(tl, [2, '\v(a{2})+', 'aa', 'aa', 'aa']) | |
216 call add(tl, [2, '\v(a{2}){1}', 'aa', 'aa', 'aa']) | |
217 call add(tl, [2, '\v(a{1}){2}', 'aa', 'aa', 'a']) | |
218 call add(tl, [2, '\v(a{1}){1}', 'a', 'a', 'a']) | |
219 call add(tl, [2, '\v(a{2}){2}', 'aaaa', 'aaaa', 'aa']) | |
220 call add(tl, [2, '\v(a{2}){2}', 'aaabaaaa', 'aaaa', 'aa']) | |
221 | |
222 call add(tl, [2, '\v(a+){2}', 'dadaac', 'aa', 'a']) | |
223 call add(tl, [2, '\v(a{3}){2}', 'aaaaaaa', 'aaaaaa', 'aaa']) | |
224 | |
225 call add(tl, [2, '\v(a{1,2}){2}', 'daaac', 'aaa', 'a']) | |
226 call add(tl, [2, '\v(a{1,3}){2}', 'daaaac', 'aaaa', 'a']) | |
227 call add(tl, [2, '\v(a{1,3}){2}', 'daaaaac', 'aaaaa', 'aa']) | |
228 call add(tl, [2, '\v(a{1,3}){3}', 'daac']) | |
229 call add(tl, [2, '\v(a{1,2}){2}', 'dac']) | |
230 call add(tl, [2, '\v(a+)+', 'daac', 'aa', 'aa']) | |
231 call add(tl, [2, '\v(a+)+', 'aaa', 'aaa', 'aaa']) | |
232 call add(tl, [2, '\v(a+){1,2}', 'aaa', 'aaa', 'aaa']) | |
233 call add(tl, [2, '\v(a+)(a+)', 'aaa', 'aaa', 'aa', 'a']) | |
234 call add(tl, [2, '\v(a{3})+', 'daaaac', 'aaa', 'aaa']) | |
235 call add(tl, [2, '\v(a|b|c)+', 'aacb', 'aacb', 'b']) | |
236 call add(tl, [2, '\v(a|b|c){2}', 'abcb', 'ab', 'b']) | |
237 call add(tl, [2, '\v(abc){2}', 'abcabd', ]) | |
238 call add(tl, [2, '\v(abc){2}', 'abdabcabc','abcabc', 'abc']) | |
239 | |
240 call add(tl, [2, 'a*', 'cc', '']) | |
241 call add(tl, [2, '\v(a*)+', 'cc', '']) | |
242 call add(tl, [2, '\v((ab)+)+', 'ab', 'ab', 'ab', 'ab']) | |
243 call add(tl, [2, '\v(((ab)+)+)+', 'ab', 'ab', 'ab', 'ab', 'ab']) | |
244 call add(tl, [2, '\v(((ab)+)+)+', 'dababc', 'abab', 'abab', 'abab', 'ab']) | |
245 call add(tl, [2, '\v(a{0,2})+', 'cc', '']) | |
246 call add(tl, [2, '\v(a*)+', '', '']) | |
247 call add(tl, [2, '\v((a*)+)+', '', '']) | |
248 call add(tl, [2, '\v((ab)*)+', '', '']) | |
249 call add(tl, [2, '\va{1,3}', 'aab', 'aa']) | |
250 call add(tl, [2, '\va{2,3}', 'abaa', 'aa']) | |
251 | |
252 call add(tl, [2, '\v((ab)+|c*)+', 'abcccaba', 'abcccab', '', 'ab']) | |
253 call add(tl, [2, '\v(a{2})|(b{3})', 'bbabbbb', 'bbb', '', 'bbb']) | |
254 call add(tl, [2, '\va{2}|b{2}', 'abab']) | |
255 call add(tl, [2, '\v(a)+|(c)+', 'bbacbaacbbb', 'a', 'a']) | |
256 call add(tl, [2, '\vab{2,3}c', 'aabbccccccccccccc', 'abbc']) | |
257 call add(tl, [2, '\vab{2,3}c', 'aabbbccccccccccccc', 'abbbc']) | |
258 call add(tl, [2, '\vab{2,3}cd{2,3}e', 'aabbbcddee', 'abbbcdde']) | |
259 call add(tl, [2, '\va(bc){2}d', 'aabcbfbc' ]) | |
260 call add(tl, [2, '\va*a{2}', 'a', ]) | |
261 call add(tl, [2, '\va*a{2}', 'aa', 'aa' ]) | |
262 call add(tl, [2, '\va*a{2}', 'aaa', 'aaa' ]) | |
263 call add(tl, [2, '\va*a{2}', 'bbbabcc', ]) | |
264 call add(tl, [2, '\va*b*|a*c*', 'a', 'a']) | |
265 call add(tl, [2, '\va{1}b{1}|a{1}b{1}', '']) | |
266 | |
267 " submatches | |
268 call add(tl, [2, '\v(a)', 'ab', 'a', 'a']) | |
269 call add(tl, [2, '\v(a)(b)', 'ab', 'ab', 'a', 'b']) | |
270 call add(tl, [2, '\v(ab)(b)(c)', 'abbc', 'abbc', 'ab', 'b', 'c']) | |
271 call add(tl, [2, '\v((a)(b))', 'ab', 'ab', 'ab', 'a', 'b']) | |
272 call add(tl, [2, '\v(a)|(b)', 'ab', 'a', 'a']) | |
273 | |
274 call add(tl, [2, '\v(a*)+', 'aaaa', 'aaaa', '']) | |
275 call add(tl, [2, 'x', 'abcdef']) | |
276 | |
277 " | |
278 " Simple tests | |
279 " | |
280 | |
281 " Search single groups | |
282 call add(tl, [2, 'ab', 'aab', 'ab']) | |
283 call add(tl, [2, 'ab', 'baced']) | |
284 call add(tl, [2, 'ab', ' ab ', 'ab']) | |
285 | |
286 " Search multi-modifiers | |
287 call add(tl, [2, 'x*', 'xcd', 'x']) | |
288 call add(tl, [2, 'x*', 'xxxxxxxxxxxxxxxxsofijiojgf', 'xxxxxxxxxxxxxxxx']) | |
289 " empty match is good | |
290 call add(tl, [2, 'x*', 'abcdoij', '']) | |
291 " no match here | |
292 call add(tl, [2, 'x\+', 'abcdoin']) | |
293 call add(tl, [2, 'x\+', 'abcdeoijdfxxiuhfij', 'xx']) | |
294 call add(tl, [2, 'x\+', 'xxxxx', 'xxxxx']) | |
295 call add(tl, [2, 'x\+', 'abc x siufhiush xxxxxxxxx', 'x']) | |
296 call add(tl, [2, 'x\=', 'x sdfoij', 'x']) | |
297 call add(tl, [2, 'x\=', 'abc sfoij', '']) " empty match is good | |
298 call add(tl, [2, 'x\=', 'xxxxxxxxx c', 'x']) | |
299 call add(tl, [2, 'x\?', 'x sdfoij', 'x']) | |
300 " empty match is good | |
301 call add(tl, [2, 'x\?', 'abc sfoij', '']) | |
302 call add(tl, [2, 'x\?', 'xxxxxxxxxx c', 'x']) | |
303 | |
304 call add(tl, [2, 'a\{0,0}', 'abcdfdoij', '']) | |
305 " same thing as 'a?' | |
306 call add(tl, [2, 'a\{0,1}', 'asiubid axxxaaa', 'a']) | |
307 " same thing as 'a\{0,1}' | |
308 call add(tl, [2, 'a\{1,0}', 'asiubid axxxaaa', 'a']) | |
309 call add(tl, [2, 'a\{3,6}', 'aa siofuh']) | |
310 call add(tl, [2, 'a\{3,6}', 'aaaaa asfoij afaa', 'aaaaa']) | |
311 call add(tl, [2, 'a\{3,6}', 'aaaaaaaa', 'aaaaaa']) | |
312 call add(tl, [2, 'a\{0}', 'asoiuj', '']) | |
313 call add(tl, [2, 'a\{2}', 'aaaa', 'aa']) | |
314 call add(tl, [2, 'a\{2}', 'iuash fiusahfliusah fiushfilushfi uhsaifuh askfj nasfvius afg aaaa sfiuhuhiushf', 'aa']) | |
315 call add(tl, [2, 'a\{2}', 'abcdefghijklmnopqrestuvwxyz1234567890']) | |
316 " same thing as 'a*' | |
317 call add(tl, [2, 'a\{0,}', 'oij sdigfusnf', '']) | |
318 call add(tl, [2, 'a\{0,}', 'aaaaa aa', 'aaaaa']) | |
319 call add(tl, [2, 'a\{2,}', 'sdfiougjdsafg']) | |
320 call add(tl, [2, 'a\{2,}', 'aaaaasfoij ', 'aaaaa']) | |
321 call add(tl, [2, 'a\{5,}', 'xxaaaaxxx ']) | |
322 call add(tl, [2, 'a\{5,}', 'xxaaaaaxxx ', 'aaaaa']) | |
323 call add(tl, [2, 'a\{,0}', 'oidfguih iuhi hiu aaaa', '']) | |
324 call add(tl, [2, 'a\{,5}', 'abcd', 'a']) | |
325 call add(tl, [2, 'a\{,5}', 'aaaaaaaaaa', 'aaaaa']) | |
326 " leading star as normal char when \{} follows | |
327 call add(tl, [2, '^*\{4,}$', '***']) | |
328 call add(tl, [2, '^*\{4,}$', '****', '****']) | |
329 call add(tl, [2, '^*\{4,}$', '*****', '*****']) | |
330 " same thing as 'a*' | |
331 call add(tl, [2, 'a\{}', 'bbbcddiuhfcd', '']) | |
332 call add(tl, [2, 'a\{}', 'aaaaioudfh coisf jda', 'aaaa']) | |
333 | |
334 call add(tl, [2, 'a\{-0,0}', 'abcdfdoij', '']) | |
335 " anti-greedy version of 'a?' | |
336 call add(tl, [2, 'a\{-0,1}', 'asiubid axxxaaa', '']) | |
337 call add(tl, [2, 'a\{-3,6}', 'aa siofuh']) | |
338 call add(tl, [2, 'a\{-3,6}', 'aaaaa asfoij afaa', 'aaa']) | |
339 call add(tl, [2, 'a\{-3,6}', 'aaaaaaaa', 'aaa']) | |
340 call add(tl, [2, 'a\{-0}', 'asoiuj', '']) | |
341 call add(tl, [2, 'a\{-2}', 'aaaa', 'aa']) | |
342 call add(tl, [2, 'a\{-2}', 'abcdefghijklmnopqrestuvwxyz1234567890']) | |
343 call add(tl, [2, 'a\{-0,}', 'oij sdigfusnf', '']) | |
344 call add(tl, [2, 'a\{-0,}', 'aaaaa aa', '']) | |
345 call add(tl, [2, 'a\{-2,}', 'sdfiougjdsafg']) | |
346 call add(tl, [2, 'a\{-2,}', 'aaaaasfoij ', 'aa']) | |
347 call add(tl, [2, 'a\{-,0}', 'oidfguih iuhi hiu aaaa', '']) | |
348 call add(tl, [2, 'a\{-,5}', 'abcd', '']) | |
349 call add(tl, [2, 'a\{-,5}', 'aaaaaaaaaa', '']) | |
350 " anti-greedy version of 'a*' | |
351 call add(tl, [2, 'a\{-}', 'bbbcddiuhfcd', '']) | |
352 call add(tl, [2, 'a\{-}', 'aaaaioudfh coisf jda', '']) | |
353 | |
354 " Test groups of characters and submatches | |
355 call add(tl, [2, '\(abc\)*', 'abcabcabc', 'abcabcabc', 'abc']) | |
356 call add(tl, [2, '\(ab\)\+', 'abababaaaaa', 'ababab', 'ab']) | |
357 call add(tl, [2, '\(abaaaaa\)*cd', 'cd', 'cd', '']) | |
358 call add(tl, [2, '\(test1\)\? \(test2\)\?', 'test1 test3', 'test1 ', 'test1', '']) | |
359 call add(tl, [2, '\(test1\)\= \(test2\) \(test4443\)\=', ' test2 test4443 yupiiiiiiiiiii', ' test2 test4443', '', 'test2', 'test4443']) | |
360 call add(tl, [2, '\(\(sub1\) hello \(sub 2\)\)', 'asterix sub1 hello sub 2 obelix', 'sub1 hello sub 2', 'sub1 hello sub 2', 'sub1', 'sub 2']) | |
361 call add(tl, [2, '\(\(\(yyxxzz\)\)\)', 'abcdddsfiusfyyzzxxyyxxzz', 'yyxxzz', 'yyxxzz', 'yyxxzz', 'yyxxzz']) | |
362 call add(tl, [2, '\v((ab)+|c+)+', 'abcccaba', 'abcccab', 'ab', 'ab']) | |
363 call add(tl, [2, '\v((ab)|c*)+', 'abcccaba', 'abcccab', '', 'ab']) | |
364 call add(tl, [2, '\v(a(c*)+b)+', 'acbababaaa', 'acbabab', 'ab', '']) | |
365 call add(tl, [2, '\v(a|b*)+', 'aaaa', 'aaaa', '']) | |
366 call add(tl, [2, '\p*', 'aá ', 'aá ']) | |
367 | |
368 " Test greedy-ness and lazy-ness | |
369 call add(tl, [2, 'a\{-2,7}','aaaaaaaaaaaaa', 'aa']) | |
370 call add(tl, [2, 'a\{-2,7}x','aaaaaaaaax', 'aaaaaaax']) | |
371 call add(tl, [2, 'a\{2,7}','aaaaaaaaaaaaaaaaaaaa', 'aaaaaaa']) | |
372 call add(tl, [2, 'a\{2,7}x','aaaaaaaaax', 'aaaaaaax']) | |
373 call add(tl, [2, '\vx(.{-,8})yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz','ayxa','xayzxayz']) | |
374 call add(tl, [2, '\vx(.*)yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz', 'ayxayzxayzxa','']) | |
375 call add(tl, [2, '\v(a{1,2}){-2,3}','aaaaaaa','aaaa','aa']) | |
376 call add(tl, [2, '\v(a{-1,3})+', 'aa', 'aa', 'a']) | |
377 call add(tl, [2, '^\s\{-}\zs\( x\|x$\)', ' x', ' x', ' x']) | |
378 call add(tl, [2, '^\s\{-}\zs\(x\| x$\)', ' x', ' x', ' x']) | |
379 call add(tl, [2, '^\s\{-}\ze\(x\| x$\)', ' x', '', ' x']) | |
380 call add(tl, [2, '^\(\s\{-}\)\(x\| x$\)', ' x', ' x', '', ' x']) | |
381 | |
382 " Test Character classes | |
383 call add(tl, [2, '\d\+e\d\d','test 10e23 fd','10e23']) | |
384 | |
385 " Test collections and character range [] | |
386 call add(tl, [2, '\v[a]', 'abcd', 'a']) | |
387 call add(tl, [2, 'a[bcd]', 'abcd', 'ab']) | |
388 call add(tl, [2, 'a[b-d]', 'acbd', 'ac']) | |
389 call add(tl, [2, '[a-d][e-f][x-x]d', 'cexdxx', 'cexd']) | |
390 call add(tl, [2, '\v[[:alpha:]]+', 'abcdefghijklmnopqrstuvwxyz6','abcdefghijklmnopqrstuvwxyz']) | |
391 call add(tl, [2, '[[:alpha:]\+]', '6x8','x']) | |
392 call add(tl, [2, '[^abc]\+','abcabcabc']) | |
393 call add(tl, [2, '[^abc]','defghiasijvoinasoiunbvb','d']) | |
394 call add(tl, [2, '[^abc]\+','ddddddda','ddddddd']) | |
395 call add(tl, [2, '[^a-d]\+','aaaAAAZIHFNCddd','AAAZIHFNC']) | |
396 call add(tl, [2, '[a-f]*','iiiiiiii','']) | |
397 call add(tl, [2, '[a-f]*','abcdefgh','abcdef']) | |
398 call add(tl, [2, '[^a-f]\+','abcdefgh','gh']) | |
399 call add(tl, [2, '[a-c]\{-3,6}','abcabc','abc']) | |
400 call add(tl, [2, '[^[:alpha:]]\+','abcccadfoij7787ysf287yrnccdu','7787']) | |
401 call add(tl, [2, '[-a]', '-', '-']) | |
402 call add(tl, [2, '[a-]', '-', '-']) | |
403 call add(tl, [2, '[a-f]*\c','ABCDEFGH','ABCDEF']) | |
404 call add(tl, [2, '[abc][xyz]\c','-af-AF-BY--','BY']) | |
405 " filename regexp | |
406 call add(tl, [2, '[-./[:alnum:]_~]\+', 'log13.file', 'log13.file']) | |
407 " special chars | |
408 call add(tl, [2, '[\]\^\-\\]\+', '\^\\\-\---^', '\^\\\-\---^']) | |
409 " collation elem | |
410 call add(tl, [2, '[[.a.]]\+', 'aa', 'aa']) | |
411 " middle of regexp | |
412 call add(tl, [2, 'abc[0-9]*ddd', 'siuhabc ii']) | |
413 call add(tl, [2, 'abc[0-9]*ddd', 'adf abc44482ddd oijs', 'abc44482ddd']) | |
414 call add(tl, [2, '\_[0-9]\+', 'asfi9888u', '9888']) | |
415 call add(tl, [2, '[0-9\n]\+', 'asfi9888u', '9888']) | |
416 call add(tl, [2, '\_[0-9]\+', "asfi\n9888u", "\n9888"]) | |
417 call add(tl, [2, '\_f', " \na ", "\n"]) | |
418 call add(tl, [2, '\_f\+', " \na ", "\na"]) | |
419 call add(tl, [2, '[0-9A-Za-z-_.]\+', " @0_a.A-{ ", "0_a.A-"]) | |
420 | |
421 " Test start/end of line, start/end of file | |
422 call add(tl, [2, '^a.', "a_\nb ", "a_"]) | |
423 call add(tl, [2, '^a.', "b a \na_"]) | |
424 call add(tl, [2, '.a$', " a\n "]) | |
425 call add(tl, [2, '.a$', " a b\n_a", "_a"]) | |
426 call add(tl, [2, '\%^a.', "a a\na", "a "]) | |
427 call add(tl, [2, '\%^a', " a \na "]) | |
428 call add(tl, [2, '.a\%$', " a\n "]) | |
429 call add(tl, [2, '.a\%$', " a\n_a", "_a"]) | |
430 | |
431 " Test recognition of character classes | |
432 call add(tl, [2, '[0-7]\+', 'x0123456789x', '01234567']) | |
433 call add(tl, [2, '[^0-7]\+', '0a;X+% 897', 'a;X+% 89']) | |
434 call add(tl, [2, '[0-9]\+', 'x0123456789x', '0123456789']) | |
435 call add(tl, [2, '[^0-9]\+', '0a;X+% 9', 'a;X+% ']) | |
436 call add(tl, [2, '[0-9a-fA-F]\+', 'x0189abcdefg', '0189abcdef']) | |
437 call add(tl, [2, '[^0-9A-Fa-f]\+', '0189g;X+% ab', 'g;X+% ']) | |
438 call add(tl, [2, '[a-z_A-Z0-9]\+', ';+aso_SfOij ', 'aso_SfOij']) | |
439 call add(tl, [2, '[^a-z_A-Z0-9]\+', 'aSo_;+% sfOij', ';+% ']) | |
440 call add(tl, [2, '[a-z_A-Z]\+', '0abyz_ABYZ;', 'abyz_ABYZ']) | |
441 call add(tl, [2, '[^a-z_A-Z]\+', 'abAB_09;+% yzYZ', '09;+% ']) | |
442 call add(tl, [2, '[a-z]\+', '0abcxyz1', 'abcxyz']) | |
443 call add(tl, [2, '[a-z]\+', 'AabxyzZ', 'abxyz']) | |
444 call add(tl, [2, '[^a-z]\+', 'a;X09+% x', ';X09+% ']) | |
445 call add(tl, [2, '[^a-z]\+', 'abX0;%yz', 'X0;%']) | |
446 call add(tl, [2, '[a-zA-Z]\+', '0abABxzXZ9', 'abABxzXZ']) | |
447 call add(tl, [2, '[^a-zA-Z]\+', 'ab09_;+ XZ', '09_;+ ']) | |
448 call add(tl, [2, '[A-Z]\+', 'aABXYZz', 'ABXYZ']) | |
449 call add(tl, [2, '[^A-Z]\+', 'ABx0;%YZ', 'x0;%']) | |
450 call add(tl, [2, '[a-z]\+\c', '0abxyzABXYZ;', 'abxyzABXYZ']) | |
451 call add(tl, [2, '[A-Z]\+\c', '0abABxzXZ9', 'abABxzXZ']) | |
452 call add(tl, [2, '\c[^a-z]\+', 'ab09_;+ XZ', '09_;+ ']) | |
453 call add(tl, [2, '\c[^A-Z]\+', 'ab09_;+ XZ', '09_;+ ']) | |
454 call add(tl, [2, '\C[^A-Z]\+', 'ABCOIJDEOIFNSD jsfoij sa', ' jsfoij sa']) | |
455 | |
456 " Tests for \z features | |
457 " match ends at \ze | |
458 call add(tl, [2, 'xx \ze test', 'xx ']) | |
459 call add(tl, [2, 'abc\zeend', 'oij abcend', 'abc']) | |
460 call add(tl, [2, 'aa\zebb\|aaxx', ' aabb ', 'aa']) | |
461 call add(tl, [2, 'aa\zebb\|aaxx', ' aaxx ', 'aaxx']) | |
462 call add(tl, [2, 'aabb\|aa\zebb', ' aabb ', 'aabb']) | |
463 call add(tl, [2, 'aa\zebb\|aaebb', ' aabb ', 'aa']) | |
464 " match starts at \zs | |
465 call add(tl, [2, 'abc\zsdd', 'ddabcddxyzt', 'dd']) | |
466 call add(tl, [2, 'aa \zsax', ' ax']) | |
467 call add(tl, [2, 'abc \zsmatch\ze abc', 'abc abc abc match abc abc', 'match']) | |
468 call add(tl, [2, '\v(a \zsif .*){2}', 'a if then a if last', 'if last', 'a if last']) | |
469 call add(tl, [2, '\>\zs.', 'aword. ', '.']) | |
470 call add(tl, [2, '\s\+\ze\[/\|\s\zs\s\+', 'is [a t', ' ']) | |
471 | |
472 " Tests for \@= and \& features | |
473 call add(tl, [2, 'abc\@=', 'abc', 'ab']) | |
474 call add(tl, [2, 'abc\@=cd', 'abcd', 'abcd']) | |
475 call add(tl, [2, 'abc\@=', 'ababc', 'ab']) | |
476 " will never match, no matter the input text | |
477 call add(tl, [2, 'abcd\@=e', 'abcd']) | |
478 " will never match | |
479 call add(tl, [2, 'abcd\@=e', 'any text in here ... ']) | |
480 call add(tl, [2, '\v(abc)@=..', 'xabcd', 'ab', 'abc']) | |
481 call add(tl, [2, '\(.*John\)\@=.*Bob', 'here is John, and here is B']) | |
482 call add(tl, [2, '\(John.*\)\@=.*Bob', 'John is Bobs friend', 'John is Bob', 'John is Bobs friend']) | |
483 call add(tl, [2, '\<\S\+\())\)\@=', '$((i=i+1))', 'i=i+1', '))']) | |
484 call add(tl, [2, '.*John\&.*Bob', 'here is John, and here is B']) | |
485 call add(tl, [2, '.*John\&.*Bob', 'John is Bobs friend', 'John is Bob']) | |
486 call add(tl, [2, '\v(test1)@=.*yep', 'this is a test1, yep it is', 'test1, yep', 'test1']) | |
487 call add(tl, [2, 'foo\(bar\)\@!', 'foobar']) | |
488 call add(tl, [2, 'foo\(bar\)\@!', 'foo bar', 'foo']) | |
489 call add(tl, [2, 'if \(\(then\)\@!.\)*$', ' if then else']) | |
490 call add(tl, [2, 'if \(\(then\)\@!.\)*$', ' if else ', 'if else ', ' ']) | |
491 call add(tl, [2, '\(foo\)\@!bar', 'foobar', 'bar']) | |
492 call add(tl, [2, '\(foo\)\@!...bar', 'foobar']) | |
493 call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' bar foo ']) | |
494 call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo bar ']) | |
495 call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo xxx ', 'foo']) | |
496 call add(tl, [2, '[ ]\@!\p\%([ ]\@!\p\)*:', 'implicit mappings:', 'mappings:']) | |
497 call add(tl, [2, '[ ]\@!\p\([ ]\@!\p\)*:', 'implicit mappings:', 'mappings:', 's']) | |
498 call add(tl, [2, 'm\k\+_\@=\%(_\@!\k\)\@<=\k\+e', 'mx__xe', 'mx__xe']) | |
499 call add(tl, [2, '\%(\U\@<=S\k*\|S\l\)R', 'SuR', 'SuR']) | |
500 | |
501 " Combining different tests and features | |
502 call add(tl, [2, '[[:alpha:]]\{-2,6}', '787abcdiuhsasiuhb4', 'ab']) | |
503 call add(tl, [2, '', 'abcd', '']) | |
504 call add(tl, [2, '\v(())', 'any possible text', '']) | |
505 call add(tl, [2, '\v%(ab(xyz)c)', ' abxyzc ', 'abxyzc', 'xyz']) | |
506 call add(tl, [2, '\v(test|)empty', 'tesempty', 'empty', '']) | |
507 call add(tl, [2, '\v(a|aa)(a|aa)', 'aaa', 'aa', 'a', 'a']) | |
508 | |
509 " \%u and friends | |
510 call add(tl, [2, '\%d32', 'yes no', ' ']) | |
511 call add(tl, [2, '\%o40', 'yes no', ' ']) | |
512 call add(tl, [2, '\%x20', 'yes no', ' ']) | |
513 call add(tl, [2, '\%u0020', 'yes no', ' ']) | |
514 call add(tl, [2, '\%U00000020', 'yes no', ' ']) | |
515 call add(tl, [2, '\%d0', "yes\x0ano", "\x0a"]) | |
516 | |
517 "" \%[abc] | |
518 call add(tl, [2, 'foo\%[bar]', 'fobar']) | |
519 call add(tl, [2, 'foo\%[bar]', 'foobar', 'foobar']) | |
520 call add(tl, [2, 'foo\%[bar]', 'fooxx', 'foo']) | |
521 call add(tl, [2, 'foo\%[bar]', 'foobxx', 'foob']) | |
522 call add(tl, [2, 'foo\%[bar]', 'foobaxx', 'fooba']) | |
523 call add(tl, [2, 'foo\%[bar]', 'foobarxx', 'foobar']) | |
524 call add(tl, [2, 'foo\%[bar]x', 'foobxx', 'foobx']) | |
525 call add(tl, [2, 'foo\%[bar]x', 'foobarxx', 'foobarx']) | |
526 call add(tl, [2, '\%[bar]x', 'barxx', 'barx']) | |
527 call add(tl, [2, '\%[bar]x', 'bxx', 'bx']) | |
528 call add(tl, [2, '\%[bar]x', 'xxx', 'x']) | |
529 call add(tl, [2, 'b\%[[ao]r]', 'bar bor', 'bar']) | |
530 call add(tl, [2, 'b\%[[]]r]', 'b]r bor', 'b]r']) | |
531 call add(tl, [2, '@\%[\w\-]*', '<http://john.net/pandoc/>[@pandoc]', '@pandoc']) | |
532 | |
533 " Alternatives, must use first longest match | |
534 call add(tl, [2, 'goo\|go', 'google', 'goo']) | |
535 call add(tl, [2, '\<goo\|\<go', 'google', 'goo']) | |
536 call add(tl, [2, '\<goo\|go', 'google', 'goo']) | |
537 | |
538 " Back references | |
539 call add(tl, [2, '\(\i\+\) \1', ' abc abc', 'abc abc', 'abc']) | |
540 call add(tl, [2, '\(\i\+\) \1', 'xgoo goox', 'goo goo', 'goo']) | |
541 call add(tl, [2, '\(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9', 'xabcddefghiabcddefghix', 'abcddefghiabcddefghi', 'a', 'b', 'c', 'dd', 'e', 'f', 'g', 'h', 'i']) | |
542 call add(tl, [2, '\(\d*\)a \1b', ' a b ', 'a b', '']) | |
543 call add(tl, [2, '^.\(.\).\_..\1.', "aaa\naaa\nb", "aaa\naaa", 'a']) | |
544 call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<!$', 'foo.bat/foo.com', 'foo.bat/foo.com', 'bat']) | |
545 call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<!$', 'foo.bat/foo.bat']) | |
546 call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<=$', 'foo.bat/foo.bat', 'foo.bat/foo.bat', 'bat', 'bat']) | |
547 call add(tl, [2, '\\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}', '2013-06-27${0}', '${0}', '0']) | |
548 call add(tl, [2, '^\(a*\)\1$', 'aaaaaaaa', 'aaaaaaaa', 'aaaa']) | |
549 call add(tl, [2, '^\(a\{-2,}\)\1\+$', 'aaaaaaaaa', 'aaaaaaaaa', 'aaa']) | |
550 | |
551 " Look-behind with limit | |
552 call add(tl, [2, '<\@<=span.', 'xxspanxx<spanyyy', 'spany']) | |
553 call add(tl, [2, '<\@1<=span.', 'xxspanxx<spanyyy', 'spany']) | |
554 call add(tl, [2, '<\@2<=span.', 'xxspanxx<spanyyy', 'spany']) | |
555 call add(tl, [2, '\(<<\)\@<=span.', 'xxspanxxxx<spanxx<<spanyyy', 'spany', '<<']) | |
556 call add(tl, [2, '\(<<\)\@1<=span.', 'xxspanxxxx<spanxx<<spanyyy']) | |
557 call add(tl, [2, '\(<<\)\@2<=span.', 'xxspanxxxx<spanxx<<spanyyy', 'spany', '<<']) | |
558 call add(tl, [2, '\(foo\)\@<!bar.', 'xx foobar1 xbar2 xx', 'bar2']) | |
559 | |
560 " look-behind match in front of a zero-width item | |
561 call add(tl, [2, '\v\C%(<Last Changed:\s+)@<=.*$', '" test header']) | |
562 call add(tl, [2, '\v\C%(<Last Changed:\s+)@<=.*$', '" Last Changed: 1970', '1970']) | |
563 call add(tl, [2, '\(foo\)\@<=\>', 'foobar']) | |
564 call add(tl, [2, '\(foo\)\@<=\>', 'barfoo', '', 'foo']) | |
565 call add(tl, [2, '\(foo\)\@<=.*', 'foobar', 'bar', 'foo']) | |
566 | |
567 " complicated look-behind match | |
568 call add(tl, [2, '\(r\@<=\|\w\@<!\)\/', 'x = /word/;', '/']) | |
569 call add(tl, [2, '^[a-z]\+\ze \&\(asdf\)\@<!', 'foo bar', 'foo']) | |
570 | |
571 "" \@> | |
572 call add(tl, [2, '\(a*\)\@>a', 'aaaa']) | |
573 call add(tl, [2, '\(a*\)\@>b', 'aaab', 'aaab', 'aaa']) | |
574 call add(tl, [2, '^\(.\{-}b\)\@>.', ' abcbd', ' abc', ' ab']) | |
575 call add(tl, [2, '\(.\{-}\)\(\)\@>$', 'abc', 'abc', 'abc', '']) | |
576 " TODO: BT engine does not restore submatch after failure | |
577 call add(tl, [1, '\(a*\)\@>a\|a\+', 'aaaa', 'aaaa']) | |
578 | |
579 " "\_" prepended negated collection matches EOL | |
580 call add(tl, [2, '\_[^8-9]\+', "asfi\n9888", "asfi\n"]) | |
581 call add(tl, [2, '\_[^a]\+', "asfi\n9888", "sfi\n9888"]) | |
582 | |
583 " Requiring lots of states. | |
584 call add(tl, [2, '[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}', " 12345678-1234-1234-1234-123456789012 ", "12345678-1234-1234-1234-123456789012", "1234-"]) | |
585 | |
586 " Skip adding state twice | |
587 call add(tl, [2, '^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=', "#if FOO", "#if", ' FOO']) | |
588 | |
589 " Test \%V atom | |
590 call add(tl, [2, '\%>70vGesamt', 'Jean-Michel Charlier & Victor Hubinon\Gesamtausgabe [Salleck] Buck Danny {Jean-Michel Charlier & Victor Hubinon}\Gesamtausgabe', 'Gesamt']) | |
591 | |
592 " Run the tests | |
593 for t in tl | |
594 let re = t[0] | |
595 let pat = t[1] | |
596 let text = t[2] | |
597 let matchidx = 3 | |
598 for engine in [0, 1, 2] | |
599 if engine == 2 && re == 0 || engine == 1 && re == 1 | |
600 continue | |
601 endif | |
602 let ®expengine = engine | |
603 try | |
604 let l = matchlist(text, pat) | |
605 catch | |
606 call assert_report('Error ' . engine . ': pat: \"' . pat | |
607 \ . '\", text: \"' . text . '\", caused an exception: \"' | |
608 \ . v:exception . '\"') | |
609 endtry | |
610 " check the match itself | |
611 if len(l) == 0 && len(t) > matchidx | |
612 call assert_report('Error ' . engine . ': pat: \"' . pat | |
613 \ . '\", text: \"' . text . '\", did not match, expected: \"' | |
614 \ . t[matchidx] . '\"') | |
615 elseif len(l) > 0 && len(t) == matchidx | |
616 call assert_report('Error ' . engine . ': pat: \"' . pat | |
617 \ . '\", text: \"' . text . '\", match: \"' . l[0] | |
618 \ . '\", expected no match') | |
619 elseif len(t) > matchidx && l[0] != t[matchidx] | |
620 call assert_report('Error ' . engine . ': pat: \"' . pat | |
621 \ . '\", text: \"' . text . '\", match: \"' . l[0] | |
622 \ . '\", expected: \"' . t[matchidx] . '\"') | |
623 else | |
624 " Test passed | |
625 endif | |
626 | |
627 " check all the nine submatches | |
628 if len(l) > 0 | |
629 for i in range(1, 9) | |
630 if len(t) <= matchidx + i | |
631 let e = '' | |
632 else | |
633 let e = t[matchidx + i] | |
634 endif | |
635 if l[i] != e | |
636 call assert_report('Error ' . engine . ': pat: \"' . pat | |
637 \ . '\", text: \"' . text . '\", submatch ' . i . ': \"' | |
638 \ . l[i] . '\", expected: \"' . e . '\"') | |
639 endif | |
640 endfor | |
641 unlet i | |
642 endif | |
643 endfor | |
644 endfor | |
645 | |
646 unlet t tl e l | |
647 endfunc | |
648 | |
649 " Tests for multi-line regexp patterns without multi-byte support. | |
650 func Test_regexp_multiline_pat() | |
651 let tl = [] | |
652 | |
653 " back references | |
654 call add(tl, [2, '^.\(.\).\_..\1.', ['aaa', 'aaa', 'b'], ['XX', 'b']]) | |
655 call add(tl, [2, '\v.*\/(.*)\n.*\/\1$', ['./Dir1/Dir2/zyxwvuts.txt', './Dir1/Dir2/abcdefgh.bat', '', './Dir1/Dir2/file1.txt', './OtherDir1/OtherDir2/file1.txt'], ['./Dir1/Dir2/zyxwvuts.txt', './Dir1/Dir2/abcdefgh.bat', '', 'XX']]) | |
656 | |
657 " line breaks | |
658 call add(tl, [2, '\S.*\nx', ['abc', 'def', 'ghi', 'xjk', 'lmn'], ['abc', 'def', 'XXjk', 'lmn']]) | |
659 | |
660 " Check that \_[0-9] matching EOL does not break a following \> | |
661 call add(tl, [2, '\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>', ['', 'localnet/192.168.0.1', ''], ['', 'localnet/XX', '']]) | |
662 | |
663 " Check a pattern with a line break and ^ and $ | |
664 call add(tl, [2, 'a\n^b$\n^c', ['a', 'b', 'c'], ['XX']]) | |
665 | |
666 call add(tl, [2, '\(^.\+\n\)\1', [' dog', ' dog', 'asdf'], ['XXasdf']]) | |
667 | |
668 " Run the multi-line tests | |
669 for t in tl | |
670 let re = t[0] | |
671 let pat = t[1] | |
672 let before = t[2] | |
673 let after = t[3] | |
674 for engine in [0, 1, 2] | |
675 if engine == 2 && re == 0 || engine == 1 && re ==1 | |
676 continue | |
677 endif | |
678 let ®expengine = engine | |
679 new | |
680 call setline(1, before) | |
681 exe '%s/' . pat . '/XX/' | |
682 let result = getline(1, '$') | |
683 q! | |
684 if result != after | |
685 call assert_report('Error: pat: \"' . pat . '\", text: \"' | |
686 \ . string(before) . '\", expected: \"' . string(after) | |
687 \ . '\", got: \"' . string(result) . '\"') | |
688 else | |
689 " Test passed | |
690 endif | |
691 endfor | |
692 endfor | |
693 unlet t tl | |
694 endfunc | |
695 | |
696 " Check that using a pattern on two lines doesn't get messed up by using | |
697 " matchstr() with \ze in between. | |
698 func Test_matchstr_with_ze() | |
699 new | |
700 call append(0, ['Substitute here:', '<T="">Ta 5</Title>', | |
701 \ '<T="">Ac 7</Title>']) | |
702 call cursor(1, 1) | |
703 set re=0 | |
704 | |
705 .+1,.+2s/""/\='"' . matchstr(getline("."), '\d\+\ze<') . '"' | |
706 call assert_equal(['Substitute here:', '<T="5">Ta 5</Title>', | |
707 \ '<T="7">Ac 7</Title>', ''], getline(1, '$')) | |
708 | |
709 bwipe! | |
710 endfunc | |
711 | |
712 " Check a pattern with a look beind crossing a line boundary | |
713 func Test_lookbehind_across_line() | |
714 new | |
715 call append(0, ['Behind:', 'asdfasd<yyy', 'xxstart1', 'asdfasd<yy', | |
716 \ 'xxxstart2', 'asdfasd<yy', 'xxstart3']) | |
717 call cursor(1, 1) | |
718 call search('\(<\_[xy]\+\)\@3<=start') | |
719 call assert_equal([0, 7, 3, 0], getpos('.')) | |
720 bwipe! | |
721 endfunc | |
722 | |
723 " Check matching Visual area | |
724 func Test_matching_visual_area() | |
725 new | |
726 call append(0, ['Visual:', 'thexe the thexethe', 'andaxand andaxand', | |
727 \ 'oooxofor foroxooo', 'oooxofor foroxooo']) | |
728 call cursor(1, 1) | |
729 exe "normal jfxvfx:s/\\%Ve/E/g\<CR>" | |
730 exe "normal jV:s/\\%Va/A/g\<CR>" | |
731 exe "normal jfx\<C-V>fxj:s/\\%Vo/O/g\<CR>" | |
732 call assert_equal(['Visual:', 'thexE thE thExethe', 'AndAxAnd AndAxAnd', | |
733 \ 'oooxOfOr fOrOxooo', 'oooxOfOr fOrOxooo', ''], getline(1, '$')) | |
734 bwipe! | |
735 endfunc | |
736 | |
737 " Check matching marks | |
738 func Test_matching_marks() | |
739 new | |
740 call append(0, ['', '', '', 'Marks:', 'asdfSasdfsadfEasdf', 'asdfSas', | |
741 \ 'dfsadfEasdf', '', '', '', '', '']) | |
742 call cursor(4, 1) | |
743 exe "normal jfSmsfEme:.-4,.+6s/.\\%>'s.*\\%<'e../here/\<CR>" | |
744 exe "normal jfSmsj0fEme:.-4,.+6s/.\\%>'s\\_.*\\%<'e../again/\<CR>" | |
745 call assert_equal(['', '', '', 'Marks:', 'asdfhereasdf', 'asdfagainasdf', | |
746 \ '', '', '', '', '', ''], getline(1, '$')) | |
747 bwipe! | |
748 endfunc | |
749 | |
750 " Check patterns matching cursor position. | |
751 func s:curpos_test() | |
752 new | |
753 call setline(1, ['ffooooo', 'boboooo', 'zoooooo', 'koooooo', 'moooooo', | |
754 \ "\t\t\tfoo", 'abababababababfoo', 'bababababababafoo', '********_', | |
755 \ ' xxxxxxxxxxxx xxxx xxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxx xxxxx xxxxxxx xx xxxx xxxxxxxx xxxx xxxxxxxxxxx xxx xxxxxxx xxxxxxxxx xx xxxxxx xx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxx xxxxxxxx xxxxxxxxx xxxx xxx xxxx xxx xxx xxxxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxxx xx xxxxx xxx xxxxxxxx xxxxxx xxx xxx xxxxxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxx xxxxxxx xxx xxx xxxxxxxx xxxxxxx xxxx xxx xxxxxx xxxxx xxxxx xx xxxxxx xxxxxxx xxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxx xxxxxx xxxxx xxx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxxxxxxxxx xxxx xx xxxxxxxx xxx xxxxxxxxxxx xxxxx']) | |
756 call setpos('.', [0, 1, 0, 0]) | |
757 s/\%>3c.//g | |
758 call setpos('.', [0, 2, 4, 0]) | |
759 s/\%#.*$//g | |
760 call setpos('.', [0, 3, 0, 0]) | |
761 s/\%<3c./_/g | |
762 %s/\%4l\%>5c./_/g | |
763 %s/\%6l\%>25v./_/g | |
764 %s/\%>6l\%3c./!/g | |
765 %s/\%>7l\%12c./?/g | |
766 %s/\%>7l\%<9l\%>5v\%<8v./#/g | |
767 $s/\%(|\u.*\)\@<=[^|\t]\+$//ge | |
768 call assert_equal(['ffo', 'bob', '__ooooo', 'koooo__', 'moooooo', | |
769 \ ' f__', 'ab!babababababfoo', | |
770 \ 'ba!ab##abab?bafoo', '**!*****_', | |
771 \ ' ! xxx?xxxxxxxx xxxx xxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxx xxxxx xxxxxxx xx xxxx xxxxxxxx xxxx xxxxxxxxxxx xxx xxxxxxx xxxxxxxxx xx xxxxxx xx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxx xxxxxxxx xxxxxxxxx xxxx xxx xxxx xxx xxx xxxxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxxx xx xxxxx xxx xxxxxxxx xxxxxx xxx xxx xxxxxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxx xxxxxxx xxx xxx xxxxxxxx xxxxxxx xxxx xxx xxxxxx xxxxx xxxxx xx xxxxxx xxxxxxx xxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxx xxxxxx xxxxx xxx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxxxxxxxxx xxxx xx xxxxxxxx xxx xxxxxxxxxxx xxxxx'], | |
772 \ getline(1, '$')) | |
773 bwipe! | |
774 endfunc | |
775 | |
776 func Test_matching_curpos() | |
777 set re=0 | |
778 call s:curpos_test() | |
779 set re=1 | |
780 call s:curpos_test() | |
781 set re=2 | |
782 call s:curpos_test() | |
783 set re& | |
784 endfunc | |
785 | |
786 " Test for matching the start and end of a buffer | |
787 func Test_start_end_of_buffer_match() | |
788 new | |
789 call setline(1, repeat(['vim edit'], 20)) | |
790 /\%^ | |
791 call assert_equal([0, 1, 1, 0], getpos('.')) | |
792 exe "normal 50%/\\%^..\<CR>" | |
793 call assert_equal([0, 1, 1, 0], getpos('.')) | |
794 exe "normal 50%/\\%$\<CR>" | |
795 call assert_equal([0, 20, 8, 0], getpos('.')) | |
796 exe "normal 6gg/..\\%$\<CR>" | |
797 call assert_equal([0, 20, 7, 0], getpos('.')) | |
798 bwipe! | |
799 endfunc | |
800 | |
801 " Check for detecting error | |
802 func Test_regexp_error() | |
803 set regexpengine=2 | |
804 call assert_fails("call matchlist('x x', ' \\ze*')", 'E888:') | |
805 call assert_fails("call matchlist('x x', ' \\zs*')", 'E888:') | |
806 set re& | |
807 endfunc | |
808 | |
809 " vim: shiftwidth=2 sts=2 expandtab |