1" Tests for regexp with backslash and other special characters inside [] 2" Also test backslash for hex/octal numbered character. 3" 4 5scriptencoding utf-8 6 7function 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! 13endfunction 14 15function 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! 21endfunction 22 23 24function 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) 41endfunction 42 43function 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") 61endfunction 62 63" Test character classes in regexp using regexpengine 0, 1, 2. 64func 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 295endfunc 296 297" vim: shiftwidth=2 sts=2 expandtab 298