comparison src/testdir/test_search.vim @ 18935:ed246d4c46ba v8.2.0028

patch 8.2.0028: searchpairpos() is not tested Commit: https://github.com/vim/vim/commit/3ba35409a65b457d29a885a27b46b02a9aec6bcc Author: Bram Moolenaar <Bram@vim.org> Date: Sat Dec 21 22:00:50 2019 +0100 patch 8.2.0028: searchpairpos() is not tested Problem: Searchpairpos() is not tested. Solution: Add tests. Also improve searchpair() testing. (Dominique Pelle, closes #5388)
author Bram Moolenaar <Bram@vim.org>
date Sat, 21 Dec 2019 22:15:03 +0100
parents d7c47e45bcc3
children 06ef1e438ac8
comparison
equal deleted inserted replaced
18934:06e5fd575bbd 18935:ed246d4c46ba
55 :1 55 :1
56 " seventh match 56 " seventh match
57 call feedkeys("/the".repeat("\<C-G>", 6)."\<cr>", 'tx') 57 call feedkeys("/the".repeat("\<C-G>", 6)."\<cr>", 'tx')
58 call assert_equal(' 8 them', getline('.')) 58 call assert_equal(' 8 them', getline('.'))
59 :1 59 :1
60 " eigth match 60 " eighth match
61 call feedkeys("/the".repeat("\<C-G>", 7)."\<cr>", 'tx') 61 call feedkeys("/the".repeat("\<C-G>", 7)."\<cr>", 'tx')
62 call assert_equal(' 9 these', getline('.')) 62 call assert_equal(' 9 these', getline('.'))
63 :1 63 :1
64 " no further match 64 " no further match
65 call feedkeys("/the".repeat("\<C-G>", 8)."\<cr>", 'tx') 65 call feedkeys("/the".repeat("\<C-G>", 8)."\<cr>", 'tx')
97 :1 97 :1
98 " seventh match 98 " seventh match
99 call feedkeys("/the".repeat("\<C-G>", 6)."\<cr>", 'tx') 99 call feedkeys("/the".repeat("\<C-G>", 6)."\<cr>", 'tx')
100 call assert_equal(' 8 them', getline('.')) 100 call assert_equal(' 8 them', getline('.'))
101 :1 101 :1
102 " eigth match 102 " eighth match
103 call feedkeys("/the".repeat("\<C-G>", 7)."\<cr>", 'tx') 103 call feedkeys("/the".repeat("\<C-G>", 7)."\<cr>", 'tx')
104 call assert_equal(' 9 these', getline('.')) 104 call assert_equal(' 9 these', getline('.'))
105 :1 105 :1
106 " back at first match 106 " back at first match
107 call feedkeys("/the".repeat("\<C-G>", 8)."\<cr>", 'tx') 107 call feedkeys("/the".repeat("\<C-G>", 8)."\<cr>", 'tx')
288 bwipe! 288 bwipe!
289 endfunc 289 endfunc
290 290
291 func Test_searchpair() 291 func Test_searchpair()
292 new 292 new
293 call setline(1, ['other code here', '', '[', '" cursor here', ']']) 293 call setline(1, ['other code', 'here [', ' [', ' " cursor here', ' ]]'])
294
294 4 295 4
295 let a = searchpair('\[','',']','bW') 296 call assert_equal(3, searchpair('\[', '', ']', 'bW'))
296 call assert_equal(3, a) 297 call assert_equal([0, 3, 2, 0], getpos('.'))
298 4
299 call assert_equal(2, searchpair('\[', '', ']', 'bWr'))
300 call assert_equal([0, 2, 6, 0], getpos('.'))
301 4
302 call assert_equal(1, searchpair('\[', '', ']', 'bWm'))
303 call assert_equal([0, 3, 2, 0], getpos('.'))
304 4|norm ^
305 call assert_equal(5, searchpair('\[', '', ']', 'Wn'))
306 call assert_equal([0, 4, 2, 0], getpos('.'))
307 4
308 call assert_equal(2, searchpair('\[', '', ']', 'bW',
309 \ 'getline(".") =~ "^\\s*\["'))
310 call assert_equal([0, 2, 6, 0], getpos('.'))
297 set nomagic 311 set nomagic
298 4 312 4
299 let a = searchpair('\[','',']','bW') 313 call assert_equal(3, searchpair('\[', '', ']', 'bW'))
300 call assert_equal(3, a) 314 call assert_equal([0, 3, 2, 0], getpos('.'))
301 set magic 315 set magic
316 4|norm ^
317 call assert_equal(0, searchpair('{', '', '}', 'bW'))
318 call assert_equal([0, 4, 2, 0], getpos('.'))
319
320 %d
321 call setline(1, ['if 1', ' if 2', ' else', ' endif 2', 'endif 1'])
322
323 /\<if 1
324 call assert_equal(5, searchpair('\<if\>', '\<else\>', '\<endif\>', 'W'))
325 call assert_equal([0, 5, 1, 0], getpos('.'))
326 /\<if 2
327 call assert_equal(3, searchpair('\<if\>', '\<else\>', '\<endif\>', 'W'))
328 call assert_equal([0, 3, 3, 0], getpos('.'))
329
330 q!
331 endfunc
332
333 func Test_searchpairpos()
334 new
335 call setline(1, ['other code', 'here [', ' [', ' " cursor here', ' ]]'])
336
337 4
338 call assert_equal([3, 2], searchpairpos('\[', '', ']', 'bW'))
339 call assert_equal([0, 3, 2, 0], getpos('.'))
340 4
341 call assert_equal([2, 6], searchpairpos('\[', '', ']', 'bWr'))
342 call assert_equal([0, 2, 6, 0], getpos('.'))
343 4|norm ^
344 call assert_equal([5, 2], searchpairpos('\[', '', ']', 'Wn'))
345 call assert_equal([0, 4, 2, 0], getpos('.'))
346 4
347 call assert_equal([2, 6], searchpairpos('\[', '', ']', 'bW',
348 \ 'getline(".") =~ "^\\s*\["'))
349 call assert_equal([0, 2, 6, 0], getpos('.'))
350 4
351 call assert_equal([2, 6], searchpairpos('\[', '', ']', 'bWr'))
352 call assert_equal([0, 2, 6, 0], getpos('.'))
353 set nomagic
354 4
355 call assert_equal([3, 2], searchpairpos('\[', '', ']', 'bW'))
356 call assert_equal([0, 3, 2, 0], getpos('.'))
357 set magic
358 4|norm ^
359 call assert_equal([0, 0], searchpairpos('{', '', '}', 'bW'))
360 call assert_equal([0, 4, 2, 0], getpos('.'))
361
362 %d
363 call setline(1, ['if 1', ' if 2', ' else', ' endif 2', 'endif 1'])
364 /\<if 1
365 call assert_equal([5, 1], searchpairpos('\<if\>', '\<else\>', '\<endif\>', 'W'))
366 call assert_equal([0, 5, 1, 0], getpos('.'))
367 /\<if 2
368 call assert_equal([3, 3], searchpairpos('\<if\>', '\<else\>', '\<endif\>', 'W'))
369 call assert_equal([0, 3, 3, 0], getpos('.'))
370
302 q! 371 q!
303 endfunc 372 endfunc
304 373
305 func Test_searchpair_errors() 374 func Test_searchpair_errors()
306 call assert_fails("call searchpair([0], 'middle', 'end', 'bW', 'skip', 99, 100)", 'E730: using List as a String') 375 call assert_fails("call searchpair([0], 'middle', 'end', 'bW', 'skip', 99, 100)", 'E730: using List as a String')
308 call assert_fails("call searchpair('start', 'middle', {'one': 1}, 'bW', 'skip', 99, 100)", 'E731: using Dictionary as a String') 377 call assert_fails("call searchpair('start', 'middle', {'one': 1}, 'bW', 'skip', 99, 100)", 'E731: using Dictionary as a String')
309 call assert_fails("call searchpair('start', 'middle', 'end', 'flags', 'skip', 99, 100)", 'E475: Invalid argument: flags') 378 call assert_fails("call searchpair('start', 'middle', 'end', 'flags', 'skip', 99, 100)", 'E475: Invalid argument: flags')
310 call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 0, 99, 100)", 'E475: Invalid argument: 0') 379 call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 0, 99, 100)", 'E475: Invalid argument: 0')
311 call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', -99, 100)", 'E475: Invalid argument: -99') 380 call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', -99, 100)", 'E475: Invalid argument: -99')
312 call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', 99, -100)", 'E475: Invalid argument: -100') 381 call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', 99, -100)", 'E475: Invalid argument: -100')
382 call assert_fails("call searchpair('start', 'middle', 'end', 'e')", 'E475: Invalid argument: e')
383 call assert_fails("call searchpair('start', 'middle', 'end', 'sn')", 'E475: Invalid argument: sn')
384 endfunc
385
386 func Test_searchpairpos_errors()
387 call assert_fails("call searchpairpos([0], 'middle', 'end', 'bW', 'skip', 99, 100)", 'E730: using List as a String')
388 call assert_fails("call searchpairpos('start', {-> 0}, 'end', 'bW', 'skip', 99, 100)", 'E729: using Funcref as a String')
389 call assert_fails("call searchpairpos('start', 'middle', {'one': 1}, 'bW', 'skip', 99, 100)", 'E731: using Dictionary as a String')
390 call assert_fails("call searchpairpos('start', 'middle', 'end', 'flags', 'skip', 99, 100)", 'E475: Invalid argument: flags')
391 call assert_fails("call searchpairpos('start', 'middle', 'end', 'bW', 0, 99, 100)", 'E475: Invalid argument: 0')
392 call assert_fails("call searchpairpos('start', 'middle', 'end', 'bW', 'func', -99, 100)", 'E475: Invalid argument: -99')
393 call assert_fails("call searchpairpos('start', 'middle', 'end', 'bW', 'func', 99, -100)", 'E475: Invalid argument: -100')
394 call assert_fails("call searchpairpos('start', 'middle', 'end', 'e')", 'E475: Invalid argument: e')
395 call assert_fails("call searchpairpos('start', 'middle', 'end', 'sn')", 'E475: Invalid argument: sn')
313 endfunc 396 endfunc
314 397
315 func Test_searchpair_skip() 398 func Test_searchpair_skip()
316 func Zero() 399 func Zero()
317 return 0 400 return 0
318 endfunc 401 endfunc
319 func Partial(x) 402 func Partial(x)
320 return a:x 403 return a:x
321 endfunc 404 endfunc
322 new 405 new
323 call setline(1, ['{', 'foo', 'foo', 'foo', '}']) 406 call setline(1, ['{', 'foo', 'foo', 'foo', '}'])
324 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', '')) 407 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', ''))
325 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', '0')) 408 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', '0'))
1182 endfunc 1265 endfunc
1183 1266
1184 " This was causing E874. Also causes an invalid read? 1267 " This was causing E874. Also causes an invalid read?
1185 func Test_look_behind() 1268 func Test_look_behind()
1186 new 1269 new
1187 call setline(1, '0\|\&\n\@<=') 1270 call setline(1, '0\|\&\n\@<=')
1188 call search(getline(".")) 1271 call search(getline("."))
1189 bwipe! 1272 bwipe!
1190 endfunc 1273 endfunc
1191 1274
1192 func Test_search_sentence() 1275 func Test_search_sentence()
1211 endfunc 1294 endfunc
1212 1295
1213 func Test_search_Ctrl_L_combining() 1296 func Test_search_Ctrl_L_combining()
1214 " Make sure, that Ctrl-L works correctly with combining characters. 1297 " Make sure, that Ctrl-L works correctly with combining characters.
1215 " It uses an artificial example of an 'a' with 4 combining chars: 1298 " It uses an artificial example of an 'a' with 4 combining chars:
1216 " 'a' U+0061 Dec:97 LATIN SMALL LETTER A &#x61; /\%u61\Z "\u0061" 1299 " 'a' U+0061 Dec:97 LATIN SMALL LETTER A &#x61; /\%u61\Z "\u0061"
1217 " ' ̀' U+0300 Dec:768 COMBINING GRAVE ACCENT &#x300; /\%u300\Z "\u0300" 1300 " ' ̀' U+0300 Dec:768 COMBINING GRAVE ACCENT &#x300; /\%u300\Z "\u0300"
1218 " ' ́' U+0301 Dec:769 COMBINING ACUTE ACCENT &#x301; /\%u301\Z "\u0301" 1301 " ' ́' U+0301 Dec:769 COMBINING ACUTE ACCENT &#x301; /\%u301\Z "\u0301"
1219 " ' ̇' U+0307 Dec:775 COMBINING DOT ABOVE &#x307; /\%u307\Z "\u0307" 1302 " ' ̇' U+0307 Dec:775 COMBINING DOT ABOVE &#x307; /\%u307\Z "\u0307"
1220 " ' ̣' U+0323 Dec:803 COMBINING DOT BELOW &#x323; /\%u323 "\u0323" 1303 " ' ̣' U+0323 Dec:803 COMBINING DOT BELOW &#x323; /\%u323 "\u0323"
1221 " Those should also appear on the commandline 1304 " Those should also appear on the commandline
1222 if !exists('+incsearch') 1305 if !exists('+incsearch')
1223 return 1306 return
1224 endif 1307 endif
1225 call Cmdline3_prep() 1308 call Cmdline3_prep()