1
-- Test character classes in regexp using regexpengine 0, 1, 2.
3
local helpers = require('test.functional.helpers')
4
local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect
5
local source, write_file = helpers.source, helpers.write_file
6
local os_name = helpers.os_name
8
local function sixlines(text)
11
result = result .. text .. '\n'
16
local function diff(text, nodedent)
17
local tmpname = os.tmpname()
18
if os_name() == 'osx' and string.match(tmpname, '^/tmp') then
19
tmpname = '/private'..tmpname
21
execute('w! '..tmpname)
23
local data = io.open(tmpname):read('*all')
25
helpers.eq(text, data)
27
helpers.eq(helpers.dedent(text), data)
32
describe('character classes in regexp', function()
33
local ctrl1 = '\t\012\r'
34
local punct1 = " !\"#$%&'()#+'-./"
35
local digits = '0123456789'
36
local punct2 = ':;<=>?@'
37
local upper = 'ABCDEFGHIXYZ'
38
local punct3 = '[\\]^_`'
39
local lower = 'abcdefghiwxyz'
41
local ctrl2 = '\127\128\130\144\155'
42
local iso_text = '\166\177\188\199\211\233' -- "¦±¼ÇÓé" in utf-8
44
-- The original test32.in file was not in utf-8 encoding and did also
45
-- contain some control characters. We use lua escape sequences to write
46
-- them to the test file.
47
local line = ctrl1..punct1..digits..punct2..upper..punct3..lower..punct4..ctrl2..iso_text
48
write_file('test36.in', sixlines(line))
50
before_each(function()
52
execute('e test36.in')
55
os.remove('test36.in')
58
it('is working', function()
66
diff(sixlines(ctrl1..punct1..punct2..upper..punct3..lower..punct4..
69
it('is working', function()
85
it('is working', function()
93
diff(sixlines(ctrl1..punct1..'89'..punct2..upper..punct3..lower..punct4..ctrl2..
96
it('is working', function()
103
6 s/\%#=2[^0-7]//g]])
112
it('is working', function()
117
4 s/\%#=0[0-9A-Fa-f]//g
118
5 s/\%#=1[0-9A-Fa-f]//g
119
6 s/\%#=2[0-9A-Fa-f]//g]])
120
diff(sixlines(ctrl1..punct1..punct2..'GHIXYZ'..punct3..'ghiwxyz'..punct4..ctrl2..iso_text))
122
it('is working', function()
127
4 s/\%#=0[^0-9A-Fa-f]//g
128
5 s/\%#=1[^0-9A-Fa-f]//g
129
6 s/\%#=2[^0-9A-Fa-f]//g]])
131
0123456789ABCDEFabcdef
132
0123456789ABCDEFabcdef
133
0123456789ABCDEFabcdef
134
0123456789ABCDEFabcdef
135
0123456789ABCDEFabcdef
136
0123456789ABCDEFabcdef]])
138
it('is working', function()
143
4 s/\%#=0[0-9A-Za-z_]//g
144
5 s/\%#=1[0-9A-Za-z_]//g
145
6 s/\%#=2[0-9A-Za-z_]//g]])
146
diff(sixlines(ctrl1..punct1..punct2..'[\\]^`'..punct4..ctrl2..iso_text))
148
it('is working', function()
153
4 s/\%#=0[^0-9A-Za-z_]//g
154
5 s/\%#=1[^0-9A-Za-z_]//g
155
6 s/\%#=2[^0-9A-Za-z_]//g]])
157
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
158
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
159
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
160
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
161
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
162
0123456789ABCDEFGHIXYZ_abcdefghiwxyz]])
164
it('is working', function()
169
4 s/\%#=0[A-Za-z_]//g
170
5 s/\%#=1[A-Za-z_]//g
171
6 s/\%#=2[A-Za-z_]//g]])
172
diff(sixlines(ctrl1..punct1..digits..punct2..'[\\]^`'..punct4..ctrl2..
175
it('is working', function()
180
4 s/\%#=0[^A-Za-z_]//g
181
5 s/\%#=1[^A-Za-z_]//g
182
6 s/\%#=2[^A-Za-z_]//g]])
184
ABCDEFGHIXYZ_abcdefghiwxyz
185
ABCDEFGHIXYZ_abcdefghiwxyz
186
ABCDEFGHIXYZ_abcdefghiwxyz
187
ABCDEFGHIXYZ_abcdefghiwxyz
188
ABCDEFGHIXYZ_abcdefghiwxyz
189
ABCDEFGHIXYZ_abcdefghiwxyz]])
191
it('is working', function()
198
6 s/\%#=2[A-Za-z]//g]])
199
diff(sixlines(ctrl1..punct1..digits..punct2..punct3..punct4..ctrl2..iso_text))
201
it('is working', function()
206
4 s/\%#=0[^A-Za-z]//g
207
5 s/\%#=1[^A-Za-z]//g
208
6 s/\%#=2[^A-Za-z]//g]])
210
ABCDEFGHIXYZabcdefghiwxyz
211
ABCDEFGHIXYZabcdefghiwxyz
212
ABCDEFGHIXYZabcdefghiwxyz
213
ABCDEFGHIXYZabcdefghiwxyz
214
ABCDEFGHIXYZabcdefghiwxyz
215
ABCDEFGHIXYZabcdefghiwxyz]])
217
it('is working', function()
225
diff(sixlines(ctrl1..punct1..digits..punct2..upper..punct3..punct4..
228
it('is working', function()
235
6 s/\%#=2[^a-z]//g]])
244
it('is working', function()
252
diff(sixlines(ctrl1..punct1..digits..punct2..punct3..lower..punct4..
255
it('is working', function()
262
6 s/\%#=2[^A-Z]//g]])