| 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: |