1292eff0cSBram Moolenaar" Tests for regexp with backslash and other special characters inside []
2292eff0cSBram Moolenaar" Also test backslash for hex/octal numbered character.
3cada7897SBram Moolenaar"
4cada7897SBram Moolenaar
5cada7897SBram Moolenaarscriptencoding utf-8
6292eff0cSBram Moolenaar
7292eff0cSBram Moolenaarfunction RunSTest(value, calls, expected)
8292eff0cSBram Moolenaar  new
9292eff0cSBram Moolenaar  call feedkeys("i" . a:value, "mx")
10292eff0cSBram Moolenaar  exec a:calls
11292eff0cSBram Moolenaar  call assert_equal(a:expected, getline(1), printf("wrong result for %s", a:calls))
12292eff0cSBram Moolenaar  quit!
13292eff0cSBram Moolenaarendfunction
14292eff0cSBram Moolenaar
15292eff0cSBram Moolenaarfunction RunXTest(value, search_exp, expected)
16292eff0cSBram Moolenaar  new
17292eff0cSBram Moolenaar  call feedkeys("i" . a:value, "mx")
18292eff0cSBram Moolenaar  call feedkeys("gg" . a:search_exp . "\nx", "mx")
19292eff0cSBram Moolenaar  call assert_equal(a:expected, getline(1), printf("wrong result for %s", a:search_exp))
20292eff0cSBram Moolenaar  quit!
21292eff0cSBram Moolenaarendfunction
22292eff0cSBram Moolenaar
23292eff0cSBram Moolenaar
24292eff0cSBram Moolenaarfunction Test_x_search()
25292eff0cSBram Moolenaar  let res = "test text test text"
26292eff0cSBram Moolenaar  call RunXTest("test \\text test text", "/[\\x]", res)
27292eff0cSBram Moolenaar  call RunXTest("test \ttext test text", "/[\\t\\]]", res)
28292eff0cSBram Moolenaar  call RunXTest("test text ]test text", "/[]y]", res)
29292eff0cSBram Moolenaar  call RunXTest("test ]text test text", "/[\\]]", res)
30292eff0cSBram Moolenaar  call RunXTest("test text te^st text", "/[y^]", res)
31292eff0cSBram Moolenaar  call RunXTest("test te$xt test text", "/[$y]", res)
32292eff0cSBram Moolenaar  call RunXTest("test taext test text", "/[\\x61]", res)
33292eff0cSBram Moolenaar  call RunXTest("test tbext test text","/[\\x60-\\x64]", res)
34292eff0cSBram Moolenaar  call RunXTest("test 5text test text","/[\\x785]", res)
35292eff0cSBram Moolenaar  call RunXTest("testc text test text","/[\\o143]", res)
36292eff0cSBram Moolenaar  call RunXTest("tesdt text test text","/[\\o140-\\o144]", res)
37292eff0cSBram Moolenaar  call RunXTest("test7 text test text", "/[\\o417]", res)
38292eff0cSBram Moolenaar  call RunXTest("test text tBest text", "/\\%x42", res)
39292eff0cSBram Moolenaar  call RunXTest("test text teCst text", "/\\%o103", res)
40292eff0cSBram Moolenaar  call RunXTest("test text \<C-V>x00test text", "/[\\x00]", res)
41292eff0cSBram Moolenaarendfunction
42292eff0cSBram Moolenaar
43292eff0cSBram Moolenaarfunction Test_s_search()
44292eff0cSBram Moolenaar  let res = "test text test text"
45292eff0cSBram Moolenaar  call RunSTest("test te\<C-V>x00xt t\<C-V>x04est t\<C-V>x10ext", "s/[\\x00-\\x10]//g", res)
46292eff0cSBram Moolenaar  call RunSTest("test \\xyztext test text", "s/[\\x-z]\\+//", res)
47292eff0cSBram Moolenaar  call RunSTest("test text tev\\uyst text", "s/[\\u-z]\\{2,}//", res)
48292eff0cSBram Moolenaar  call RunSTest("xx aaaaa xx a", "s/\\(a\\)\\+//", "xx  xx a")
49292eff0cSBram Moolenaar  call RunSTest("xx aaaaa xx a", "s/\\(a*\\)\\+//", "xx aaaaa xx a")
50292eff0cSBram Moolenaar  call RunSTest("xx aaaaa xx a", "s/\\(a*\\)*//", "xx aaaaa xx a")
51292eff0cSBram Moolenaar  call RunSTest("xx aaaaa xx", "s/\\(a\\)\\{2,3}/A/", "xx Aaa xx")
52292eff0cSBram Moolenaar  call RunSTest("xx aaaaa xx", "s/\\(a\\)\\{-2,3}/A/", "xx Aaaa xx")
53292eff0cSBram Moolenaar  call RunSTest("xx aaa12aa xx", "s/\\(a\\)*\\(12\\)\\@>/A/", "xx Aaa xx")
54292eff0cSBram Moolenaar  call RunSTest("xx foobar xbar xx", "s/\\(foo\\)\\@<!bar/A/", "xx foobar xA xx")
55292eff0cSBram Moolenaar  call RunSTest("xx an file xx", "s/\\(an\\_s\\+\\)\\@<=file/A/", "xx an A xx")
56292eff0cSBram Moolenaar  call RunSTest("x= 9;", "s/^\\(\\h\\w*\\%(->\\|\\.\\)\\=\\)\\+=/XX/", "XX 9;")
57292eff0cSBram Moolenaar  call RunSTest("hh= 77;", "s/^\\(\\h\\w*\\%(->\\|\\.\\)\\=\\)\\+=/YY/", "YY 77;")
58292eff0cSBram Moolenaar  call RunSTest(" aaa ", "s/aaa/xyz/", " xyz ")
59292eff0cSBram Moolenaar  call RunSTest(" xyz", "s/~/bcd/", " bcd")
60292eff0cSBram Moolenaar  call RunSTest(" bcdbcdbcd", "s/~\\+/BB/", " BB")
61292eff0cSBram Moolenaarendfunction
62cada7897SBram Moolenaar
63cada7897SBram Moolenaar" Test character classes in regexp using regexpengine 0, 1, 2.
64cada7897SBram Moolenaarfunc Test_regex_char_classes()
65cada7897SBram Moolenaar  new
66cada7897SBram Moolenaar  let save_enc = &encoding
67cada7897SBram Moolenaar  set encoding=utf-8
68cada7897SBram Moolenaar
69cada7897SBram Moolenaar  let input = "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"
70cada7897SBram Moolenaar
71cada7897SBram Moolenaar  " Format is [cmd_to_run, expected_output]
72cada7897SBram Moolenaar  let tests = [
73cada7897SBram Moolenaar    \ [':s/\%#=0\d//g',
74cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
75cada7897SBram Moolenaar    \ [':s/\%#=1\d//g',
76cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
77cada7897SBram Moolenaar    \ [':s/\%#=2\d//g',
78cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
79cada7897SBram Moolenaar    \ [':s/\%#=0[0-9]//g',
80cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
81cada7897SBram Moolenaar    \ [':s/\%#=1[0-9]//g',
82cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
83cada7897SBram Moolenaar    \ [':s/\%#=2[0-9]//g',
84cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
85cada7897SBram Moolenaar    \ [':s/\%#=0\D//g',
86cada7897SBram Moolenaar    \ "0123456789"],
87cada7897SBram Moolenaar    \ [':s/\%#=1\D//g',
88cada7897SBram Moolenaar    \ "0123456789"],
89cada7897SBram Moolenaar    \ [':s/\%#=2\D//g',
90cada7897SBram Moolenaar    \ "0123456789"],
91cada7897SBram Moolenaar    \ [':s/\%#=0[^0-9]//g',
92cada7897SBram Moolenaar    \ "0123456789"],
93cada7897SBram Moolenaar    \ [':s/\%#=1[^0-9]//g',
94cada7897SBram Moolenaar    \ "0123456789"],
95cada7897SBram Moolenaar    \ [':s/\%#=2[^0-9]//g',
96cada7897SBram Moolenaar    \ "0123456789"],
97cada7897SBram Moolenaar    \ [':s/\%#=0\o//g',
98cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
99cada7897SBram Moolenaar    \ [':s/\%#=1\o//g',
100cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
101cada7897SBram Moolenaar    \ [':s/\%#=2\o//g',
102cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
103cada7897SBram Moolenaar    \ [':s/\%#=0[0-7]//g',
104cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
105cada7897SBram Moolenaar    \ [':s/\%#=1[0-7]//g',
106cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
107cada7897SBram Moolenaar    \ [':s/\%#=2[0-7]//g',
108cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
109cada7897SBram Moolenaar    \ [':s/\%#=0\O//g',
110cada7897SBram Moolenaar    \ "01234567"],
111cada7897SBram Moolenaar    \ [':s/\%#=1\O//g',
112cada7897SBram Moolenaar    \ "01234567"],
113cada7897SBram Moolenaar    \ [':s/\%#=2\O//g',
114cada7897SBram Moolenaar    \ "01234567"],
115cada7897SBram Moolenaar    \ [':s/\%#=0[^0-7]//g',
116cada7897SBram Moolenaar    \ "01234567"],
117cada7897SBram Moolenaar    \ [':s/\%#=1[^0-7]//g',
118cada7897SBram Moolenaar    \ "01234567"],
119cada7897SBram Moolenaar    \ [':s/\%#=2[^0-7]//g',
120cada7897SBram Moolenaar    \ "01234567"],
121cada7897SBram Moolenaar    \ [':s/\%#=0\x//g',
122cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
123cada7897SBram Moolenaar    \ [':s/\%#=1\x//g',
124cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
125cada7897SBram Moolenaar    \ [':s/\%#=2\x//g',
126cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
127cada7897SBram Moolenaar    \ [':s/\%#=0[0-9A-Fa-f]//g',
128cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
129cada7897SBram Moolenaar    \ [':s/\%#=1[0-9A-Fa-f]//g',
130cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
131cada7897SBram Moolenaar    \ [':s/\%#=2[0-9A-Fa-f]//g',
132cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
133cada7897SBram Moolenaar    \ [':s/\%#=0\X//g',
134cada7897SBram Moolenaar    \ "0123456789ABCDEFabcdef"],
135cada7897SBram Moolenaar    \ [':s/\%#=1\X//g',
136cada7897SBram Moolenaar    \ "0123456789ABCDEFabcdef"],
137cada7897SBram Moolenaar    \ [':s/\%#=2\X//g',
138cada7897SBram Moolenaar    \ "0123456789ABCDEFabcdef"],
139cada7897SBram Moolenaar    \ [':s/\%#=0[^0-9A-Fa-f]//g',
140cada7897SBram Moolenaar    \ "0123456789ABCDEFabcdef"],
141cada7897SBram Moolenaar    \ [':s/\%#=1[^0-9A-Fa-f]//g',
142cada7897SBram Moolenaar    \ "0123456789ABCDEFabcdef"],
143cada7897SBram Moolenaar    \ [':s/\%#=2[^0-9A-Fa-f]//g',
144cada7897SBram Moolenaar    \ "0123456789ABCDEFabcdef"],
145cada7897SBram Moolenaar    \ [':s/\%#=0\w//g',
146cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
147cada7897SBram Moolenaar    \ [':s/\%#=1\w//g',
148cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
149cada7897SBram Moolenaar    \ [':s/\%#=2\w//g',
150cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
151cada7897SBram Moolenaar    \ [':s/\%#=0[0-9A-Za-z_]//g',
152cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
153cada7897SBram Moolenaar    \ [':s/\%#=1[0-9A-Za-z_]//g',
154cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
155cada7897SBram Moolenaar    \ [':s/\%#=2[0-9A-Za-z_]//g',
156cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
157cada7897SBram Moolenaar    \ [':s/\%#=0\W//g',
158cada7897SBram Moolenaar    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
159cada7897SBram Moolenaar    \ [':s/\%#=1\W//g',
160cada7897SBram Moolenaar    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
161cada7897SBram Moolenaar    \ [':s/\%#=2\W//g',
162cada7897SBram Moolenaar    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
163cada7897SBram Moolenaar    \ [':s/\%#=0[^0-9A-Za-z_]//g',
164cada7897SBram Moolenaar    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
165cada7897SBram Moolenaar    \ [':s/\%#=1[^0-9A-Za-z_]//g',
166cada7897SBram Moolenaar    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
167cada7897SBram Moolenaar    \ [':s/\%#=2[^0-9A-Za-z_]//g',
168cada7897SBram Moolenaar    \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
169cada7897SBram Moolenaar    \ [':s/\%#=0\h//g',
170cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
171cada7897SBram Moolenaar    \ [':s/\%#=1\h//g',
172cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
173cada7897SBram Moolenaar    \ [':s/\%#=2\h//g',
174cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
175cada7897SBram Moolenaar    \ [':s/\%#=0[A-Za-z_]//g',
176cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
177cada7897SBram Moolenaar    \ [':s/\%#=1[A-Za-z_]//g',
178cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
179cada7897SBram Moolenaar    \ [':s/\%#=2[A-Za-z_]//g',
180cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
181cada7897SBram Moolenaar    \ [':s/\%#=0\H//g',
182cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
183cada7897SBram Moolenaar    \ [':s/\%#=1\H//g',
184cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
185cada7897SBram Moolenaar    \ [':s/\%#=2\H//g',
186cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
187cada7897SBram Moolenaar    \ [':s/\%#=0[^A-Za-z_]//g',
188cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
189cada7897SBram Moolenaar    \ [':s/\%#=1[^A-Za-z_]//g',
190cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
191cada7897SBram Moolenaar    \ [':s/\%#=2[^A-Za-z_]//g',
192cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
193cada7897SBram Moolenaar    \ [':s/\%#=0\a//g',
194cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
195cada7897SBram Moolenaar    \ [':s/\%#=1\a//g',
196cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
197cada7897SBram Moolenaar    \ [':s/\%#=2\a//g',
198cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
199cada7897SBram Moolenaar    \ [':s/\%#=0[A-Za-z]//g',
200cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
201cada7897SBram Moolenaar    \ [':s/\%#=1[A-Za-z]//g',
202cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
203cada7897SBram Moolenaar    \ [':s/\%#=2[A-Za-z]//g',
204cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
205cada7897SBram Moolenaar    \ [':s/\%#=0\A//g',
206cada7897SBram Moolenaar    \ "ABCDEFGHIXYZabcdefghiwxyz"],
207cada7897SBram Moolenaar    \ [':s/\%#=1\A//g',
208cada7897SBram Moolenaar    \ "ABCDEFGHIXYZabcdefghiwxyz"],
209cada7897SBram Moolenaar    \ [':s/\%#=2\A//g',
210cada7897SBram Moolenaar    \ "ABCDEFGHIXYZabcdefghiwxyz"],
211cada7897SBram Moolenaar    \ [':s/\%#=0[^A-Za-z]//g',
212cada7897SBram Moolenaar    \ "ABCDEFGHIXYZabcdefghiwxyz"],
213cada7897SBram Moolenaar    \ [':s/\%#=1[^A-Za-z]//g',
214cada7897SBram Moolenaar    \ "ABCDEFGHIXYZabcdefghiwxyz"],
215cada7897SBram Moolenaar    \ [':s/\%#=2[^A-Za-z]//g',
216cada7897SBram Moolenaar    \ "ABCDEFGHIXYZabcdefghiwxyz"],
217cada7897SBram Moolenaar    \ [':s/\%#=0\l//g',
218cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
219cada7897SBram Moolenaar    \ [':s/\%#=1\l//g',
220cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
221cada7897SBram Moolenaar    \ [':s/\%#=2\l//g',
222cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
223cada7897SBram Moolenaar    \ [':s/\%#=0[a-z]//g',
224cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
225cada7897SBram Moolenaar    \ [':s/\%#=1[a-z]//g',
226cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
227cada7897SBram Moolenaar    \ [':s/\%#=2[a-z]//g',
228cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
229cada7897SBram Moolenaar    \ [':s/\%#=0\L//g',
230cada7897SBram Moolenaar    \ "abcdefghiwxyz"],
231cada7897SBram Moolenaar    \ [':s/\%#=1\L//g',
232cada7897SBram Moolenaar    \ "abcdefghiwxyz"],
233cada7897SBram Moolenaar    \ [':s/\%#=2\L//g',
234cada7897SBram Moolenaar    \ "abcdefghiwxyz"],
235cada7897SBram Moolenaar    \ [':s/\%#=0[^a-z]//g',
236cada7897SBram Moolenaar    \ "abcdefghiwxyz"],
237cada7897SBram Moolenaar    \ [':s/\%#=1[^a-z]//g',
238cada7897SBram Moolenaar    \ "abcdefghiwxyz"],
239cada7897SBram Moolenaar    \ [':s/\%#=2[^a-z]//g',
240cada7897SBram Moolenaar    \ "abcdefghiwxyz"],
241cada7897SBram Moolenaar    \ [':s/\%#=0\u//g',
242cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
243cada7897SBram Moolenaar    \ [':s/\%#=1\u//g',
244cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
245cada7897SBram Moolenaar    \ [':s/\%#=2\u//g',
246cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
247cada7897SBram Moolenaar    \ [':s/\%#=0[A-Z]//g',
248cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
249cada7897SBram Moolenaar    \ [':s/\%#=1[A-Z]//g',
250cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
251cada7897SBram Moolenaar    \ [':s/\%#=2[A-Z]//g',
252cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
253cada7897SBram Moolenaar    \ [':s/\%#=0\U//g',
254cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ"],
255cada7897SBram Moolenaar    \ [':s/\%#=1\U//g',
256cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ"],
257cada7897SBram Moolenaar    \ [':s/\%#=2\U//g',
258cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ"],
259cada7897SBram Moolenaar    \ [':s/\%#=0[^A-Z]//g',
260cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ"],
261cada7897SBram Moolenaar    \ [':s/\%#=1[^A-Z]//g',
262cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ"],
263cada7897SBram Moolenaar    \ [':s/\%#=2[^A-Z]//g',
264cada7897SBram Moolenaar    \ "ABCDEFGHIXYZ"],
265cada7897SBram Moolenaar    \ [':s/\%#=0\%' . line('.') . 'l^\t...//g',
266cada7897SBram Moolenaar    \ "!\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
267cada7897SBram Moolenaar    \ [':s/\%#=1\%' . line('.') . 'l^\t...//g',
268cada7897SBram Moolenaar    \ "!\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
269cada7897SBram Moolenaar    \ [':s/\%#=2\%' . line('.') . 'l^\t...//g',
270cada7897SBram Moolenaar    \ "!\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
271cada7897SBram Moolenaar    \ [':s/\%#=0[0-z]//g',
272cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
273cada7897SBram Moolenaar    \ [':s/\%#=1[0-z]//g',
274cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
275cada7897SBram Moolenaar    \ [':s/\%#=2[0-z]//g',
276cada7897SBram Moolenaar    \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./{|}~\<C-?>\u0080\u0082\u0090\u009b������"],
277cada7897SBram Moolenaar    \ [':s/\%#=0[^0-z]//g',
278cada7897SBram Moolenaar    \ "0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz"],
279cada7897SBram Moolenaar    \ [':s/\%#=1[^0-z]//g',
280cada7897SBram Moolenaar    \ "0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz"],
281cada7897SBram Moolenaar    \ [':s/\%#=2[^0-z]//g',
282cada7897SBram Moolenaar    \ "0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz"]
283cada7897SBram Moolenaar    \]
284cada7897SBram Moolenaar
285cada7897SBram Moolenaar  for [cmd, expected] in tests
286cada7897SBram Moolenaar      call append(0, input)
287cada7897SBram Moolenaar      call cursor(1, 1)
288cada7897SBram Moolenaar      exe cmd
289cada7897SBram Moolenaar      call assert_equal(expected, getline(1), cmd)
290cada7897SBram Moolenaar  endfor
291cada7897SBram Moolenaar
292cada7897SBram Moolenaar  let &encoding = save_enc
293cada7897SBram Moolenaar  enew!
294cada7897SBram Moolenaar  close
295cada7897SBram Moolenaarendfunc
296*6d91bcb4SBram Moolenaar
297*6d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
298