mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 03:48:18 +00:00

The test was split into several blocks reusing the same input file. As it is complicated to send text in different encodings and with control characters from the test suite to nvim and back the results are written to a temp file and loaded into the test from there.
273 lines
6.9 KiB
Lua
273 lines
6.9 KiB
Lua
-- Test character classes in regexp using regexpengine 0, 1, 2.
|
|
|
|
local helpers = require('test.functional.helpers')
|
|
local ffi = require('ffi')
|
|
local feed, insert, source = helpers.feed, helpers.insert, helpers.source
|
|
local clear, execute, expect, eq, eval = helpers.clear, helpers.execute, helpers.expect, helpers.eq, helpers.eval
|
|
local write_file = helpers.write_file
|
|
|
|
local function sixlines(text)
|
|
local result = ''
|
|
for i = 1, 6 do
|
|
result = result .. text .. '\n'
|
|
end
|
|
return result
|
|
end
|
|
|
|
local function diff(text, nodedent)
|
|
local tmpname = os.tmpname()
|
|
if ffi.os == 'OSX' and string.match(tmpname, '^/tmp') then
|
|
tmpname = '/private'..tmpname
|
|
end
|
|
execute('w! '..tmpname)
|
|
helpers.wait()
|
|
local data = io.open(tmpname):read('*all')
|
|
if nodedent then
|
|
helpers.eq(text, data)
|
|
else
|
|
helpers.eq(helpers.dedent(text), data)
|
|
end
|
|
os.remove(tmpname)
|
|
end
|
|
|
|
describe('character classes in regexp', function()
|
|
local ctrl1 = '\t\x0c\r'
|
|
local punct1 = " !\"#$%&'()#+'-./"
|
|
local digits = '0123456789'
|
|
local punct2 = ':;<=>?@'
|
|
local upper = 'ABCDEFGHIXYZ'
|
|
local punct3 = '[\\]^_`'
|
|
local lower = 'abcdefghiwxyz'
|
|
local punct4 = '{|}~'
|
|
local ctrl2 = '\x7f\x80\x82\x90\x9b'
|
|
local iso_text = '\xa6\xb1\xbc\xc7\xd3\xe9' -- "¦±¼ÇÓé" in utf-8
|
|
setup(function()
|
|
-- The original test32.in file was not in utf-8 encoding and did also
|
|
-- contain some control characters. We use lua escape sequences to write
|
|
-- them to the test file.
|
|
local line = ctrl1..punct1..digits..punct2..upper..punct3..lower..punct4..ctrl2..iso_text
|
|
write_file('test36.in', sixlines(line))
|
|
end)
|
|
before_each(function()
|
|
clear()
|
|
execute('e test36.in')
|
|
end)
|
|
teardown(function()
|
|
os.remove('test36.in')
|
|
end)
|
|
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\d//g
|
|
2 s/\%#=1\d//g
|
|
3 s/\%#=2\d//g
|
|
4 s/\%#=0[0-9]//g
|
|
5 s/\%#=1[0-9]//g
|
|
6 s/\%#=2[0-9]//g]])
|
|
diff(sixlines(ctrl1..punct1..punct2..upper..punct3..lower..punct4..
|
|
ctrl2..iso_text))
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\D//g
|
|
2 s/\%#=1\D//g
|
|
3 s/\%#=2\D//g
|
|
4 s/\%#=0[^0-9]//g
|
|
5 s/\%#=1[^0-9]//g
|
|
6 s/\%#=2[^0-9]//g]])
|
|
expect([[
|
|
0123456789
|
|
0123456789
|
|
0123456789
|
|
0123456789
|
|
0123456789
|
|
0123456789]])
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\o//g
|
|
2 s/\%#=1\o//g
|
|
3 s/\%#=2\o//g
|
|
4 s/\%#=0[0-7]//g
|
|
5 s/\%#=1[0-7]//g
|
|
6 s/\%#=2[0-7]//g]])
|
|
diff(sixlines(ctrl1..punct1..'89'..punct2..upper..punct3..lower..punct4..ctrl2..
|
|
iso_text))
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\O//g
|
|
2 s/\%#=1\O//g
|
|
3 s/\%#=2\O//g
|
|
4 s/\%#=0[^0-7]//g
|
|
5 s/\%#=1[^0-7]//g
|
|
6 s/\%#=2[^0-7]//g]])
|
|
expect([[
|
|
01234567
|
|
01234567
|
|
01234567
|
|
01234567
|
|
01234567
|
|
01234567]])
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\x//g
|
|
2 s/\%#=1\x//g
|
|
3 s/\%#=2\x//g
|
|
4 s/\%#=0[0-9A-Fa-f]//g
|
|
5 s/\%#=1[0-9A-Fa-f]//g
|
|
6 s/\%#=2[0-9A-Fa-f]//g]])
|
|
diff(sixlines(ctrl1..punct1..punct2..'GHIXYZ'..punct3..'ghiwxyz'..punct4..ctrl2..iso_text))
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\X//g
|
|
2 s/\%#=1\X//g
|
|
3 s/\%#=2\X//g
|
|
4 s/\%#=0[^0-9A-Fa-f]//g
|
|
5 s/\%#=1[^0-9A-Fa-f]//g
|
|
6 s/\%#=2[^0-9A-Fa-f]//g]])
|
|
expect([[
|
|
0123456789ABCDEFabcdef
|
|
0123456789ABCDEFabcdef
|
|
0123456789ABCDEFabcdef
|
|
0123456789ABCDEFabcdef
|
|
0123456789ABCDEFabcdef
|
|
0123456789ABCDEFabcdef]])
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\w//g
|
|
2 s/\%#=1\w//g
|
|
3 s/\%#=2\w//g
|
|
4 s/\%#=0[0-9A-Za-z_]//g
|
|
5 s/\%#=1[0-9A-Za-z_]//g
|
|
6 s/\%#=2[0-9A-Za-z_]//g]])
|
|
diff(sixlines(ctrl1..punct1..punct2..'[\\]^`'..punct4..ctrl2..iso_text))
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\W//g
|
|
2 s/\%#=1\W//g
|
|
3 s/\%#=2\W//g
|
|
4 s/\%#=0[^0-9A-Za-z_]//g
|
|
5 s/\%#=1[^0-9A-Za-z_]//g
|
|
6 s/\%#=2[^0-9A-Za-z_]//g]])
|
|
expect([[
|
|
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
|
|
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
|
|
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
|
|
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
|
|
0123456789ABCDEFGHIXYZ_abcdefghiwxyz
|
|
0123456789ABCDEFGHIXYZ_abcdefghiwxyz]])
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\h//g
|
|
2 s/\%#=1\h//g
|
|
3 s/\%#=2\h//g
|
|
4 s/\%#=0[A-Za-z_]//g
|
|
5 s/\%#=1[A-Za-z_]//g
|
|
6 s/\%#=2[A-Za-z_]//g]])
|
|
diff(sixlines(ctrl1..punct1..digits..punct2..'[\\]^`'..punct4..ctrl2..
|
|
iso_text))
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\H//g
|
|
2 s/\%#=1\H//g
|
|
3 s/\%#=2\H//g
|
|
4 s/\%#=0[^A-Za-z_]//g
|
|
5 s/\%#=1[^A-Za-z_]//g
|
|
6 s/\%#=2[^A-Za-z_]//g]])
|
|
expect([[
|
|
ABCDEFGHIXYZ_abcdefghiwxyz
|
|
ABCDEFGHIXYZ_abcdefghiwxyz
|
|
ABCDEFGHIXYZ_abcdefghiwxyz
|
|
ABCDEFGHIXYZ_abcdefghiwxyz
|
|
ABCDEFGHIXYZ_abcdefghiwxyz
|
|
ABCDEFGHIXYZ_abcdefghiwxyz]])
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\a//g
|
|
2 s/\%#=1\a//g
|
|
3 s/\%#=2\a//g
|
|
4 s/\%#=0[A-Za-z]//g
|
|
5 s/\%#=1[A-Za-z]//g
|
|
6 s/\%#=2[A-Za-z]//g]])
|
|
diff(sixlines(ctrl1..punct1..digits..punct2..punct3..punct4..ctrl2..iso_text))
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\A//g
|
|
2 s/\%#=1\A//g
|
|
3 s/\%#=2\A//g
|
|
4 s/\%#=0[^A-Za-z]//g
|
|
5 s/\%#=1[^A-Za-z]//g
|
|
6 s/\%#=2[^A-Za-z]//g]])
|
|
expect([[
|
|
ABCDEFGHIXYZabcdefghiwxyz
|
|
ABCDEFGHIXYZabcdefghiwxyz
|
|
ABCDEFGHIXYZabcdefghiwxyz
|
|
ABCDEFGHIXYZabcdefghiwxyz
|
|
ABCDEFGHIXYZabcdefghiwxyz
|
|
ABCDEFGHIXYZabcdefghiwxyz]])
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\l//g
|
|
2 s/\%#=1\l//g
|
|
3 s/\%#=2\l//g
|
|
4 s/\%#=0[a-z]//g
|
|
5 s/\%#=1[a-z]//g
|
|
6 s/\%#=2[a-z]//g]])
|
|
diff(sixlines(ctrl1..punct1..digits..punct2..upper..punct3..punct4..
|
|
ctrl2..iso_text))
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\L//g
|
|
2 s/\%#=1\L//g
|
|
3 s/\%#=2\L//g
|
|
4 s/\%#=0[^a-z]//g
|
|
5 s/\%#=1[^a-z]//g
|
|
6 s/\%#=2[^a-z]//g]])
|
|
expect([[
|
|
abcdefghiwxyz
|
|
abcdefghiwxyz
|
|
abcdefghiwxyz
|
|
abcdefghiwxyz
|
|
abcdefghiwxyz
|
|
abcdefghiwxyz]])
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\u//g
|
|
2 s/\%#=1\u//g
|
|
3 s/\%#=2\u//g
|
|
4 s/\%#=0[A-Z]//g
|
|
5 s/\%#=1[A-Z]//g
|
|
6 s/\%#=2[A-Z]//g]])
|
|
diff(sixlines(ctrl1..punct1..digits..punct2..punct3..lower..punct4..
|
|
ctrl2..iso_text))
|
|
end)
|
|
it('is working', function()
|
|
source([[
|
|
1 s/\%#=0\U//g
|
|
2 s/\%#=1\U//g
|
|
3 s/\%#=2\U//g
|
|
4 s/\%#=0[^A-Z]//g
|
|
5 s/\%#=1[^A-Z]//g
|
|
6 s/\%#=2[^A-Z]//g]])
|
|
expect([[
|
|
ABCDEFGHIXYZ
|
|
ABCDEFGHIXYZ
|
|
ABCDEFGHIXYZ
|
|
ABCDEFGHIXYZ
|
|
ABCDEFGHIXYZ
|
|
ABCDEFGHIXYZ]])
|
|
end)
|
|
end)
|