Files
neovim/test/functional/legacy/036_regexp_character_classes_spec.lua
Lucas Hoffmann 109d53b7b9 test: Migrate legacy test 36.
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.
2016-02-15 09:25:49 +01:00

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)