1Test for ":match", ":2match", ":3match", "clearmatches()", "getmatches()",
2"matchadd()", "matcharg()", "matchdelete()", and "setmatches()".
3
4STARTTEST
5:so small.vim
6:" --- Check that "matcharg()" returns the correct group and pattern if a match
7:" --- is defined.
8:let @r = "*** Test 1: "
9:highlight MyGroup1 ctermbg=red
10:highlight MyGroup2 ctermbg=green
11:highlight MyGroup3 ctermbg=blue
12:match MyGroup1 /TODO/
13:2match MyGroup2 /FIXME/
14:3match MyGroup3 /XXX/
15:if matcharg(1) == ['MyGroup1', 'TODO'] && matcharg(2) == ['MyGroup2', 'FIXME'] && matcharg(3) == ['MyGroup3', 'XXX']
16:  let @r .= "OK\n"
17:else
18:  let @r .= "FAILED\n"
19:endif
20:" --- Check that "matcharg()" returns an empty list if the argument is not 1,
21:" --- 2 or 3 (only 0 and 4 are tested).
22:let @r .= "*** Test 2: "
23:if matcharg(0) == [] && matcharg(4) == []
24:  let @r .= "OK\n"
25:else
26:  let @r .= "FAILED\n"
27:endif
28:" --- Check that "matcharg()" returns ['', ''] if a match is not defined.
29:let @r .= "*** Test 3: "
30:match
31:2match
32:3match
33:if matcharg(1) == ['', ''] && matcharg(2) == ['', ''] && matcharg(3) == ['', '']
34:  let @r .= "OK\n"
35:else
36:  let @r .= "FAILED\n"
37:endif
38:" --- Check that "matchadd()" and "getmatches()" agree on added matches and
39:" --- that default values apply.
40:let @r .= "*** Test 4: "
41:let m1 = matchadd("MyGroup1", "TODO")
42:let m2 = matchadd("MyGroup2", "FIXME", 42)
43:let m3 = matchadd("MyGroup3", "XXX", 60, 17)
44: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}]
45:  let @r .= "OK\n"
46:else
47:  let @r .= "FAILED\n"
48:endif
49:" --- Check that "matchdelete()" deletes the matches defined in the previous
50:" --- test correctly.
51:let @r .= "*** Test 5: "
52:call matchdelete(m1)
53:call matchdelete(m2)
54:call matchdelete(m3)
55:unlet m1
56:unlet m2
57:unlet m3
58:if getmatches() == []
59:  let @r .= "OK\n"
60:else
61:  let @r .= "FAILED\n"
62:endif
63:" --- Check that "matchdelete()" returns 0 if successful and otherwise -1.
64:let @r .= "*** Test 6: "
65:let m = matchadd("MyGroup1", "TODO")
66:let r1 = matchdelete(m)
67:let r2 = matchdelete(42)
68:if r1 == 0 && r2 == -1
69:  let @r .= "OK\n"
70:else
71:  let @r .= "FAILED\n"
72:endif
73:unlet m
74:unlet r1
75:unlet r2
76:" --- Check that "clearmatches()" clears all matches defined by ":match" and
77:" --- "matchadd()".
78:let @r .= "*** Test 7: "
79:let m1 = matchadd("MyGroup1", "TODO")
80:let m2 = matchadd("MyGroup2", "FIXME", 42)
81:let m3 = matchadd("MyGroup3", "XXX", 60, 17)
82:match MyGroup1 /COFFEE/
83:2match MyGroup2 /HUMPPA/
84:3match MyGroup3 /VIM/
85:call clearmatches()
86:if getmatches() == []
87:  let @r .= "OK\n"
88:else
89:  let @r .= "FAILED\n"
90:endif
91:unlet m1
92:unlet m2
93:unlet m3
94:" --- Check that "setmatches()" restores a list of matches saved by
95:" --- "getmatches()" without changes. (Matches with equal priority must also
96:" --- remain in the same order.)
97:let @r .= "*** Test 8: "
98:let m1 = matchadd("MyGroup1", "TODO")
99:let m2 = matchadd("MyGroup2", "FIXME", 42)
100:let m3 = matchadd("MyGroup3", "XXX", 60, 17)
101:match MyGroup1 /COFFEE/
102:2match MyGroup2 /HUMPPA/
103:3match MyGroup3 /VIM/
104:let ml = getmatches()
105:call clearmatches()
106:call setmatches(ml)
107:if getmatches() == ml
108:  let @r .= "OK\n"
109:else
110:  let @r .= "FAILED\n"
111:endif
112:call clearmatches()
113:unlet m1
114:unlet m2
115:unlet m3
116:unlet ml
117:" --- Check that "setmatches()" will not add two matches with the same ID. The
118:" --- expected behaviour (for now) is to add the first match but not the
119:" --- second and to return 0 (even though it is a matter of debate whether
120:" --- this can be considered successful behaviour).
121:let @r .= "*** Test 9: "
122:let r1 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 1}])
123:if getmatches() == [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}] && r1 == 0
124:  let @r .= "OK\n"
125:else
126:  let @r .= "FAILED\n"
127:endif
128:call clearmatches()
129:unlet r1
130:" --- Check that "setmatches()" returns 0 if successful and otherwise -1.
131:" --- (A range of valid and invalid input values are tried out to generate the
132:" --- return values.)
133:let @r .= "*** Test 10: "
134:let rs1 = setmatches([])
135:let rs2 = setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}])
136:call clearmatches()
137:let rf1 = setmatches(0)
138:let rf2 = setmatches([0])
139:let rf3 = setmatches([{'wrong key': 'wrong value'}])
140:if rs1 == 0 && rs2 == 0 && rf1 == -1 && rf2 == -1 && rf3 == -1
141:  let @r .= "OK\n"
142:else
143:  let @r .= "FAILED\n"
144:endif
145:unlet rs1
146:unlet rs2
147:unlet rf1
148:unlet rf2
149:unlet rf3
150:highlight clear MyGroup1
151:highlight clear MyGroup2
152:highlight clear MyGroup3
153G"rp
154:/^Results/,$wq! test.out
155ENDTEST
156
157Results of test63:
158