neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

test_regex_char_classes.vim (13764B)


      1 " Tests for regexp with backslash and other special characters inside []
      2 " Also test backslash for hex/octal numbered character.
      3 "
      4 
      5 scriptencoding utf-8
      6 
      7 function RunSTest(value, calls, expected)
      8  new
      9  call feedkeys("i" . a:value, "mx")
     10  exec a:calls
     11  call assert_equal(a:expected, getline(1), printf("wrong result for %s", a:calls))
     12  quit!
     13 endfunction
     14 
     15 function RunXTest(value, search_exp, expected)
     16  new
     17  call feedkeys("i" . a:value, "mx")
     18  call feedkeys("gg" . a:search_exp . "\nx", "mx")
     19  call assert_equal(a:expected, getline(1), printf("wrong result for %s", a:search_exp))
     20  quit!
     21 endfunction
     22 
     23 
     24 function Test_x_search()
     25  let res = "test text test text"
     26  call RunXTest("test \\text test text", "/[\\x]", res)
     27  call RunXTest("test \ttext test text", "/[\\t\\]]", res)
     28  call RunXTest("test text ]test text", "/[]y]", res)
     29  call RunXTest("test ]text test text", "/[\\]]", res)
     30  call RunXTest("test text te^st text", "/[y^]", res)
     31  call RunXTest("test te$xt test text", "/[$y]", res)
     32  call RunXTest("test taext test text", "/[\\x61]", res)
     33  call RunXTest("test tbext test text","/[\\x60-\\x64]", res)
     34  call RunXTest("test 5text test text","/[\\x785]", res)
     35  call RunXTest("testc text test text","/[\\o143]", res)
     36  call RunXTest("tesdt text test text","/[\\o140-\\o144]", res)
     37  call RunXTest("test7 text test text", "/[\\o417]", res)
     38  call RunXTest("test text tBest text", "/\\%x42", res)
     39  call RunXTest("test text teCst text", "/\\%o103", res)
     40  call RunXTest("test text \<C-V>x00test text", "/[\\x00]", res)
     41 endfunction
     42 
     43 function Test_s_search()
     44  let res = "test text test text"
     45  call RunSTest("test te\<C-V>x00xt t\<C-V>x04est t\<C-V>x10ext", "s/[\\x00-\\x10]//g", res)
     46  call RunSTest("test \\xyztext test text", "s/[\\x-z]\\+//", res)
     47  call RunSTest("test text tev\\uyst text", "s/[\\u-z]\\{2,}//", res)
     48  call RunSTest("xx aaaaa xx a", "s/\\(a\\)\\+//", "xx  xx a")
     49  call RunSTest("xx aaaaa xx a", "s/\\(a*\\)\\+//", "xx aaaaa xx a")
     50  call RunSTest("xx aaaaa xx a", "s/\\(a*\\)*//", "xx aaaaa xx a")
     51  call RunSTest("xx aaaaa xx", "s/\\(a\\)\\{2,3}/A/", "xx Aaa xx")
     52  call RunSTest("xx aaaaa xx", "s/\\(a\\)\\{-2,3}/A/", "xx Aaaa xx")
     53  call RunSTest("xx aaa12aa xx", "s/\\(a\\)*\\(12\\)\\@>/A/", "xx Aaa xx")
     54  call RunSTest("xx foobar xbar xx", "s/\\(foo\\)\\@<!bar/A/", "xx foobar xA xx")
     55  call RunSTest("xx an file xx", "s/\\(an\\_s\\+\\)\\@<=file/A/", "xx an A xx")
     56  call RunSTest("x= 9;", "s/^\\(\\h\\w*\\%(->\\|\\.\\)\\=\\)\\+=/XX/", "XX 9;")
     57  call RunSTest("hh= 77;", "s/^\\(\\h\\w*\\%(->\\|\\.\\)\\=\\)\\+=/YY/", "YY 77;")
     58  call RunSTest(" aaa ", "s/aaa/xyz/", " xyz ")
     59  call RunSTest(" xyz", "s/~/bcd/", " bcd")
     60  call RunSTest(" bcdbcdbcd", "s/~\\+/BB/", " BB")
     61 endfunction
     62 
     63 " Test character classes in regexp using regexpengine 0, 1, 2.
     64 func Test_regex_char_classes()
     65  new
     66  let save_enc = &encoding
     67  set encoding=utf-8
     68 
     69  let input = "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"
     70 
     71  " Format is [cmd_to_run, expected_output]
     72  let tests = [
     73    \ [':s/\%#=0\d//g',
     74    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
     75    \ [':s/\%#=1\d//g',
     76    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
     77    \ [':s/\%#=2\d//g',
     78    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
     79    \ [':s/\%#=0[0-9]//g',
     80    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
     81    \ [':s/\%#=1[0-9]//g',
     82    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
     83    \ [':s/\%#=2[0-9]//g',
     84    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
     85    \ [':s/\%#=0\D//g',
     86    \ "0123456789"],
     87    \ [':s/\%#=1\D//g',
     88    \ "0123456789"],
     89    \ [':s/\%#=2\D//g',
     90    \ "0123456789"],
     91    \ [':s/\%#=0[^0-9]//g',
     92    \ "0123456789"],
     93    \ [':s/\%#=1[^0-9]//g',
     94    \ "0123456789"],
     95    \ [':s/\%#=2[^0-9]//g',
     96    \ "0123456789"],
     97    \ [':s/\%#=0\o//g',
     98    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
     99    \ [':s/\%#=1\o//g',
    100    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    101    \ [':s/\%#=2\o//g',
    102    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    103    \ [':s/\%#=0[0-7]//g',
    104    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    105    \ [':s/\%#=1[0-7]//g',
    106    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    107    \ [':s/\%#=2[0-7]//g',
    108    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    109    \ [':s/\%#=0\O//g',
    110    \ "01234567"],
    111    \ [':s/\%#=1\O//g',
    112    \ "01234567"],
    113    \ [':s/\%#=2\O//g',
    114    \ "01234567"],
    115    \ [':s/\%#=0[^0-7]//g',
    116    \ "01234567"],
    117    \ [':s/\%#=1[^0-7]//g',
    118    \ "01234567"],
    119    \ [':s/\%#=2[^0-7]//g',
    120    \ "01234567"],
    121    \ [':s/\%#=0\x//g',
    122    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    123    \ [':s/\%#=1\x//g',
    124    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    125    \ [':s/\%#=2\x//g',
    126    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    127    \ [':s/\%#=0[0-9A-Fa-f]//g',
    128    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    129    \ [':s/\%#=1[0-9A-Fa-f]//g',
    130    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    131    \ [':s/\%#=2[0-9A-Fa-f]//g',
    132    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    133    \ [':s/\%#=0\X//g',
    134    \ "0123456789ABCDEFabcdef"],
    135    \ [':s/\%#=1\X//g',
    136    \ "0123456789ABCDEFabcdef"],
    137    \ [':s/\%#=2\X//g',
    138    \ "0123456789ABCDEFabcdef"],
    139    \ [':s/\%#=0[^0-9A-Fa-f]//g',
    140    \ "0123456789ABCDEFabcdef"],
    141    \ [':s/\%#=1[^0-9A-Fa-f]//g',
    142    \ "0123456789ABCDEFabcdef"],
    143    \ [':s/\%#=2[^0-9A-Fa-f]//g',
    144    \ "0123456789ABCDEFabcdef"],
    145    \ [':s/\%#=0\w//g',
    146    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    147    \ [':s/\%#=1\w//g',
    148    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    149    \ [':s/\%#=2\w//g',
    150    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    151    \ [':s/\%#=0[0-9A-Za-z_]//g',
    152    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    153    \ [':s/\%#=1[0-9A-Za-z_]//g',
    154    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    155    \ [':s/\%#=2[0-9A-Za-z_]//g',
    156    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    157    \ [':s/\%#=0\W//g',
    158    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
    159    \ [':s/\%#=1\W//g',
    160    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
    161    \ [':s/\%#=2\W//g',
    162    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
    163    \ [':s/\%#=0[^0-9A-Za-z_]//g',
    164    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
    165    \ [':s/\%#=1[^0-9A-Za-z_]//g',
    166    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
    167    \ [':s/\%#=2[^0-9A-Za-z_]//g',
    168    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
    169    \ [':s/\%#=0\h//g',
    170    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    171    \ [':s/\%#=1\h//g',
    172    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    173    \ [':s/\%#=2\h//g',
    174    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    175    \ [':s/\%#=0[A-Za-z_]//g',
    176    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    177    \ [':s/\%#=1[A-Za-z_]//g',
    178    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    179    \ [':s/\%#=2[A-Za-z_]//g',
    180    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    181    \ [':s/\%#=0\H//g',
    182    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
    183    \ [':s/\%#=1\H//g',
    184    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
    185    \ [':s/\%#=2\H//g',
    186    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
    187    \ [':s/\%#=0[^A-Za-z_]//g',
    188    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
    189    \ [':s/\%#=1[^A-Za-z_]//g',
    190    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
    191    \ [':s/\%#=2[^A-Za-z_]//g',
    192    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
    193    \ [':s/\%#=0\a//g',
    194    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    195    \ [':s/\%#=1\a//g',
    196    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    197    \ [':s/\%#=2\a//g',
    198    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    199    \ [':s/\%#=0[A-Za-z]//g',
    200    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    201    \ [':s/\%#=1[A-Za-z]//g',
    202    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    203    \ [':s/\%#=2[A-Za-z]//g',
    204    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    205    \ [':s/\%#=0\A//g',
    206    \ "ABCDEFGHIXYZabcdefghiwxyz"],
    207    \ [':s/\%#=1\A//g',
    208    \ "ABCDEFGHIXYZabcdefghiwxyz"],
    209    \ [':s/\%#=2\A//g',
    210    \ "ABCDEFGHIXYZabcdefghiwxyz"],
    211    \ [':s/\%#=0[^A-Za-z]//g',
    212    \ "ABCDEFGHIXYZabcdefghiwxyz"],
    213    \ [':s/\%#=1[^A-Za-z]//g',
    214    \ "ABCDEFGHIXYZabcdefghiwxyz"],
    215    \ [':s/\%#=2[^A-Za-z]//g',
    216    \ "ABCDEFGHIXYZabcdefghiwxyz"],
    217    \ [':s/\%#=0\l//g',
    218    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    219    \ [':s/\%#=1\l//g',
    220    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    221    \ [':s/\%#=2\l//g',
    222    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    223    \ [':s/\%#=0[a-z]//g',
    224    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    225    \ [':s/\%#=1[a-z]//g',
    226    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    227    \ [':s/\%#=2[a-z]//g',
    228    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    229    \ [':s/\%#=0\L//g',
    230    \ "abcdefghiwxyz"],
    231    \ [':s/\%#=1\L//g',
    232    \ "abcdefghiwxyz"],
    233    \ [':s/\%#=2\L//g',
    234    \ "abcdefghiwxyz"],
    235    \ [':s/\%#=0[^a-z]//g',
    236    \ "abcdefghiwxyz"],
    237    \ [':s/\%#=1[^a-z]//g',
    238    \ "abcdefghiwxyz"],
    239    \ [':s/\%#=2[^a-z]//g',
    240    \ "abcdefghiwxyz"],
    241    \ [':s/\%#=0\u//g',
    242    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    243    \ [':s/\%#=1\u//g',
    244    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    245    \ [':s/\%#=2\u//g',
    246    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    247    \ [':s/\%#=0[A-Z]//g',
    248    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    249    \ [':s/\%#=1[A-Z]//g',
    250    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    251    \ [':s/\%#=2[A-Z]//g',
    252    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    253    \ [':s/\%#=0\U//g',
    254    \ "ABCDEFGHIXYZ"],
    255    \ [':s/\%#=1\U//g',
    256    \ "ABCDEFGHIXYZ"],
    257    \ [':s/\%#=2\U//g',
    258    \ "ABCDEFGHIXYZ"],
    259    \ [':s/\%#=0[^A-Z]//g',
    260    \ "ABCDEFGHIXYZ"],
    261    \ [':s/\%#=1[^A-Z]//g',
    262    \ "ABCDEFGHIXYZ"],
    263    \ [':s/\%#=2[^A-Z]//g',
    264    \ "ABCDEFGHIXYZ"],
    265    \ [':s/\%#=0\%' . line('.') . 'l^\t...//g',
    266    \ "!\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    267    \ [':s/\%#=1\%' . line('.') . 'l^\t...//g',
    268    \ "!\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    269    \ [':s/\%#=2\%' . line('.') . 'l^\t...//g',
    270    \ "!\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    271    \ [':s/\%#=0[0-z]//g',
    272    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    273    \ [':s/\%#=1[0-z]//g',
    274    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    275    \ [':s/\%#=2[0-z]//g',
    276    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
    277    \ [':s/\%#=0[^0-z]//g',
    278    \ "0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz"],
    279    \ [':s/\%#=1[^0-z]//g',
    280    \ "0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz"],
    281    \ [':s/\%#=2[^0-z]//g',
    282    \ "0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz"]
    283    \]
    284 
    285  for [cmd, expected] in tests
    286      call append(0, input)
    287      call cursor(1, 1)
    288      exe cmd
    289      call assert_equal(expected, getline(1), cmd)
    290  endfor
    291 
    292  let &encoding = save_enc
    293  enew!
    294  close
    295 endfunc
    296 
    297 " vim: shiftwidth=2 sts=2 expandtab