122e42154SBram Moolenaar" Tests for regexp in utf8 encoding 222e42154SBram Moolenaar 322e42154SBram Moolenaarfunc s:equivalence_test() 40b94e297SBram Moolenaar let str = "AÀÁÂÃÄÅĀĂĄǍǞǠǺȂȦȺḀẠẢẤẦẨẪẬẮẰẲẴẶ BƁɃḂḄḆ CÇĆĈĊČƇȻḈꞒ DĎĐƊḊḌḎḐḒ EÈÉÊËĒĔĖĘĚȄȆȨɆḔḖḘḚḜẸẺẼẾỀỂỄỆ FƑḞꞘ GĜĞĠĢƓǤǦǴḠꞠ HĤĦȞḢḤḦḨḪⱧ IÌÍÎÏĨĪĬĮİƗǏȈȊḬḮỈỊ JĴɈ KĶƘǨḰḲḴⱩꝀ LĹĻĽĿŁȽḶḸḺḼⱠ MḾṀṂ NÑŃŅŇǸṄṆṈṊꞤ OÒÓÔÕÖØŌŎŐƟƠǑǪǬǾȌȎȪȬȮȰṌṎṐṒỌỎỐỒỔỖỘỚỜỞỠỢ PƤṔṖⱣ QɊ RŔŖŘȐȒɌṘṚṜṞⱤꞦ SŚŜŞŠȘṠṢṤṦṨⱾꞨ TŢŤŦƬƮȚȾṪṬṮṰ UÙÚÛÜŨŪŬŮŰƯǕǙǛǓǗȔȖɄṲṴṶṸṺỤỦỨỪỬỮỰ VƲṼṾ WŴẀẂẄẆẈ XẊẌ YÝŶŸƳȲɎẎỲỴỶỸ ZŹŻŽƵẐẒẔⱫ aàáâãäåāăąǎǟǡǻȃȧᶏḁẚạảấầẩẫậắằẳẵặⱥ bƀɓᵬᶀḃḅḇ cçćĉċčƈȼḉꞓꞔ dďđɗᵭᶁᶑḋḍḏḑḓ eèéêëēĕėęěȅȇȩɇᶒḕḗḙḛḝẹẻẽếềểễệ fƒᵮᶂḟꞙ gĝğġģǥǧǵɠᶃḡꞡ hĥħȟḣḥḧḩḫẖⱨꞕ iìíîïĩīĭįǐȉȋɨᶖḭḯỉị jĵǰɉ kķƙǩᶄḱḳḵⱪꝁ lĺļľŀłƚḷḹḻḽⱡ mᵯḿṁṃ nñńņňʼnǹᵰᶇṅṇṉṋꞥ oòóôõöøōŏőơǒǫǭǿȍȏȫȭȯȱɵṍṏṑṓọỏốồổỗộớờởỡợ pƥᵱᵽᶈṕṗ qɋʠ rŕŗřȑȓɍɽᵲᵳᶉṛṝṟꞧ sśŝşšșȿᵴᶊṡṣṥṧṩꞩ tţťŧƫƭțʈᵵṫṭṯṱẗⱦ uùúûüũūŭůűųǚǖưǔǘǜȕȗʉᵾᶙṳṵṷṹṻụủứừửữự vʋᶌṽṿ wŵẁẃẅẇẉẘ xẋẍ yýÿŷƴȳɏẏẙỳỵỷỹ zźżžƶᵶᶎẑẓẕⱬ" 522e42154SBram Moolenaar let groups = split(str) 622e42154SBram Moolenaar for group1 in groups 722e42154SBram Moolenaar for c in split(group1, '\zs') 822e42154SBram Moolenaar " next statement confirms that equivalence class matches every 922e42154SBram Moolenaar " character in group 100b94e297SBram Moolenaar call assert_match('^[[=' .. c .. '=]]*$', group1) 1122e42154SBram Moolenaar for group2 in groups 1222e42154SBram Moolenaar if group2 != group1 1322e42154SBram Moolenaar " next statement converts that equivalence class doesn't match 1422e42154SBram Moolenaar " character in any other group 150b94e297SBram Moolenaar call assert_equal(-1, match(group2, '[[=' .. c .. '=]]'), c) 1622e42154SBram Moolenaar endif 1722e42154SBram Moolenaar endfor 1822e42154SBram Moolenaar endfor 1922e42154SBram Moolenaar endfor 2022e42154SBram Moolenaarendfunc 2122e42154SBram Moolenaar 2222e42154SBram Moolenaarfunc Test_equivalence_re1() 2322e42154SBram Moolenaar set re=1 2422e42154SBram Moolenaar call s:equivalence_test() 256bff02ebSBram Moolenaar set re=0 2622e42154SBram Moolenaarendfunc 2722e42154SBram Moolenaar 2822e42154SBram Moolenaarfunc Test_equivalence_re2() 2922e42154SBram Moolenaar set re=2 3022e42154SBram Moolenaar call s:equivalence_test() 316bff02ebSBram Moolenaar set re=0 3222e42154SBram Moolenaarendfunc 33af98a49dSBram Moolenaar 34af98a49dSBram Moolenaarfunc s:classes_test() 35470adb82SBram Moolenaar if has('win32') 36470adb82SBram Moolenaar set iskeyword=@,48-57,_,192-255 37470adb82SBram Moolenaar endif 38490465bdSBram Moolenaar set isprint=@,161-255 39af98a49dSBram Moolenaar call assert_equal('Motörhead', matchstr('Motörhead', '[[:print:]]\+')) 40af98a49dSBram Moolenaar 41af98a49dSBram Moolenaar let alnumchars = '' 420c078fc7SBram Moolenaar let alphachars = '' 430c078fc7SBram Moolenaar let backspacechar = '' 440c078fc7SBram Moolenaar let blankchars = '' 450c078fc7SBram Moolenaar let cntrlchars = '' 460c078fc7SBram Moolenaar let digitchars = '' 470c078fc7SBram Moolenaar let escapechar = '' 480c078fc7SBram Moolenaar let graphchars = '' 490c078fc7SBram Moolenaar let lowerchars = '' 50af98a49dSBram Moolenaar let printchars = '' 51af98a49dSBram Moolenaar let punctchars = '' 520c078fc7SBram Moolenaar let returnchar = '' 530c078fc7SBram Moolenaar let spacechars = '' 540c078fc7SBram Moolenaar let tabchar = '' 550c078fc7SBram Moolenaar let upperchars = '' 56af98a49dSBram Moolenaar let xdigitchars = '' 57221cd9f4SBram Moolenaar let identchars = '' 58221cd9f4SBram Moolenaar let identchars1 = '' 59221cd9f4SBram Moolenaar let kwordchars = '' 60221cd9f4SBram Moolenaar let kwordchars1 = '' 61221cd9f4SBram Moolenaar let fnamechars = '' 62221cd9f4SBram Moolenaar let fnamechars1 = '' 63af98a49dSBram Moolenaar let i = 1 64af98a49dSBram Moolenaar while i <= 255 65af98a49dSBram Moolenaar let c = nr2char(i) 66af98a49dSBram Moolenaar if c =~ '[[:alpha:]]' 67af98a49dSBram Moolenaar let alphachars .= c 68af98a49dSBram Moolenaar endif 69af98a49dSBram Moolenaar if c =~ '[[:alnum:]]' 70af98a49dSBram Moolenaar let alnumchars .= c 71af98a49dSBram Moolenaar endif 720c078fc7SBram Moolenaar if c =~ '[[:backspace:]]' 730c078fc7SBram Moolenaar let backspacechar .= c 740c078fc7SBram Moolenaar endif 750c078fc7SBram Moolenaar if c =~ '[[:blank:]]' 760c078fc7SBram Moolenaar let blankchars .= c 770c078fc7SBram Moolenaar endif 780c078fc7SBram Moolenaar if c =~ '[[:cntrl:]]' 790c078fc7SBram Moolenaar let cntrlchars .= c 800c078fc7SBram Moolenaar endif 810c078fc7SBram Moolenaar if c =~ '[[:digit:]]' 820c078fc7SBram Moolenaar let digitchars .= c 830c078fc7SBram Moolenaar endif 840c078fc7SBram Moolenaar if c =~ '[[:escape:]]' 850c078fc7SBram Moolenaar let escapechar .= c 860c078fc7SBram Moolenaar endif 870c078fc7SBram Moolenaar if c =~ '[[:graph:]]' 880c078fc7SBram Moolenaar let graphchars .= c 890c078fc7SBram Moolenaar endif 900c078fc7SBram Moolenaar if c =~ '[[:lower:]]' 910c078fc7SBram Moolenaar let lowerchars .= c 920c078fc7SBram Moolenaar endif 93af98a49dSBram Moolenaar if c =~ '[[:print:]]' 94af98a49dSBram Moolenaar let printchars .= c 95af98a49dSBram Moolenaar endif 96af98a49dSBram Moolenaar if c =~ '[[:punct:]]' 97af98a49dSBram Moolenaar let punctchars .= c 98af98a49dSBram Moolenaar endif 990c078fc7SBram Moolenaar if c =~ '[[:return:]]' 1000c078fc7SBram Moolenaar let returnchar .= c 1010c078fc7SBram Moolenaar endif 1020c078fc7SBram Moolenaar if c =~ '[[:space:]]' 1030c078fc7SBram Moolenaar let spacechars .= c 1040c078fc7SBram Moolenaar endif 1050c078fc7SBram Moolenaar if c =~ '[[:tab:]]' 1060c078fc7SBram Moolenaar let tabchar .= c 1070c078fc7SBram Moolenaar endif 1080c078fc7SBram Moolenaar if c =~ '[[:upper:]]' 1090c078fc7SBram Moolenaar let upperchars .= c 1100c078fc7SBram Moolenaar endif 111af98a49dSBram Moolenaar if c =~ '[[:xdigit:]]' 112af98a49dSBram Moolenaar let xdigitchars .= c 113af98a49dSBram Moolenaar endif 114221cd9f4SBram Moolenaar if c =~ '[[:ident:]]' 115221cd9f4SBram Moolenaar let identchars .= c 116221cd9f4SBram Moolenaar endif 117221cd9f4SBram Moolenaar if c =~ '\i' 118221cd9f4SBram Moolenaar let identchars1 .= c 119221cd9f4SBram Moolenaar endif 120221cd9f4SBram Moolenaar if c =~ '[[:keyword:]]' 121221cd9f4SBram Moolenaar let kwordchars .= c 122221cd9f4SBram Moolenaar endif 123221cd9f4SBram Moolenaar if c =~ '\k' 124221cd9f4SBram Moolenaar let kwordchars1 .= c 125221cd9f4SBram Moolenaar endif 126221cd9f4SBram Moolenaar if c =~ '[[:fname:]]' 127221cd9f4SBram Moolenaar let fnamechars .= c 128221cd9f4SBram Moolenaar endif 129221cd9f4SBram Moolenaar if c =~ '\f' 130221cd9f4SBram Moolenaar let fnamechars1 .= c 131221cd9f4SBram Moolenaar endif 132af98a49dSBram Moolenaar let i += 1 133af98a49dSBram Moolenaar endwhile 134af98a49dSBram Moolenaar 135af98a49dSBram Moolenaar call assert_equal('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', alphachars) 136af98a49dSBram Moolenaar call assert_equal('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', alnumchars) 1370c078fc7SBram Moolenaar call assert_equal("\b", backspacechar) 1380c078fc7SBram Moolenaar call assert_equal("\t ", blankchars) 13913489b9cSBram Moolenaar call assert_equal("\x01\x02\x03\x04\x05\x06\x07\b\t\n\x0b\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\e\x1c\x1d\x1e\x1f\x7f", cntrlchars) 1400c078fc7SBram Moolenaar call assert_equal("0123456789", digitchars) 1410c078fc7SBram Moolenaar call assert_equal("\<Esc>", escapechar) 14213489b9cSBram Moolenaar call assert_equal('!"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~', graphchars) 1430c078fc7SBram Moolenaar call assert_equal('abcdefghijklmnopqrstuvwxyzµßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ', lowerchars) 144af98a49dSBram Moolenaar call assert_equal(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ', printchars) 145af98a49dSBram Moolenaar call assert_equal('!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~', punctchars) 1460c078fc7SBram Moolenaar call assert_equal('ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ', upperchars) 1470c078fc7SBram Moolenaar call assert_equal("\r", returnchar) 1480c078fc7SBram Moolenaar call assert_equal("\t\n\x0b\f\r ", spacechars) 1490c078fc7SBram Moolenaar call assert_equal("\t", tabchar) 150af98a49dSBram Moolenaar call assert_equal('0123456789ABCDEFabcdef', xdigitchars) 151221cd9f4SBram Moolenaar 152221cd9f4SBram Moolenaar if has('win32') 153221cd9f4SBram Moolenaar let identchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz ¡¢£¤¥¦§µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ' 154221cd9f4SBram Moolenaar let kwordchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 155221cd9f4SBram Moolenaar elseif has('ebcdic') 156221cd9f4SBram Moolenaar let identchars_ok = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz¬®µº¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 157221cd9f4SBram Moolenaar let kwordchars_ok = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz¬®µº¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 158221cd9f4SBram Moolenaar else 159221cd9f4SBram Moolenaar let identchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 160221cd9f4SBram Moolenaar let kwordchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 161221cd9f4SBram Moolenaar endif 162221cd9f4SBram Moolenaar 163221cd9f4SBram Moolenaar if has('win32') 164221cd9f4SBram Moolenaar let fnamechars_ok = '!#$%+,-./0123456789:=@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]_abcdefghijklmnopqrstuvwxyz{}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 165221cd9f4SBram Moolenaar elseif has('amiga') 166221cd9f4SBram Moolenaar let fnamechars_ok = '$+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 167221cd9f4SBram Moolenaar elseif has('vms') 168221cd9f4SBram Moolenaar let fnamechars_ok = '#$%+,-./0123456789:;<>ABCDEFGHIJKLMNOPQRSTUVWXYZ[]_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 169221cd9f4SBram Moolenaar elseif has('ebcdic') 170221cd9f4SBram Moolenaar let fnamechars_ok = '#$%+,-./=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 171221cd9f4SBram Moolenaar else 172221cd9f4SBram Moolenaar let fnamechars_ok = '#$%+,-./0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' 173221cd9f4SBram Moolenaar endif 174221cd9f4SBram Moolenaar 175221cd9f4SBram Moolenaar call assert_equal(identchars_ok, identchars) 176221cd9f4SBram Moolenaar call assert_equal(kwordchars_ok, kwordchars) 177221cd9f4SBram Moolenaar call assert_equal(fnamechars_ok, fnamechars) 178221cd9f4SBram Moolenaar 179221cd9f4SBram Moolenaar call assert_equal(identchars1, identchars) 180221cd9f4SBram Moolenaar call assert_equal(kwordchars1, kwordchars) 181221cd9f4SBram Moolenaar call assert_equal(fnamechars1, fnamechars) 182af98a49dSBram Moolenaarendfunc 183af98a49dSBram Moolenaar 184af98a49dSBram Moolenaarfunc Test_classes_re1() 185af98a49dSBram Moolenaar set re=1 186af98a49dSBram Moolenaar call s:classes_test() 1876bff02ebSBram Moolenaar set re=0 188af98a49dSBram Moolenaarendfunc 189af98a49dSBram Moolenaar 190af98a49dSBram Moolenaarfunc Test_classes_re2() 191af98a49dSBram Moolenaar set re=2 192af98a49dSBram Moolenaar call s:classes_test() 1936bff02ebSBram Moolenaar set re=0 1946bff02ebSBram Moolenaarendfunc 195966e58e4SBram Moolenaar 196966e58e4SBram Moolenaarfunc Test_reversed_range() 197966e58e4SBram Moolenaar for re in range(0, 2) 198966e58e4SBram Moolenaar exe 'set re=' . re 1990b94e297SBram Moolenaar call assert_fails('call match("abc def", "[c-a]")', 'E944:', re) 200966e58e4SBram Moolenaar endfor 201966e58e4SBram Moolenaar set re=0 202966e58e4SBram Moolenaarendfunc 203966e58e4SBram Moolenaar 204966e58e4SBram Moolenaarfunc Test_large_class() 205966e58e4SBram Moolenaar set re=1 206966e58e4SBram Moolenaar call assert_fails('call match("abc def", "[\u3000-\u4000]")', 'E945:') 207966e58e4SBram Moolenaar set re=2 208966e58e4SBram Moolenaar call assert_equal(0, 'abc def' =~# '[\u3000-\u4000]') 209966e58e4SBram Moolenaar call assert_equal(1, "\u3042" =~# '[\u3000-\u4000]') 210966e58e4SBram Moolenaar set re=0 211966e58e4SBram Moolenaarendfunc 2122a5b5275SBram Moolenaar 2132a5b5275SBram Moolenaarfunc Test_optmatch_toolong() 2142a5b5275SBram Moolenaar set re=1 2152a5b5275SBram Moolenaar " Can only handle about 8000 characters. 2162a5b5275SBram Moolenaar let pat = '\\%[' .. repeat('x', 9000) .. ']' 2172a5b5275SBram Moolenaar call assert_fails('call match("abc def", "' .. pat .. '")', 'E339:') 2182a5b5275SBram Moolenaar set re=0 2192a5b5275SBram Moolenaarendfunc 2202a5b5275SBram Moolenaar 221afc13bd8SBram Moolenaar" Test for regexp patterns with multi-byte support, using utf-8. 222afc13bd8SBram Moolenaarfunc Test_multibyte_chars() 223afc13bd8SBram Moolenaar " tl is a List of Lists with: 224afc13bd8SBram Moolenaar " 2: test auto/old/new 0: test auto/old 1: test auto/new 225afc13bd8SBram Moolenaar " regexp pattern 226afc13bd8SBram Moolenaar " text to test the pattern on 227afc13bd8SBram Moolenaar " expected match (optional) 228afc13bd8SBram Moolenaar " expected submatch 1 (optional) 229afc13bd8SBram Moolenaar " expected submatch 2 (optional) 230afc13bd8SBram Moolenaar " etc. 231afc13bd8SBram Moolenaar " When there is no match use only the first two items. 232afc13bd8SBram Moolenaar let tl = [] 233afc13bd8SBram Moolenaar 234afc13bd8SBram Moolenaar " Multi-byte character tests. These will fail unless vim is compiled 235afc13bd8SBram Moolenaar " with Multibyte (FEAT_MBYTE) or BIG/HUGE features. 236afc13bd8SBram Moolenaar call add(tl, [2, '[[:alpha:][=a=]]\+', '879 aiaãâaiuvna ', 'aiaãâaiuvna']) 237afc13bd8SBram Moolenaar call add(tl, [2, '[[=a=]]\+', 'ddaãâbcd', 'aãâ']) " equivalence classes 238afc13bd8SBram Moolenaar call add(tl, [2, '[^ม ]\+', 'มม oijasoifjos ifjoisj f osij j มมมมม abcd', 'oijasoifjos']) 239afc13bd8SBram Moolenaar call add(tl, [2, ' [^ ]\+', 'start มabcdม ', ' มabcdม']) 240afc13bd8SBram Moolenaar call add(tl, [2, '[ม[:alpha:][=a=]]\+', '879 aiaãมâมaiuvna ', 'aiaãมâมaiuvna']) 241afc13bd8SBram Moolenaar 242afc13bd8SBram Moolenaar " this is not a normal "i" but 0xec 243afc13bd8SBram Moolenaar call add(tl, [2, '\p\+', 'ìa', 'ìa']) 244afc13bd8SBram Moolenaar call add(tl, [2, '\p*', 'aあ', 'aあ']) 245afc13bd8SBram Moolenaar 246afc13bd8SBram Moolenaar " Test recognition of some character classes 247afc13bd8SBram Moolenaar call add(tl, [2, '\i\+', '&*¨xx ', 'xx']) 248afc13bd8SBram Moolenaar call add(tl, [2, '\f\+', '&*fname ', 'fname']) 249afc13bd8SBram Moolenaar 250afc13bd8SBram Moolenaar " Test composing character matching 251afc13bd8SBram Moolenaar call add(tl, [2, '.ม', 'xม่x yมy', 'yม']) 252afc13bd8SBram Moolenaar call add(tl, [2, '.ม่', 'xม่x yมy', 'xม่']) 253afc13bd8SBram Moolenaar call add(tl, [2, "\u05b9", " x\u05b9 ", "x\u05b9"]) 254afc13bd8SBram Moolenaar call add(tl, [2, ".\u05b9", " x\u05b9 ", "x\u05b9"]) 255afc13bd8SBram Moolenaar call add(tl, [2, "\u05b9\u05bb", " x\u05b9\u05bb ", "x\u05b9\u05bb"]) 256afc13bd8SBram Moolenaar call add(tl, [2, ".\u05b9\u05bb", " x\u05b9\u05bb ", "x\u05b9\u05bb"]) 257afc13bd8SBram Moolenaar call add(tl, [2, "\u05bb\u05b9", " x\u05b9\u05bb ", "x\u05b9\u05bb"]) 258afc13bd8SBram Moolenaar call add(tl, [2, ".\u05bb\u05b9", " x\u05b9\u05bb ", "x\u05b9\u05bb"]) 259afc13bd8SBram Moolenaar call add(tl, [2, "\u05b9", " y\u05bb x\u05b9 ", "x\u05b9"]) 260afc13bd8SBram Moolenaar call add(tl, [2, ".\u05b9", " y\u05bb x\u05b9 ", "x\u05b9"]) 261afc13bd8SBram Moolenaar call add(tl, [2, "\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"]) 262afc13bd8SBram Moolenaar call add(tl, [2, ".\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"]) 263afc13bd8SBram Moolenaar call add(tl, [1, "\u05b9\u05bb", " y\u05b9 x\u05b9\u05bb ", "x\u05b9\u05bb"]) 264afc13bd8SBram Moolenaar call add(tl, [2, ".\u05b9\u05bb", " y\u05bb x\u05b9\u05bb ", "x\u05b9\u05bb"]) 265afc13bd8SBram Moolenaar call add(tl, [2, "a", "ca\u0300t"]) 266afc13bd8SBram Moolenaar call add(tl, [2, "ca", "ca\u0300t"]) 267afc13bd8SBram Moolenaar call add(tl, [2, "a\u0300", "ca\u0300t", "a\u0300"]) 268afc13bd8SBram Moolenaar call add(tl, [2, 'a\%C', "ca\u0300t", "a\u0300"]) 269afc13bd8SBram Moolenaar call add(tl, [2, 'ca\%C', "ca\u0300t", "ca\u0300"]) 270afc13bd8SBram Moolenaar call add(tl, [2, 'ca\%Ct', "ca\u0300t", "ca\u0300t"]) 271afc13bd8SBram Moolenaar 272afc13bd8SBram Moolenaar " Test \Z 273afc13bd8SBram Moolenaar call add(tl, [2, 'ú\Z', 'x']) 274afc13bd8SBram Moolenaar call add(tl, [2, 'יהוה\Z', 'יהוה', 'יהוה']) 275afc13bd8SBram Moolenaar call add(tl, [2, 'יְהוָה\Z', 'יהוה', 'יהוה']) 276afc13bd8SBram Moolenaar call add(tl, [2, 'יהוה\Z', 'יְהוָה', 'יְהוָה']) 277afc13bd8SBram Moolenaar call add(tl, [2, 'יְהוָה\Z', 'יְהוָה', 'יְהוָה']) 278afc13bd8SBram Moolenaar call add(tl, [2, 'יְ\Z', 'וְיַ', 'יַ']) 279afc13bd8SBram Moolenaar call add(tl, [2, "ק\u200d\u05b9x\\Z", "xק\u200d\u05b9xy", "ק\u200d\u05b9x"]) 280afc13bd8SBram Moolenaar call add(tl, [2, "ק\u200d\u05b9x\\Z", "xק\u200dxy", "ק\u200dx"]) 281afc13bd8SBram Moolenaar call add(tl, [2, "ק\u200dx\\Z", "xק\u200d\u05b9xy", "ק\u200d\u05b9x"]) 282afc13bd8SBram Moolenaar call add(tl, [2, "ק\u200dx\\Z", "xק\u200dxy", "ק\u200dx"]) 283afc13bd8SBram Moolenaar call add(tl, [2, "\u05b9\\Z", "xyz"]) 284afc13bd8SBram Moolenaar call add(tl, [2, "\\Z\u05b9", "xyz"]) 285afc13bd8SBram Moolenaar call add(tl, [2, "\u05b9\\Z", "xy\u05b9z", "y\u05b9"]) 286afc13bd8SBram Moolenaar call add(tl, [2, "\\Z\u05b9", "xy\u05b9z", "y\u05b9"]) 287afc13bd8SBram Moolenaar call add(tl, [1, "\u05b9\\+\\Z", "xy\u05b9z\u05b9 ", "y\u05b9z\u05b9"]) 288afc13bd8SBram Moolenaar call add(tl, [1, "\\Z\u05b9\\+", "xy\u05b9z\u05b9 ", "y\u05b9z\u05b9"]) 289afc13bd8SBram Moolenaar 290afc13bd8SBram Moolenaar " Combining different tests and features 291afc13bd8SBram Moolenaar call add(tl, [2, '[^[=a=]]\+', 'ddaãâbcd', 'dd']) 292afc13bd8SBram Moolenaar 293afc13bd8SBram Moolenaar " Run the tests 294afc13bd8SBram Moolenaar for t in tl 295afc13bd8SBram Moolenaar let re = t[0] 296afc13bd8SBram Moolenaar let pat = t[1] 297afc13bd8SBram Moolenaar let text = t[2] 298afc13bd8SBram Moolenaar let matchidx = 3 299afc13bd8SBram Moolenaar for engine in [0, 1, 2] 300afc13bd8SBram Moolenaar if engine == 2 && re == 0 || engine == 1 && re == 1 301afc13bd8SBram Moolenaar continue 302afc13bd8SBram Moolenaar endif 303afc13bd8SBram Moolenaar let ®expengine = engine 304afc13bd8SBram Moolenaar try 305afc13bd8SBram Moolenaar let l = matchlist(text, pat) 306afc13bd8SBram Moolenaar catch 307afc13bd8SBram Moolenaar call assert_report('Error ' . engine . ': pat: \"' . pat . 308afc13bd8SBram Moolenaar \ '\", text: \"' . text . 309afc13bd8SBram Moolenaar \ '\", caused an exception: \"' . v:exception . '\"') 310afc13bd8SBram Moolenaar endtry 311afc13bd8SBram Moolenaar " check the match itself 312afc13bd8SBram Moolenaar if len(l) == 0 && len(t) > matchidx 313afc13bd8SBram Moolenaar call assert_report('Error ' . engine . ': pat: \"' . pat . 314afc13bd8SBram Moolenaar \ '\", text: \"' . text . 315afc13bd8SBram Moolenaar \ '\", did not match, expected: \"' . t[matchidx] . '\"') 316afc13bd8SBram Moolenaar elseif len(l) > 0 && len(t) == matchidx 317afc13bd8SBram Moolenaar call assert_report('Error ' . engine . ': pat: \"' . pat . 318afc13bd8SBram Moolenaar \ '\", text: \"' . text . '\", match: \"' . l[0] . 319afc13bd8SBram Moolenaar \ '\", expected no match') 320afc13bd8SBram Moolenaar elseif len(t) > matchidx && l[0] != t[matchidx] 321afc13bd8SBram Moolenaar call assert_report('Error ' . engine . ': pat: \"' . pat . 322afc13bd8SBram Moolenaar \ '\", text: \"' . text . '\", match: \"' . l[0] . 323afc13bd8SBram Moolenaar \ '\", expected: \"' . t[matchidx] . '\"') 324afc13bd8SBram Moolenaar else 325afc13bd8SBram Moolenaar " Test passed 326afc13bd8SBram Moolenaar endif 327afc13bd8SBram Moolenaar if len(l) > 0 328afc13bd8SBram Moolenaar " check all the nine submatches 329afc13bd8SBram Moolenaar for i in range(1, 9) 330afc13bd8SBram Moolenaar if len(t) <= matchidx + i 331afc13bd8SBram Moolenaar let e = '' 332afc13bd8SBram Moolenaar else 333afc13bd8SBram Moolenaar let e = t[matchidx + i] 334afc13bd8SBram Moolenaar endif 335afc13bd8SBram Moolenaar if l[i] != e 336afc13bd8SBram Moolenaar call assert_report('Error ' . engine . ': pat: \"' . pat . 337afc13bd8SBram Moolenaar \ '\", text: \"' . text . '\", submatch ' . i . 338afc13bd8SBram Moolenaar \ ': \"' . l[i] . '\", expected: \"' . e . '\"') 339afc13bd8SBram Moolenaar endif 340afc13bd8SBram Moolenaar endfor 341afc13bd8SBram Moolenaar unlet i 342afc13bd8SBram Moolenaar endif 343afc13bd8SBram Moolenaar endfor 344afc13bd8SBram Moolenaar endfor 345afc13bd8SBram Moolenaar set regexpengine& 346afc13bd8SBram Moolenaarendfunc 347afc13bd8SBram Moolenaar 348afc13bd8SBram Moolenaar" check that 'ambiwidth' does not change the meaning of \p 349afc13bd8SBram Moolenaarfunc Test_ambiwidth() 350afc13bd8SBram Moolenaar set regexpengine=1 ambiwidth=single 351afc13bd8SBram Moolenaar call assert_equal(0, match("\u00EC", '\p')) 352afc13bd8SBram Moolenaar set regexpengine=1 ambiwidth=double 353afc13bd8SBram Moolenaar call assert_equal(0, match("\u00EC", '\p')) 354afc13bd8SBram Moolenaar set regexpengine=2 ambiwidth=single 355afc13bd8SBram Moolenaar call assert_equal(0, match("\u00EC", '\p')) 356afc13bd8SBram Moolenaar set regexpengine=2 ambiwidth=double 357afc13bd8SBram Moolenaar call assert_equal(0, match("\u00EC", '\p')) 358afc13bd8SBram Moolenaar set regexpengine& ambiwidth& 359afc13bd8SBram Moolenaarendfunc 360afc13bd8SBram Moolenaar 36159de417bSBram Moolenaarfunc Run_regexp_ignore_case() 36259de417bSBram Moolenaar call assert_equal('iIİ', substitute('iIİ', '\([iIİ]\)', '\1', 'g')) 36359de417bSBram Moolenaar 36459de417bSBram Moolenaar call assert_equal('iIx', substitute('iIİ', '\c\([İ]\)', 'x', 'g')) 36559de417bSBram Moolenaar call assert_equal('xxİ', substitute('iIİ', '\(i\c\)', 'x', 'g')) 36659de417bSBram Moolenaar call assert_equal('iIx', substitute('iIİ', '\(İ\c\)', 'x', 'g')) 36759de417bSBram Moolenaar call assert_equal('iIx', substitute('iIİ', '\c\(\%u0130\)', 'x', 'g')) 36859de417bSBram Moolenaar call assert_equal('iIx', substitute('iIİ', '\c\([\u0130]\)', 'x', 'g')) 36959de417bSBram Moolenaar call assert_equal('iIx', substitute('iIİ', '\c\([\u012f-\u0131]\)', 'x', 'g')) 37059de417bSBram Moolenaarendfunc 37159de417bSBram Moolenaar 37259de417bSBram Moolenaarfunc Test_regexp_ignore_case() 37359de417bSBram Moolenaar set regexpengine=1 37459de417bSBram Moolenaar call Run_regexp_ignore_case() 37559de417bSBram Moolenaar set regexpengine=2 37659de417bSBram Moolenaar call Run_regexp_ignore_case() 37759de417bSBram Moolenaar set regexpengine& 37859de417bSBram Moolenaarendfunc 37959de417bSBram Moolenaar 3807d40b8a5SBram Moolenaar" Tests for regexp with multi-byte encoding and various magic settings 3817d40b8a5SBram Moolenaarfunc Run_regexp_multibyte_magic() 3827d40b8a5SBram Moolenaar let text =<< trim END 3837d40b8a5SBram Moolenaar 1 a aa abb abbccc 3847d40b8a5SBram Moolenaar 2 d dd dee deefff 3857d40b8a5SBram Moolenaar 3 g gg ghh ghhiii 3867d40b8a5SBram Moolenaar 4 j jj jkk jkklll 3877d40b8a5SBram Moolenaar 5 m mm mnn mnnooo 3887d40b8a5SBram Moolenaar 6 x ^aa$ x 3897d40b8a5SBram Moolenaar 7 (a)(b) abbaa 3907d40b8a5SBram Moolenaar 8 axx [ab]xx 3917d40b8a5SBram Moolenaar 9 หม่x อมx 3927d40b8a5SBram Moolenaar a อมx หม่x 3937d40b8a5SBram Moolenaar b ちカヨは 3947d40b8a5SBram Moolenaar c x ¬€x 3957d40b8a5SBram Moolenaar d 天使x 3967d40b8a5SBram Moolenaar e ������y 3977d40b8a5SBram Moolenaar f ������z 3987d40b8a5SBram Moolenaar g a啷bb 3997d40b8a5SBram Moolenaar j 0123❤x 4007d40b8a5SBram Moolenaar k combinations 4017d40b8a5SBram Moolenaar l äö üᾱ̆́ 4027d40b8a5SBram Moolenaar END 4037d40b8a5SBram Moolenaar 4047d40b8a5SBram Moolenaar new 4057d40b8a5SBram Moolenaar call setline(1, text) 4067d40b8a5SBram Moolenaar exe 'normal /a*b\{2}c\+/e' .. "\<CR>x" 4077d40b8a5SBram Moolenaar call assert_equal('1 a aa abb abbcc', getline('.')) 4087d40b8a5SBram Moolenaar exe 'normal /\Md\*e\{2}f\+/e' .. "\<CR>x" 4097d40b8a5SBram Moolenaar call assert_equal('2 d dd dee deeff', getline('.')) 4107d40b8a5SBram Moolenaar set nomagic 4117d40b8a5SBram Moolenaar exe 'normal /g\*h\{2}i\+/e' .. "\<CR>x" 4127d40b8a5SBram Moolenaar call assert_equal('3 g gg ghh ghhii', getline('.')) 4137d40b8a5SBram Moolenaar exe 'normal /\mj*k\{2}l\+/e' .. "\<CR>x" 4147d40b8a5SBram Moolenaar call assert_equal('4 j jj jkk jkkll', getline('.')) 4157d40b8a5SBram Moolenaar exe 'normal /\vm*n{2}o+/e' .. "\<CR>x" 4167d40b8a5SBram Moolenaar call assert_equal('5 m mm mnn mnnoo', getline('.')) 4177d40b8a5SBram Moolenaar exe 'normal /\V^aa$/' .. "\<CR>x" 4187d40b8a5SBram Moolenaar call assert_equal('6 x aa$ x', getline('.')) 4197d40b8a5SBram Moolenaar set magic 4207d40b8a5SBram Moolenaar exe 'normal /\v(a)(b)\2\1\1/e' .. "\<CR>x" 4217d40b8a5SBram Moolenaar call assert_equal('7 (a)(b) abba', getline('.')) 4227d40b8a5SBram Moolenaar exe 'normal /\V[ab]\(\[xy]\)\1' .. "\<CR>x" 4237d40b8a5SBram Moolenaar call assert_equal('8 axx ab]xx', getline('.')) 4247d40b8a5SBram Moolenaar 4257d40b8a5SBram Moolenaar " search for multi-byte without composing char 4267d40b8a5SBram Moolenaar exe 'normal /ม' .. "\<CR>x" 4277d40b8a5SBram Moolenaar call assert_equal('9 หม่x อx', getline('.')) 4287d40b8a5SBram Moolenaar 4297d40b8a5SBram Moolenaar " search for multi-byte with composing char 4307d40b8a5SBram Moolenaar exe 'normal /ม่' .. "\<CR>x" 4317d40b8a5SBram Moolenaar call assert_equal('a อมx หx', getline('.')) 4327d40b8a5SBram Moolenaar 4337d40b8a5SBram Moolenaar " find word by change of word class 4347d40b8a5SBram Moolenaar exe 'normal /ち\<カヨ\>は' .. "\<CR>x" 4357d40b8a5SBram Moolenaar call assert_equal('b カヨは', getline('.')) 4367d40b8a5SBram Moolenaar 4377d40b8a5SBram Moolenaar " Test \%u, [\u] and friends 4387d40b8a5SBram Moolenaar " c 4397d40b8a5SBram Moolenaar exe 'normal /\%u20ac' .. "\<CR>x" 4407d40b8a5SBram Moolenaar call assert_equal('c x ¬x', getline('.')) 4417d40b8a5SBram Moolenaar " d 4427d40b8a5SBram Moolenaar exe 'normal /[\u4f7f\u5929]\+' .. "\<CR>x" 4437d40b8a5SBram Moolenaar call assert_equal('d 使x', getline('.')) 4447d40b8a5SBram Moolenaar " e 4457d40b8a5SBram Moolenaar exe 'normal /\%U12345678' .. "\<CR>x" 4467d40b8a5SBram Moolenaar call assert_equal('e y', getline('.')) 4477d40b8a5SBram Moolenaar " f 4487d40b8a5SBram Moolenaar exe 'normal /[\U1234abcd\u1234\uabcd]' .. "\<CR>x" 4497d40b8a5SBram Moolenaar call assert_equal('f z', getline('.')) 4507d40b8a5SBram Moolenaar " g 4517d40b8a5SBram Moolenaar exe 'normal /\%d21879b' .. "\<CR>x" 4527d40b8a5SBram Moolenaar call assert_equal('g abb', getline('.')) 4537d40b8a5SBram Moolenaar 4547d40b8a5SBram Moolenaar " j Test backwards search from a multi-byte char 4557d40b8a5SBram Moolenaar exe "normal /x\<CR>x?.\<CR>x" 4567d40b8a5SBram Moolenaar call assert_equal('j 012❤', getline('.')) 4577d40b8a5SBram Moolenaar " k 4587d40b8a5SBram Moolenaar let @w=':%s#comb[i]nations#œ̄ṣ́m̥̄ᾱ̆́#g' 4597d40b8a5SBram Moolenaar @w 4607d40b8a5SBram Moolenaar call assert_equal('k œ̄ṣ́m̥̄ᾱ̆́', getline(18)) 4617d40b8a5SBram Moolenaar 4627d40b8a5SBram Moolenaar close! 4637d40b8a5SBram Moolenaarendfunc 4647d40b8a5SBram Moolenaar 4657d40b8a5SBram Moolenaarfunc Test_regexp_multibyte_magic() 4667d40b8a5SBram Moolenaar set regexpengine=1 4677d40b8a5SBram Moolenaar call Run_regexp_multibyte_magic() 4687d40b8a5SBram Moolenaar set regexpengine=2 4697d40b8a5SBram Moolenaar call Run_regexp_multibyte_magic() 4707d40b8a5SBram Moolenaar set regexpengine& 4717d40b8a5SBram Moolenaarendfunc 4727d40b8a5SBram Moolenaar 4737d40b8a5SBram Moolenaar" Test for 7.3.192 4747d40b8a5SBram Moolenaar" command ":s/ \?/ /g" splits multi-byte characters into bytes 4757d40b8a5SBram Moolenaarfunc Test_split_multibyte_to_bytes() 4767d40b8a5SBram Moolenaar new 4777d40b8a5SBram Moolenaar call setline(1, 'l äö üᾱ̆́') 4787d40b8a5SBram Moolenaar s/ \?/ /g 4797d40b8a5SBram Moolenaar call assert_equal(' l ä ö ü ᾱ̆́', getline(1)) 4807d40b8a5SBram Moolenaar close! 4817d40b8a5SBram Moolenaarendfunc 4827d40b8a5SBram Moolenaar 4837d40b8a5SBram Moolenaar" Test for matchstr() with multibyte characters 4847d40b8a5SBram Moolenaarfunc Test_matchstr_multibyte() 4857d40b8a5SBram Moolenaar new 4867d40b8a5SBram Moolenaar call assert_equal('ב', matchstr("אבגד", ".", 0, 2)) 4877d40b8a5SBram Moolenaar call assert_equal('בג', matchstr("אבגד", "..", 0, 2)) 4887d40b8a5SBram Moolenaar call assert_equal('א', matchstr("אבגד", ".", 0, 0)) 4897d40b8a5SBram Moolenaar call assert_equal('ג', matchstr("אבגד", ".", 4, -1)) 4907d40b8a5SBram Moolenaar close! 4917d40b8a5SBram Moolenaarendfunc 4927d40b8a5SBram Moolenaar 4937d40b8a5SBram Moolenaar" Test for 7.4.636 4947d40b8a5SBram Moolenaar" A search with end offset gets stuck at end of file. 4957d40b8a5SBram Moolenaarfunc Test_search_with_end_offset() 4967d40b8a5SBram Moolenaar new 4977d40b8a5SBram Moolenaar call setline(1, ['', 'dog(a', 'cat(']) 4988a9bc95eSBram Moolenaar exe "normal /(/e+\<CR>" 4998a9bc95eSBram Moolenaar normal n"ayn 5007d40b8a5SBram Moolenaar call assert_equal("a\ncat(", @a) 5017d40b8a5SBram Moolenaar close! 5027d40b8a5SBram Moolenaarendfunc 5037d40b8a5SBram Moolenaar 504ef2dff52SBram Moolenaar" Check that "^" matches even when the line starts with a combining char 505ef2dff52SBram Moolenaarfunc Test_match_start_of_line_combining() 506ef2dff52SBram Moolenaar new 507ef2dff52SBram Moolenaar call setline(1, ['', "\u05ae", '']) 508ef2dff52SBram Moolenaar exe "normal gg/^\<CR>" 509ef2dff52SBram Moolenaar call assert_equal(2, getcurpos()[1]) 510ef2dff52SBram Moolenaar bwipe! 511ef2dff52SBram Moolenaarendfunc 512ef2dff52SBram Moolenaar 51366c50c56SBram Moolenaar" Check that [[:upper:]] matches for automatic engine 51466c50c56SBram Moolenaarfunc Test_match_char_class_upper() 51566c50c56SBram Moolenaar new 51666c50c56SBram Moolenaar let _engine=®expengine 517ef2dff52SBram Moolenaar 51866c50c56SBram Moolenaar " Test 1: [[:upper:]]\{2,\} 51966c50c56SBram Moolenaar set regexpengine=0 52066c50c56SBram Moolenaar call setline(1, ['05. ПЕСНЯ О ГЕРОЯХ муз. А. Давиденко, М. Коваля и Б. Шехтера ...', '05. PJESNJA O GJEROJAKH mus. A. Davidjenko, M. Kovalja i B. Shjekhtjera ...']) 52166c50c56SBram Moolenaar call cursor(1,1) 52266c50c56SBram Moolenaar let search_cmd='norm /\<[[:upper:]]\{2,\}\>' .. "\<CR>" 52366c50c56SBram Moolenaar exe search_cmd 52466c50c56SBram Moolenaar call assert_equal(4, searchcount().total, 'TEST 1') 52566c50c56SBram Moolenaar set regexpengine=1 52666c50c56SBram Moolenaar exe search_cmd 52766c50c56SBram Moolenaar call assert_equal(2, searchcount().total, 'TEST 1') 52866c50c56SBram Moolenaar set regexpengine=2 52966c50c56SBram Moolenaar exe search_cmd 53066c50c56SBram Moolenaar call assert_equal(4, searchcount().total, 'TEST 1') 53166c50c56SBram Moolenaar 53266c50c56SBram Moolenaar " Test 2: [[:upper:]].\+ 53366c50c56SBram Moolenaar let search_cmd='norm /\<[[:upper:]].\+\>' .. "\<CR>" 53466c50c56SBram Moolenaar set regexpengine=0 53566c50c56SBram Moolenaar exe search_cmd 53666c50c56SBram Moolenaar call assert_equal(2, searchcount().total, 'TEST 2') 53766c50c56SBram Moolenaar set regexpengine=1 53866c50c56SBram Moolenaar exe search_cmd 53966c50c56SBram Moolenaar call assert_equal(1, searchcount().total, 'TEST 2') 54066c50c56SBram Moolenaar set regexpengine=2 54166c50c56SBram Moolenaar exe search_cmd 54266c50c56SBram Moolenaar call assert_equal(2, searchcount().total, 'TEST 2') 54366c50c56SBram Moolenaar 54466c50c56SBram Moolenaar " Test 3: [[:lower:]]\+ 54566c50c56SBram Moolenaar let search_cmd='norm /\<[[:lower:]]\+\>' .. "\<CR>" 54666c50c56SBram Moolenaar set regexpengine=0 54766c50c56SBram Moolenaar exe search_cmd 54866c50c56SBram Moolenaar call assert_equal(4, searchcount().total, 'TEST 3 lower') 54966c50c56SBram Moolenaar set regexpengine=1 55066c50c56SBram Moolenaar exe search_cmd 55166c50c56SBram Moolenaar call assert_equal(2, searchcount().total, 'TEST 3 lower') 55266c50c56SBram Moolenaar set regexpengine=2 55366c50c56SBram Moolenaar exe search_cmd 55466c50c56SBram Moolenaar call assert_equal(4, searchcount().total, 'TEST 3 lower') 55566c50c56SBram Moolenaar 55666c50c56SBram Moolenaar " clean up 55766c50c56SBram Moolenaar let ®expengine=_engine 55866c50c56SBram Moolenaar bwipe! 55966c50c56SBram Moolenaarendfunc 560ef2dff52SBram Moolenaar 561*65b60566SBram Moolenaarfunc Test_match_invalid_byte() 562*65b60566SBram Moolenaar call writefile(0z630a.765d30aa0a.2e0a.790a.4030, 'Xinvalid') 563*65b60566SBram Moolenaar new 564*65b60566SBram Moolenaar source Xinvalid 565*65b60566SBram Moolenaar bwipe! 566*65b60566SBram Moolenaar call delete('Xinvalid') 567*65b60566SBram Moolenaarendfunc 568*65b60566SBram Moolenaar 569afc13bd8SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 570