Mercurial > vim
view src/testdir/test63.in @ 7156:0b4e65cf84fb v7.4.889
commit https://github.com/vim/vim/commit/74b738d414b2895b3365e26ae3b7792eb82ccf47
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Sep 29 18:08:33 2015 +0200
patch 7.4.889
Problem: Triggering OptionSet from setwinvar() isn't tested.
Solution: Add a test. (Christian Brabandt)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 29 Sep 2015 18:15:04 +0200 |
parents | f4e5704c5c43 |
children |
line wrap: on
line source
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 :" Check, that setmatches() can correctly restore the matches from matchaddpos() :call matchadd('MyGroup1', '\%2lmatchadd') :let m=getmatches() :call clearmatches() :call setmatches(m) :let @r .= string(getmatches())."\n" G"rp :/^Results/,$wq! test.out ENDTEST Results of test63: