Describe util.regexp Before all let SL = vital#of('vital').import('Vim.ScriptLocal') let U = SL.sfuncs('autoload/incsearch/util.vim') End Describe .regexp_join() It returns joined regular expression from patterns let ps = ['incsearch', 'vim'] let r = U.regexp_join(ps) Assert Equals('\m\%(incsearch\m\|vim\m\)', r) for p in ps Assert True(p =~# r) endfor End It supports regular expressions including various flags let ps = ['\d\+', '\v(neo)?vim'] let r = U.regexp_join(ps) Assert Equals('\m\%(\d\+\m\|\v(neo)?vim\m\)', r) for p in ['1', '12310', 'vim', 'neovim'] Assert True(p =~# r) endfor End It handles unbalanced `[` with \m\v flag let ps = ['\d\+[', '[vim]'] let r = U.regexp_join(ps) Assert Equals('\m\%(\d\+\[\m\|[vim]\m\)', r) for p in ['1[', '12310[', 'v', 'i', 'm'] Assert True(p =~# r) endfor for p in ['\', '\['] Assert False(p =~# r) endfor End End Describe .escape_unbalanced_left_r() It case 0 Assert Equals('\[', U.escape_unbalanced_left_r('[')) End It case 1 Assert Equals('\[', U.escape_unbalanced_left_r('\[')) End It case 2 Assert Equals('\\\[', U.escape_unbalanced_left_r('\\[')) End It case 3 Assert Equals('\\\[', U.escape_unbalanced_left_r('\\\[')) End It case 4 Assert Equals('[]', U.escape_unbalanced_left_r('[]')) End It case 5 Assert Equals('\[]', U.escape_unbalanced_left_r('\[]')) End It case 6 Assert Equals('\\[]', U.escape_unbalanced_left_r('\\[]')) End It case 7 Assert Equals('\\\[]', U.escape_unbalanced_left_r('\\\[]')) End It case 8 Assert Equals('[]\[', U.escape_unbalanced_left_r('[][')) End It case 9 Assert Equals('\[]\[', U.escape_unbalanced_left_r('\[][')) End It case 10 Assert Equals('\\[]\[', U.escape_unbalanced_left_r('\\[][')) End It case 11 Assert Equals('\\\[]\[', U.escape_unbalanced_left_r('\\\[][')) End It case 12 Assert Equals('[]...\[', U.escape_unbalanced_left_r('[]...[')) End It case 13 Assert Equals('\[]...\[', U.escape_unbalanced_left_r('\[]...[')) End It case 14 Assert Equals('\\[]...\[', U.escape_unbalanced_left_r('\\[]...[')) End It case 15 Assert Equals('\\\[]...\[', U.escape_unbalanced_left_r('\\\[]...[')) End It case 16 Assert Equals('\m\[', U.escape_unbalanced_left_r('\m[')) End It case 17 Assert Equals('\m\[', U.escape_unbalanced_left_r('\m\[')) End It case 18 Assert Equals('\m\\\[', U.escape_unbalanced_left_r('\m\\[')) End It case 19 Assert Equals('\m\\\[', U.escape_unbalanced_left_r('\m\\\[')) End It case 20 Assert Equals('\v\[', U.escape_unbalanced_left_r('\v[')) End It case 21 Assert Equals('\v\[', U.escape_unbalanced_left_r('\v\[')) End It case 22 Assert Equals('\v\\\[', U.escape_unbalanced_left_r('\v\\[')) End It case 23 Assert Equals('\v\\\[', U.escape_unbalanced_left_r('\v\\\[')) End It case 24 Assert Equals('\M[', U.escape_unbalanced_left_r('\M[')) End It case 25 Assert Equals('\M[', U.escape_unbalanced_left_r('\M\[')) End It case 26 Assert Equals('\M\\[', U.escape_unbalanced_left_r('\M\\[')) End It case 27 Assert Equals('\M\\[', U.escape_unbalanced_left_r('\M\\\[')) End It case 28 Assert Equals('\V[', U.escape_unbalanced_left_r('\V[')) End It case 29 Assert Equals('\V[', U.escape_unbalanced_left_r('\V\[')) End It case 30 Assert Equals('\V\\[', U.escape_unbalanced_left_r('\V\\[')) End It case 31 Assert Equals('\V\\[', U.escape_unbalanced_left_r('\V\\\[')) End It case 32 Assert Equals('\[\M[\v\[', U.escape_unbalanced_left_r('[\M\[\v[')) End It case 33 Assert Equals('[\M\[\v[]', U.escape_unbalanced_left_r('[\M\[\v[]')) End It case 34 Assert Equals('[[]', U.escape_unbalanced_left_r('[[]')) End It case 35 Assert Equals('[\[]', U.escape_unbalanced_left_r('[\[]')) End It case 36 Assert Equals('\M\[[]', U.escape_unbalanced_left_r('\M\[[]')) End It case 37 let p = '[' . repeat('[', 10000) . ']' Assert Equals(p, U.escape_unbalanced_left_r(p)) End It case 38 let p = '[' . repeat('\[', 10000) . ']' Assert Equals(p, U.escape_unbalanced_left_r(p)) End End End