tests/legacy: convert test 63 (:match and matchadd() )

This commit is contained in:
Björn Linse 2015-02-12 22:14:54 +01:00
parent 93d01bf12e
commit a040aa95c1
3 changed files with 141 additions and 211 deletions

View File

@ -1,195 +0,0 @@
Test for ":match", ":2match", ":3match", "clearmatches()", "getmatches()",
"matchadd()", "matchaddpos()", "matcharg()", "matchdelete()", and "setmatches()".
STARTTEST
:so small.vim
:set encoding=utf8
:" --- Check that "matcharg()" returns the correct group and pattern if a match
:" --- is defined.
:let @r = "*** Test 1: "
:highlight MyGroup1 term=bold ctermbg=red guibg=red
:highlight MyGroup2 term=italic ctermbg=green guibg=green
:highlight MyGroup3 term=underline ctermbg=blue guibg=blue
:match MyGroup1 /TODO/
:2match MyGroup2 /FIXME/
:3match MyGroup3 /XXX/
:if matcharg(1) == ['MyGroup1', 'TODO'] && matcharg(2) == ['MyGroup2', 'FIXME'] && matcharg(3) == ['MyGroup3', 'XXX']
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:" --- Check that "matcharg()" returns an empty list if the argument is not 1,
:" --- 2 or 3 (only 0 and 4 are tested).
:let @r .= "*** Test 2: "
:if matcharg(0) == [] && matcharg(4) == []
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:" --- Check that "matcharg()" returns ['', ''] if a match is not defined.
:let @r .= "*** Test 3: "
:match
:2match
:3match
:if matcharg(1) == ['', ''] && matcharg(2) == ['', ''] && matcharg(3) == ['', '']
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:" --- Check that "matchadd()" and "getmatches()" agree on added matches and
:" --- that default values apply.
:let @r .= "*** Test 4: "
:let m1 = matchadd("MyGroup1", "TODO")
:let m2 = matchadd("MyGroup2", "FIXME", 42)
:let m3 = matchadd("MyGroup3", "XXX", 60, 17)
:if getmatches() == [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 4}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 42, 'id': 5}, {'group': 'MyGroup3', 'pattern': 'XXX', 'priority': 60, 'id': 17}]
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:" --- Check that "matchdelete()" deletes the matches defined in the previous
:" --- test correctly.
:let @r .= "*** Test 5: "
:call matchdelete(m1)
:call matchdelete(m2)
:call matchdelete(m3)
:unlet m1
:unlet m2
:unlet m3
:if getmatches() == []
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:" --- Check that "matchdelete()" returns 0 if successful and otherwise -1.
:let @r .= "*** Test 6: "
:let m = matchadd("MyGroup1", "TODO")
:let r1 = matchdelete(m)
:let r2 = matchdelete(42)
:if r1 == 0 && r2 == -1
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:unlet m
:unlet r1
:unlet r2
:" --- Check that "clearmatches()" clears all matches defined by ":match" and
:" --- "matchadd()".
:let @r .= "*** Test 7: "
:let m1 = matchadd("MyGroup1", "TODO")
:let m2 = matchadd("MyGroup2", "FIXME", 42)
:let m3 = matchadd("MyGroup3", "XXX", 60, 17)
:match MyGroup1 /COFFEE/
:2match MyGroup2 /HUMPPA/
:3match MyGroup3 /VIM/
:call clearmatches()
:if getmatches() == []
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:unlet m1
:unlet m2
:unlet m3
:" --- Check that "setmatches()" restores a list of matches saved by
:" --- "getmatches()" without changes. (Matches with equal priority must also
:" --- remain in the same order.)
:let @r .= "*** Test 8: "
:let m1 = matchadd("MyGroup1", "TODO")
:let m2 = matchadd("MyGroup2", "FIXME", 42)
:let m3 = matchadd("MyGroup3", "XXX", 60, 17)
:match MyGroup1 /COFFEE/
:2match MyGroup2 /HUMPPA/
:3match MyGroup3 /VIM/
:let ml = getmatches()
:call clearmatches()
:call setmatches(ml)
:if getmatches() == ml
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:call clearmatches()
:unlet m1
:unlet m2
:unlet m3
:unlet ml
:" --- Check that "setmatches()" will not add two matches with the same ID. The
:" --- expected behaviour (for now) is to add the first match but not the
:" --- second and to return 0 (even though it is a matter of debate whether
:" --- this can be considered successful behaviour).
:let @r .= "*** Test 9: "
:let r1 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 1}])
:if getmatches() == [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}] && r1 == 0
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:call clearmatches()
:unlet r1
:" --- Check that "setmatches()" returns 0 if successful and otherwise -1.
:" --- (A range of valid and invalid input values are tried out to generate the
:" --- return values.)
:let @r .= "*** Test 10: "
:let rs1 = setmatches([])
:let rs2 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}])
:call clearmatches()
:let rf1 = setmatches(0)
:let rf2 = setmatches([0])
:let rf3 = setmatches([{'wrong key': 'wrong value'}])
:if rs1 == 0 && rs2 == 0 && rf1 == -1 && rf2 == -1 && rf3 == -1
: let @r .= "OK\n"
:else
: let @r .= "FAILED\n"
:endif
:unlet rs1
:unlet rs2
:unlet rf1
:unlet rf2
:unlet rf3
:" --- Check that "matchaddpos()" positions matches correctly
:let @r .= "*** Test 11:\n"
:set nolazyredraw
:call setline(1, 'abcdefghijklmnopq')
:call matchaddpos("MyGroup1", [[1, 5], [1, 8, 3]], 10, 3)
:1
:redraw!
:let v1 = screenattr(1, 1)
:let v5 = screenattr(1, 5)
:let v6 = screenattr(1, 6)
:let v8 = screenattr(1, 8)
:let v10 = screenattr(1, 10)
:let v11 = screenattr(1, 11)
:let @r .= string(getmatches())."\n"
:if v1 != v5 && v6 == v1 && v8 == v5 && v10 == v5 && v11 == v1
: let @r .= "OK\n"
:else
: let @r .= "FAILED: " . v5 . "/" . v6 . "/" . v8 . "/" . v10 . "/" . v11 . "\n"
:endif
:call clearmatches()
:"
:call setline(1, 'abcdΣabcdef')
:call matchaddpos("MyGroup1", [[1, 4, 2], [1, 9, 2]])
:1
:redraw!
:let v1 = screenattr(1, 1)
:let v4 = screenattr(1, 4)
:let v5 = screenattr(1, 5)
:let v6 = screenattr(1, 6)
:let v7 = screenattr(1, 7)
:let v8 = screenattr(1, 8)
:let v9 = screenattr(1, 9)
:let v10 = screenattr(1, 10)
:let @r .= string(getmatches())."\n"
:if v1 != v4 && v5 == v4 && v6 == v1 && v7 == v1 && v8 == v4 && v9 == v4 && v10 == v1
: let @r .= "OK\n"
:else
: let @r .= "FAILED: " . v4 . "/" . v5 . "/" . v6 . "/" . v7 . "/" . v8 . "/" . v9 . "/" . v10 . "\n"
:endif
:call clearmatches()
G"rp
:/^Results/,$wq! test.out
ENDTEST
Results of test63:

