2016-08-20 12:24:34 -07:00
|
|
|
local helpers = require('test.functional.helpers')(after_each)
|
2017-12-15 01:38:34 -07:00
|
|
|
local Screen = require('test.functional.ui.screen')
|
2016-08-20 12:24:34 -07:00
|
|
|
|
|
|
|
local eq = helpers.eq
|
|
|
|
local clear = helpers.clear
|
|
|
|
local funcs = helpers.funcs
|
|
|
|
local command = helpers.command
|
2017-12-15 01:38:34 -07:00
|
|
|
local exc_exec = helpers.exc_exec
|
2018-05-06 18:24:01 -07:00
|
|
|
local expect_err = helpers.expect_err
|
2016-08-20 12:24:34 -07:00
|
|
|
|
|
|
|
before_each(clear)
|
|
|
|
|
|
|
|
describe('setmatches()', function()
|
|
|
|
it('correctly handles case when both group and pattern entries are numbers',
|
|
|
|
function()
|
|
|
|
command('hi def link 1 PreProc')
|
|
|
|
eq(0, funcs.setmatches({{group=1, pattern=2, id=3, priority=4}}))
|
|
|
|
eq({{
|
|
|
|
group='1',
|
|
|
|
pattern='2',
|
|
|
|
id=3,
|
|
|
|
priority=4,
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
eq(0, funcs.setmatches({{group=1, pattern=2, id=3, priority=4, conceal=5}}))
|
|
|
|
eq({{
|
|
|
|
group='1',
|
|
|
|
pattern='2',
|
|
|
|
id=3,
|
|
|
|
priority=4,
|
|
|
|
conceal='5',
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
eq(0, funcs.setmatches({{group=1, pos1={2}, pos2={6}, id=3, priority=4, conceal=5}}))
|
|
|
|
eq({{
|
|
|
|
group='1',
|
|
|
|
pos1={2},
|
|
|
|
pos2={6},
|
|
|
|
id=3,
|
|
|
|
priority=4,
|
|
|
|
conceal='5',
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
end)
|
2016-08-20 12:25:57 -07:00
|
|
|
|
|
|
|
it('fails with -1 if highlight group is not defined', function()
|
2018-05-06 18:24:01 -07:00
|
|
|
expect_err('E28: No such highlight group name: 1', funcs.setmatches,
|
|
|
|
{{group=1, pattern=2, id=3, priority=4}})
|
2016-08-20 12:25:57 -07:00
|
|
|
eq({}, funcs.getmatches())
|
2018-05-06 18:24:01 -07:00
|
|
|
expect_err('E28: No such highlight group name: 1', funcs.setmatches,
|
|
|
|
{{group=1, pos1={2}, pos2={6}, id=3, priority=4, conceal=5}})
|
2016-08-20 12:25:57 -07:00
|
|
|
eq({}, funcs.getmatches())
|
|
|
|
end)
|
2016-08-20 12:24:34 -07:00
|
|
|
end)
|
2016-09-03 16:25:24 -07:00
|
|
|
|
|
|
|
describe('matchadd()', function()
|
|
|
|
it('correctly works when first two arguments and conceal are numbers at once',
|
|
|
|
function()
|
|
|
|
command('hi def link 1 PreProc')
|
|
|
|
eq(4, funcs.matchadd(1, 2, 3, 4, {conceal=5}))
|
|
|
|
eq({{
|
|
|
|
group='1',
|
|
|
|
pattern='2',
|
|
|
|
priority=3,
|
|
|
|
id=4,
|
|
|
|
conceal='5',
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
end)
|
|
|
|
end)
|
2017-12-15 01:38:34 -07:00
|
|
|
|
|
|
|
describe('matchaddpos()', function()
|
|
|
|
it('errors out on invalid input', function()
|
|
|
|
command('hi clear PreProc')
|
|
|
|
eq('Vim(let):E5030: Empty list at position 0',
|
|
|
|
exc_exec('let val = matchaddpos("PreProc", [[]])'))
|
|
|
|
eq('Vim(let):E5030: Empty list at position 1',
|
|
|
|
exc_exec('let val = matchaddpos("PreProc", [1, v:_null_list])'))
|
|
|
|
eq('Vim(let):E5031: List or number required at position 1',
|
|
|
|
exc_exec('let val = matchaddpos("PreProc", [1, v:_null_dict])'))
|
|
|
|
end)
|
|
|
|
it('works with 0 lnum', function()
|
|
|
|
command('hi clear PreProc')
|
|
|
|
eq(4, funcs.matchaddpos('PreProc', {1}, 3, 4))
|
|
|
|
eq({{
|
|
|
|
group='PreProc',
|
|
|
|
pos1 = {1},
|
|
|
|
priority=3,
|
|
|
|
id=4,
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
funcs.matchdelete(4)
|
|
|
|
eq(4, funcs.matchaddpos('PreProc', {{0}, 1}, 3, 4))
|
|
|
|
eq({{
|
|
|
|
group='PreProc',
|
|
|
|
pos1 = {1},
|
|
|
|
priority=3,
|
|
|
|
id=4,
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
funcs.matchdelete(4)
|
|
|
|
eq(4, funcs.matchaddpos('PreProc', {0, 1}, 3, 4))
|
|
|
|
eq({{
|
|
|
|
group='PreProc',
|
|
|
|
pos1 = {1},
|
|
|
|
priority=3,
|
|
|
|
id=4,
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
end)
|
|
|
|
it('works with negative numbers', function()
|
|
|
|
command('hi clear PreProc')
|
|
|
|
eq(4, funcs.matchaddpos('PreProc', {-10, 1}, 3, 4))
|
|
|
|
eq({{
|
|
|
|
group='PreProc',
|
|
|
|
pos1 = {1},
|
|
|
|
priority=3,
|
|
|
|
id=4,
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
funcs.matchdelete(4)
|
|
|
|
eq(4, funcs.matchaddpos('PreProc', {{-10}, 1}, 3, 4))
|
|
|
|
eq({{
|
|
|
|
group='PreProc',
|
|
|
|
pos1 = {1},
|
|
|
|
priority=3,
|
|
|
|
id=4,
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
funcs.matchdelete(4)
|
|
|
|
eq(4, funcs.matchaddpos('PreProc', {{2, -1}, 1}, 3, 4))
|
|
|
|
eq({{
|
|
|
|
group='PreProc',
|
|
|
|
pos1 = {1},
|
|
|
|
priority=3,
|
|
|
|
id=4,
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
funcs.matchdelete(4)
|
|
|
|
eq(4, funcs.matchaddpos('PreProc', {{2, 0, -1}, 1}, 3, 4))
|
|
|
|
eq({{
|
|
|
|
group='PreProc',
|
|
|
|
pos1 = {1},
|
|
|
|
priority=3,
|
|
|
|
id=4,
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
end)
|
|
|
|
it('works with zero length', function()
|
|
|
|
local screen = Screen.new(40, 5)
|
|
|
|
screen:attach()
|
|
|
|
funcs.setline(1, 'abcdef')
|
|
|
|
command('hi PreProc guifg=Red')
|
|
|
|
eq(4, funcs.matchaddpos('PreProc', {{1, 2, 0}}, 3, 4))
|
|
|
|
eq({{
|
|
|
|
group='PreProc',
|
|
|
|
pos1 = {1, 2, 0},
|
|
|
|
priority=3,
|
|
|
|
id=4,
|
|
|
|
}}, funcs.getmatches())
|
|
|
|
screen:expect([[
|
|
|
|
^a{1:b}cdef |
|
|
|
|
{2:~ }|
|
|
|
|
{2:~ }|
|
|
|
|
{2:~ }|
|
|
|
|
|
|
|
|
|
]], {[1] = {foreground = Screen.colors.Red}, [2] = {bold = true, foreground = Screen.colors.Blue1}})
|
|
|
|
end)
|
|
|
|
end)
|