View File

@ -1,16 +0,0 @@
Results of test63:
*** Test 1: OK
*** Test 2: OK
*** Test 3: OK
*** Test 4: OK
*** Test 5: OK
*** Test 6: OK
*** Test 7: OK
*** Test 8: OK
*** Test 9: OK
*** Test 10: OK
*** Test 11:
[{'group': 'MyGroup1', 'id': 3, 'priority': 10, 'pos1': [1, 5, 1], 'pos2': [1, 8, 3]}]
OK
[{'group': 'MyGroup1', 'id': 11, 'priority': 10, 'pos1': [1, 4, 2], 'pos2': [1, 9, 2]}]
OK

View File

@ -0,0 +1,141 @@
-- Tests for adjusting window and contents
local helpers = require('test.functional.helpers')
local Screen = require('test.functional.ui.screen')
local feed, insert, source = helpers.feed, helpers.insert, helpers.source
local eval, clear, execute, expect = helpers.eval, helpers.clear, helpers.execute
local expect, eq, neq = helpers.expect, helpers.eq, helpers.neq
local command = helpers.command
describe('063: Test for ":match", "matchadd()" and related functions', function()
setup(clear)
it('is working', function()
local screen = Screen.new(40, 5)
screen:attach()
-- Check that "matcharg()" returns the correct group and pattern if a match
-- is defined.
execute("highlight MyGroup1 term=bold ctermbg=red guibg=red")
execute("highlight MyGroup2 term=italic ctermbg=green guibg=green")
execute("highlight MyGroup3 term=underline ctermbg=blue guibg=blue")
execute("match MyGroup1 /TODO/")
execute("2match MyGroup2 /FIXME/")
execute("3match MyGroup3 /XXX/")
eq({'MyGroup1', 'TODO'}, eval('matcharg(1)'))
eq({'MyGroup2', 'FIXME'}, eval('matcharg(2)'))
eq({'MyGroup3', 'XXX'}, eval('matcharg(3)'))
-- Check that "matcharg()" returns an empty list if the argument is not 1,
-- 2 or 3 (only 0 and 4 are tested).
eq({}, eval('matcharg(0)'))
eq({}, eval('matcharg(4)'))
-- Check that "matcharg()" returns ['', ''] if a match is not defined.
execute("match")
execute("2match")
execute("3match")
eq({'', ''}, eval('matcharg(1)'))
eq({'', ''}, eval('matcharg(2)'))
eq({'', ''}, eval('matcharg(3)'))
-- Check that "matchadd()" and "getmatches()" agree on added matches and
-- that default values apply.
execute("let m1 = matchadd('MyGroup1', 'TODO')")
execute("let m2 = matchadd('MyGroup2', 'FIXME', 42)")
execute("let m3 = matchadd('MyGroup3', 'XXX', 60, 17)")
eq({{group = 'MyGroup1', pattern = 'TODO', priority = 10, id = 4},
{group = 'MyGroup2', pattern = 'FIXME', priority = 42, id = 5},
{group = 'MyGroup3', pattern = 'XXX', priority = 60, id = 17}},
eval('getmatches()'))
-- Check that "matchdelete()" deletes the matches defined in the previous
-- test correctly.
execute("call matchdelete(m1)")
execute("call matchdelete(m2)")
execute("call matchdelete(m3)")
eq({}, eval('getmatches()'))
--- Check that "matchdelete()" returns 0 if successful and otherwise -1.
execute("let m = matchadd('MyGroup1', 'TODO')")
eq(0, eval('matchdelete(m)'))
-- matchdelete throws error and returns -1 on failure
neq(true, pcall(function() eval('matchdelete(42)') end))
execute("let r2 = matchdelete(42)")
eq(-1, eval('r2'))
-- Check that "clearmatches()" clears all matches defined by ":match" and
-- "matchadd()".
execute("let m1 = matchadd('MyGroup1', 'TODO')")
execute("let m2 = matchadd('MyGroup2', 'FIXME', 42)")
execute("let m3 = matchadd('MyGroup3', 'XXX', 60, 17)")
execute("match MyGroup1 /COFFEE/")
execute("2match MyGroup2 /HUMPPA/")
execute("3match MyGroup3 /VIM/")
execute("call clearmatches()")
eq({}, eval('getmatches()'))
-- Check that "setmatches()" restores a list of matches saved by
-- "getmatches()" without changes. (Matches with equal priority must also
-- remain in the same order.)
execute("let m1 = matchadd('MyGroup1', 'TODO')")
execute("let m2 = matchadd('MyGroup2', 'FIXME', 42)")
execute("let m3 = matchadd('MyGroup3', 'XXX', 60, 17)")
execute("match MyGroup1 /COFFEE/")
execute("2match MyGroup2 /HUMPPA/")
execute("3match MyGroup3 /VIM/")
execute("let ml = getmatches()")
ml = eval("ml")
execute("call clearmatches()")
execute("call setmatches(ml)")
eq(ml, eval('getmatches()'))
execute("call clearmatches()")
-- Check that "setmatches()" will not add two matches with the same ID. The
-- expected behaviour (for now) is to add the first match but not the
-- second and to return 0 (even though it is a matter of debate whether
-- this can be considered successful behaviour).
execute("let r1 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 1}])")
feed("<cr>")
eq(0, eval("r1"))
eq({{group = 'MyGroup1', pattern = 'TODO', priority = 10, id = 1}}, eval('getmatches()'))
-- Check that "setmatches()" returns 0 if successful and otherwise -1.
-- (A range of valid and invalid input values are tried out to generate the
-- return values.)
eq(0,eval("setmatches([])"))
eq(0,eval("setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}])"))
execute("call clearmatches()")
execute("let rf1 = setmatches(0)")
eq(-1, eval('rf1'))
execute("let rf2 = setmatches([0])")
eq(-1, eval('rf2'))
execute("let rf3 = setmatches([{'wrong key': 'wrong value'}])")
feed("<cr>")
eq(-1, eval('rf3'))
-- Check that "matchaddpos()" positions matches correctly
insert('abcdefghijklmnopq')
execute("call matchaddpos('MyGroup1', [[1, 5], [1, 8, 3]], 10, 3)")
screen:expect([[
abcd{1:e}fg{1:hij}klmnop^q |
~ |
~ |
~ |
|
]], {[1] = {background = Screen.colors.Red}}, {{bold = true, foreground = Screen.colors.Blue}})
execute("call clearmatches()")
execute("call setline(1, 'abcdΣabcdef')")
execute("call matchaddpos('MyGroup1', [[1, 4, 2], [1, 9, 2]])")
screen:expect([[
abc{1:}ab{1:cd}e^f |
~ |
~ |
~ |
|
]],{[1] = {background = Screen.colors.Red}}, {{bold = true, foreground = Screen.colors.Blue}})
end)
end)