blob: ad4e751c4b2e9fa52babdef6f4bf1190f24f7885 [file] [log] [blame]
Bram Moolenaar43345542015-11-29 17:35:35 +01001" Test that the methods used for testing work.
2
Bram Moolenaar683fa182015-11-30 21:38:24 +01003func Test_assert_false()
Bram Moolenaar65a54642018-04-28 16:56:53 +02004 call assert_equal(0, assert_false(0))
5 call assert_equal(0, assert_false(v:false))
Bram Moolenaar24278d22019-08-16 21:49:22 +02006 call assert_equal(0, v:false->assert_false())
Bram Moolenaar65a54642018-04-28 16:56:53 +02007
8 call assert_equal(1, assert_false(123))
zeertzjq53f5e512023-05-04 18:58:22 +01009 call assert_match("Expected False but got 123", v:errors[0])
Bram Moolenaar65a54642018-04-28 16:56:53 +020010 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +020011
12 call assert_equal(1, 123->assert_false())
zeertzjq53f5e512023-05-04 18:58:22 +010013 call assert_match("Expected False but got 123", v:errors[0])
Bram Moolenaar24278d22019-08-16 21:49:22 +020014 call remove(v:errors, 0)
Bram Moolenaar43345542015-11-29 17:35:35 +010015endfunc
16
Bram Moolenaar683fa182015-11-30 21:38:24 +010017func Test_assert_true()
Bram Moolenaar65a54642018-04-28 16:56:53 +020018 call assert_equal(0, assert_true(1))
19 call assert_equal(0, assert_true(123))
20 call assert_equal(0, assert_true(v:true))
Bram Moolenaar24278d22019-08-16 21:49:22 +020021 call assert_equal(0, v:true->assert_true())
Bram Moolenaar65a54642018-04-28 16:56:53 +020022
23 call assert_equal(1, assert_true(0))
zeertzjq53f5e512023-05-04 18:58:22 +010024 call assert_match("Expected True but got 0", v:errors[0])
Bram Moolenaar65a54642018-04-28 16:56:53 +020025 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +020026
27 call assert_equal(1, 0->assert_true())
zeertzjq53f5e512023-05-04 18:58:22 +010028 call assert_match("Expected True but got 0", v:errors[0])
Bram Moolenaar24278d22019-08-16 21:49:22 +020029 call remove(v:errors, 0)
Bram Moolenaar43345542015-11-29 17:35:35 +010030endfunc
31
Bram Moolenaar683fa182015-11-30 21:38:24 +010032func Test_assert_equal()
Bram Moolenaar43345542015-11-29 17:35:35 +010033 let s = 'foo'
Bram Moolenaar65a54642018-04-28 16:56:53 +020034 call assert_equal(0, assert_equal('foo', s))
Bram Moolenaar43345542015-11-29 17:35:35 +010035 let n = 4
Bram Moolenaar65a54642018-04-28 16:56:53 +020036 call assert_equal(0, assert_equal(4, n))
Bram Moolenaar43345542015-11-29 17:35:35 +010037 let l = [1, 2, 3]
Bram Moolenaar65a54642018-04-28 16:56:53 +020038 call assert_equal(0, assert_equal([1, 2, 3], l))
Bram Moolenaar7b293c72020-04-09 21:33:22 +020039 call assert_equal(test_null_list(), test_null_list())
40 call assert_equal(test_null_list(), [])
41 call assert_equal([], test_null_list())
Bram Moolenaarb50e5f52016-04-03 20:57:20 +020042
43 let s = 'foo'
Bram Moolenaar65a54642018-04-28 16:56:53 +020044 call assert_equal(1, assert_equal('bar', s))
Bram Moolenaarb50e5f52016-04-03 20:57:20 +020045 call assert_match("Expected 'bar' but got 'foo'", v:errors[0])
46 call remove(v:errors, 0)
Bram Moolenaar86576712019-01-25 20:48:33 +010047
zeertzjq9c4b2462024-08-09 19:52:10 +020048 let s = 'αβγ'
49 call assert_equal(1, assert_equal('δεζ', s))
50 call assert_match("Expected 'δεζ' but got 'αβγ'", v:errors[0])
51 call remove(v:errors, 0)
52
Bram Moolenaar86576712019-01-25 20:48:33 +010053 call assert_equal('XxxxxxxxxxxxxxxxxxxxxxX', 'XyyyyyyyyyyyyyyyyyyyyyyyyyX')
54 call assert_match("Expected 'X\\\\\\[x occurs 21 times]X' but got 'X\\\\\\[y occurs 25 times]X'", v:errors[0])
55 call remove(v:errors, 0)
Bram Moolenaar7177da92020-07-12 23:09:20 +020056
zeertzjq9c4b2462024-08-09 19:52:10 +020057 call assert_equal('ΩωωωωωωωωωωωωωωωωωωωωωΩ', 'ΩψψψψψψψψψψψψψψψψψψψψψψψψψΩ')
58 call assert_match("Expected 'Ω\\\\\\[ω occurs 21 times]Ω' but got 'Ω\\\\\\[ψ occurs 25 times]Ω'", v:errors[0])
59 call remove(v:errors, 0)
60
Bram Moolenaar7177da92020-07-12 23:09:20 +020061 " special characters are escaped
62 call assert_equal("\b\e\f\n\t\r\\\x01\x7f", 'x')
63 call assert_match('Expected ''\\b\\e\\f\\n\\t\\r\\\\\\x01\\x7f'' but got ''x''', v:errors[0])
64 call remove(v:errors, 0)
Bram Moolenaar34f81172022-02-16 12:16:19 +000065
66 " many composing characters are handled properly
67 call setline(1, ' ')
68 norm 100gr݀
69 call assert_equal(1, getline(1))
70 call assert_match("Expected 1 but got '.* occurs 100 times]'", v:errors[0])
71 call remove(v:errors, 0)
72 bwipe!
Bram Moolenaarb50e5f52016-04-03 20:57:20 +020073endfunc
74
Bram Moolenaar4a021df2020-06-13 15:13:38 +020075func Test_assert_equal_dict()
76 call assert_equal(0, assert_equal(#{one: 1, two: 2}, #{two: 2, one: 1}))
77
78 call assert_equal(1, assert_equal(#{one: 1, two: 2}, #{two: 2, one: 3}))
79 call assert_match("Expected {'one': 1} but got {'one': 3} - 1 equal item omitted", v:errors[0])
80 call remove(v:errors, 0)
81
82 call assert_equal(1, assert_equal(#{one: 1, two: 2}, #{two: 22, one: 11}))
83 call assert_match("Expected {'one': 1, 'two': 2} but got {'one': 11, 'two': 22}", v:errors[0])
84 call remove(v:errors, 0)
85
86 call assert_equal(1, assert_equal(#{}, #{two: 2, one: 1}))
87 call assert_match("Expected {} but got {'one': 1, 'two': 2}", v:errors[0])
88 call remove(v:errors, 0)
89
90 call assert_equal(1, assert_equal(#{two: 2, one: 1}, #{}))
91 call assert_match("Expected {'one': 1, 'two': 2} but got {}", v:errors[0])
92 call remove(v:errors, 0)
93endfunc
94
Bram Moolenaard96ff162018-02-18 22:13:29 +010095func Test_assert_equalfile()
Bram Moolenaar65a54642018-04-28 16:56:53 +020096 call assert_equal(1, assert_equalfile('abcabc', 'xyzxyz'))
Bram Moolenaard96ff162018-02-18 22:13:29 +010097 call assert_match("E485: Can't read file abcabc", v:errors[0])
98 call remove(v:errors, 0)
99
100 let goodtext = ["one", "two", "three"]
Bram Moolenaare1f3ab72022-09-04 21:29:08 +0100101 call writefile(goodtext, 'Xone', 'D')
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200102 call assert_equal(1, 'Xone'->assert_equalfile('xyzxyz'))
Bram Moolenaard96ff162018-02-18 22:13:29 +0100103 call assert_match("E485: Can't read file xyzxyz", v:errors[0])
104 call remove(v:errors, 0)
105
Bram Moolenaare1f3ab72022-09-04 21:29:08 +0100106 call writefile(goodtext, 'Xtwo', 'D')
Bram Moolenaar65a54642018-04-28 16:56:53 +0200107 call assert_equal(0, assert_equalfile('Xone', 'Xtwo'))
Bram Moolenaard96ff162018-02-18 22:13:29 +0100108
109 call writefile([goodtext[0]], 'Xone')
Bram Moolenaar65a54642018-04-28 16:56:53 +0200110 call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
Bram Moolenaard96ff162018-02-18 22:13:29 +0100111 call assert_match("first file is shorter", v:errors[0])
112 call remove(v:errors, 0)
113
114 call writefile(goodtext, 'Xone')
115 call writefile([goodtext[0]], 'Xtwo')
Bram Moolenaar65a54642018-04-28 16:56:53 +0200116 call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
Bram Moolenaard96ff162018-02-18 22:13:29 +0100117 call assert_match("second file is shorter", v:errors[0])
118 call remove(v:errors, 0)
119
120 call writefile(['1234X89'], 'Xone')
121 call writefile(['1234Y89'], 'Xtwo')
Bram Moolenaar65a54642018-04-28 16:56:53 +0200122 call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
Bram Moolenaar30cc44a2020-06-04 16:52:40 +0200123 call assert_match('difference at byte 4, line 1 after "1234X" vs "1234Y"', v:errors[0])
124 call remove(v:errors, 0)
125
126 call writefile([repeat('x', 234) .. 'X'], 'Xone')
127 call writefile([repeat('x', 234) .. 'Y'], 'Xtwo')
128 call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
129 let xes = repeat('x', 134)
130 call assert_match('difference at byte 234, line 1 after "' .. xes .. 'X" vs "' .. xes .. 'Y"', v:errors[0])
Bram Moolenaard96ff162018-02-18 22:13:29 +0100131 call remove(v:errors, 0)
132
Bram Moolenaarfb517ba2020-06-03 19:55:35 +0200133 call assert_equal(1, assert_equalfile('Xone', 'Xtwo', 'a message'))
Bram Moolenaar30cc44a2020-06-04 16:52:40 +0200134 call assert_match("a message: difference at byte 234, line 1 after", v:errors[0])
Bram Moolenaarfb517ba2020-06-03 19:55:35 +0200135 call remove(v:errors, 0)
Bram Moolenaard96ff162018-02-18 22:13:29 +0100136endfunc
137
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200138func Test_assert_notequal()
139 let n = 4
Bram Moolenaar65a54642018-04-28 16:56:53 +0200140 call assert_equal(0, assert_notequal('foo', n))
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200141 let s = 'foo'
Bram Moolenaar65a54642018-04-28 16:56:53 +0200142 call assert_equal(0, assert_notequal([1, 2, 3], s))
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200143
Bram Moolenaar65a54642018-04-28 16:56:53 +0200144 call assert_equal(1, assert_notequal('foo', s))
Bram Moolenaar5869cf02017-01-14 20:06:14 +0100145 call assert_match("Expected not equal to 'foo'", v:errors[0])
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200146 call remove(v:errors, 0)
Bram Moolenaar43345542015-11-29 17:35:35 +0100147endfunc
Bram Moolenaar2d820802015-12-31 20:46:39 +0100148
Bram Moolenaar37175402017-03-18 20:18:45 +0100149func Test_assert_report()
Bram Moolenaar65a54642018-04-28 16:56:53 +0200150 call assert_equal(1, assert_report('something is wrong'))
Bram Moolenaar37175402017-03-18 20:18:45 +0100151 call assert_match('something is wrong', v:errors[0])
152 call remove(v:errors, 0)
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200153 call assert_equal(1, 'also wrong'->assert_report())
154 call assert_match('also wrong', v:errors[0])
155 call remove(v:errors, 0)
Bram Moolenaar37175402017-03-18 20:18:45 +0100156endfunc
157
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100158func Test_assert_exception()
159 try
160 nocommand
161 catch
Bram Moolenaar65a54642018-04-28 16:56:53 +0200162 call assert_equal(0, assert_exception('E492:'))
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100163 endtry
164
165 try
166 nocommand
167 catch
Bram Moolenaar7177da92020-07-12 23:09:20 +0200168 call assert_equal(1, assert_exception('E12345:'))
169 endtry
170 call assert_match("Expected 'E12345:' but got 'Vim:E492: ", v:errors[0])
171 call remove(v:errors, 0)
172
173 try
174 nocommand
175 catch
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100176 try
177 " illegal argument, get NULL for error
Bram Moolenaar65a54642018-04-28 16:56:53 +0200178 call assert_equal(1, assert_exception([]))
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100179 catch
Bram Moolenaar65a54642018-04-28 16:56:53 +0200180 call assert_equal(0, assert_exception('E730:'))
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100181 endtry
182 endtry
Bram Moolenaar7177da92020-07-12 23:09:20 +0200183
184 call assert_equal(1, assert_exception('E492:'))
185 call assert_match('v:exception is not set', v:errors[0])
186 call remove(v:errors, 0)
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100187endfunc
188
Bram Moolenaara542c682016-01-31 16:28:04 +0100189func Test_wrong_error_type()
190 let save_verrors = v:errors
191 let v:['errors'] = {'foo': 3}
192 call assert_equal('yes', 'no')
193 let verrors = v:errors
194 let v:errors = save_verrors
195 call assert_equal(type([]), type(verrors))
196endfunc
197
Bram Moolenaarf1551962016-03-15 12:55:58 +0100198func Test_compare_fail()
Bram Moolenaar94722c52023-01-28 19:19:03 +0000199 let s:v = {}
200 let s:x = {"a": s:v}
201 let s:v["b"] = s:x
Bram Moolenaarf1551962016-03-15 12:55:58 +0100202 let s:w = {"c": s:x, "d": ''}
203 try
204 call assert_equal(s:w, '')
205 catch
Bram Moolenaar65a54642018-04-28 16:56:53 +0200206 call assert_equal(0, assert_exception('E724:'))
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200207 call assert_match("Expected NULL but got ''", v:errors[0])
Bram Moolenaarf1551962016-03-15 12:55:58 +0100208 call remove(v:errors, 0)
209 endtry
210endfunc
211
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200212func Test_match()
Bram Moolenaar65a54642018-04-28 16:56:53 +0200213 call assert_equal(0, assert_match('^f.*b.*r$', 'foobar'))
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200214
Bram Moolenaar65a54642018-04-28 16:56:53 +0200215 call assert_equal(1, assert_match('bar.*foo', 'foobar'))
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200216 call assert_match("Pattern 'bar.*foo' does not match 'foobar'", v:errors[0])
217 call remove(v:errors, 0)
218
Bram Moolenaar65a54642018-04-28 16:56:53 +0200219 call assert_equal(1, assert_match('bar.*foo', 'foobar', 'wrong'))
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200220 call assert_match('wrong', v:errors[0])
221 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +0200222
223 call assert_equal(1, 'foobar'->assert_match('bar.*foo', 'wrong'))
224 call assert_match('wrong', v:errors[0])
225 call remove(v:errors, 0)
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200226endfunc
227
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200228func Test_notmatch()
Bram Moolenaar65a54642018-04-28 16:56:53 +0200229 call assert_equal(0, assert_notmatch('foo', 'bar'))
230 call assert_equal(0, assert_notmatch('^foobar$', 'foobars'))
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200231
Bram Moolenaar65a54642018-04-28 16:56:53 +0200232 call assert_equal(1, assert_notmatch('foo', 'foobar'))
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200233 call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0])
234 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +0200235
236 call assert_equal(1, 'foobar'->assert_notmatch('foo'))
237 call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0])
238 call remove(v:errors, 0)
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200239endfunc
240
Bram Moolenaar1abb5022016-03-15 13:33:55 +0100241func Test_assert_fail_fails()
Bram Moolenaar2b6ef852020-07-11 22:25:57 +0200242 call assert_equal(1, assert_fails('xxx', 'E12345'))
243 call assert_match("Expected 'E12345' but got 'E492:", v:errors[0])
Bram Moolenaar1abb5022016-03-15 13:33:55 +0100244 call remove(v:errors, 0)
Bram Moolenaar1307d1c2018-10-07 20:16:49 +0200245
Bram Moolenaar2b6ef852020-07-11 22:25:57 +0200246 call assert_equal(1, assert_fails('xxx', 'E9876', 'stupid'))
247 call assert_match("stupid: Expected 'E9876' but got 'E492:", v:errors[0])
Bram Moolenaar1307d1c2018-10-07 20:16:49 +0200248 call remove(v:errors, 0)
249
Bram Moolenaar7177da92020-07-12 23:09:20 +0200250 call assert_equal(1, assert_fails('xxx', ['E9876']))
Bram Moolenaar631e8f92020-11-04 15:07:16 +0100251 call assert_match("Expected 'E9876' but got 'E492:", v:errors[0])
Bram Moolenaar7177da92020-07-12 23:09:20 +0200252 call remove(v:errors, 0)
253
254 call assert_equal(1, assert_fails('xxx', ['E492:', 'E9876']))
Bram Moolenaar631e8f92020-11-04 15:07:16 +0100255 call assert_match("Expected 'E9876' but got 'E492:", v:errors[0])
Bram Moolenaar7177da92020-07-12 23:09:20 +0200256 call remove(v:errors, 0)
257
Bram Moolenaar1307d1c2018-10-07 20:16:49 +0200258 call assert_equal(1, assert_fails('echo', '', 'echo command'))
259 call assert_match("command did not fail: echo command", v:errors[0])
260 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +0200261
262 call assert_equal(1, 'echo'->assert_fails('', 'echo command'))
263 call assert_match("command did not fail: echo command", v:errors[0])
264 call remove(v:errors, 0)
Bram Moolenaar7177da92020-07-12 23:09:20 +0200265
266 try
267 call assert_equal(1, assert_fails('xxx', []))
268 catch
269 let exp = v:exception
270 endtry
Bram Moolenaar77072282020-09-16 17:55:40 +0200271 call assert_match("E856: \"assert_fails()\" second argument", exp)
Bram Moolenaar7177da92020-07-12 23:09:20 +0200272
273 try
274 call assert_equal(1, assert_fails('xxx', ['1', '2', '3']))
275 catch
276 let exp = v:exception
277 endtry
Bram Moolenaar77072282020-09-16 17:55:40 +0200278 call assert_match("E856: \"assert_fails()\" second argument", exp)
Bram Moolenaar7177da92020-07-12 23:09:20 +0200279
280 try
Yegappan Lakshmanane24b5e02022-09-22 13:44:00 +0100281 call assert_equal(1, assert_fails('xxx', test_null_list()))
282 catch
283 let exp = v:exception
284 endtry
285 call assert_match("E856: \"assert_fails()\" second argument", exp)
286
287 try
288 call assert_equal(1, assert_fails('xxx', []))
289 catch
290 let exp = v:exception
291 endtry
292 call assert_match("E856: \"assert_fails()\" second argument", exp)
293
294 try
Bram Moolenaar7177da92020-07-12 23:09:20 +0200295 call assert_equal(1, assert_fails('xxx', #{one: 1}))
296 catch
297 let exp = v:exception
298 endtry
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200299 call assert_match("E1222: String or List required for argument 2", exp)
Bram Moolenaar44d66522020-09-06 22:26:57 +0200300
301 try
Bram Moolenaar1540d332022-09-07 15:20:26 +0100302 call assert_equal(0, assert_fails('xxx', [#{one: 1}]))
303 catch
304 let exp = v:exception
305 endtry
306 call assert_match("E731: Using a Dictionary as a String", exp)
307
308 let exp = ''
309 try
310 call assert_equal(0, assert_fails('xxx', ['E492', #{one: 1}]))
311 catch
312 let exp = v:exception
313 endtry
314 call assert_match("E731: Using a Dictionary as a String", exp)
315
316 try
Bram Moolenaar44d66522020-09-06 22:26:57 +0200317 call assert_equal(1, assert_fails('xxx', 'E492', '', 'burp'))
318 catch
319 let exp = v:exception
320 endtry
Yegappan Lakshmanana764e732021-07-25 15:57:32 +0200321 call assert_match("E1210: Number required for argument 4", exp)
Bram Moolenaar44d66522020-09-06 22:26:57 +0200322
323 try
324 call assert_equal(1, assert_fails('xxx', 'E492', '', 54, 123))
325 catch
326 let exp = v:exception
327 endtry
Yegappan Lakshmanana764e732021-07-25 15:57:32 +0200328 call assert_match("E1174: String required for argument 5", exp)
Bram Moolenaar249e1b92022-08-14 22:23:02 +0100329
Bram Moolenaar1540d332022-09-07 15:20:26 +0100330 call assert_equal(1, assert_fails('c0', ['', '\(.\)\1']))
331 call assert_match("Expected '\\\\\\\\(.\\\\\\\\)\\\\\\\\1' but got 'E939: Positive count required: c0': c0", v:errors[0])
Bram Moolenaar249e1b92022-08-14 22:23:02 +0100332 call remove(v:errors, 0)
Yegappan Lakshmanane24b5e02022-09-22 13:44:00 +0100333
334 " Test for matching the line number and the script name in an error message
335 call writefile(['', 'call Xnonexisting()'], 'Xassertfails.vim', 'D')
336 call assert_fails('source Xassertfails.vim', 'E117:', '', 10)
337 call assert_match("Expected 10 but got 2", v:errors[0])
338 call remove(v:errors, 0)
339 call assert_fails('source Xassertfails.vim', 'E117:', '', 2, 'Xabc')
340 call assert_match("Expected 'Xabc' but got .*Xassertfails.vim", v:errors[0])
341 call remove(v:errors, 0)
Bram Moolenaar1abb5022016-03-15 13:33:55 +0100342endfunc
343
zeertzjq12e7a1f2023-05-06 12:20:05 +0100344func Test_assert_wrong_arg_emsg_off()
345 CheckFeature folding
346
347 new
348 call setline(1, ['foo', 'bar'])
349 1,2fold
350
351 " This used to crash Vim
352 let &l:foldtext = 'assert_match({}, {})'
353 redraw!
354
355 let &l:foldtext = 'assert_equalfile({}, {})'
356 redraw!
357
358 bwipe!
359endfunc
360
Bram Moolenaar7780e5c2019-07-10 22:04:48 +0200361func Test_assert_fails_in_try_block()
362 try
363 call assert_equal(0, assert_fails('throw "error"'))
364 endtry
365endfunc
366
zeertzjq72658512022-11-10 13:21:34 +0000367" Test that assert_fails() in a timer does not cause a hit-enter prompt.
368" Requires using a terminal, in regular tests the hit-enter prompt won't be
369" triggered.
Bram Moolenaarf2206432022-11-09 00:44:30 +0000370func Test_assert_fails_in_timer()
zeertzjq72658512022-11-10 13:21:34 +0000371 CheckRunVimInTerminal
372
373 let buf = RunVimInTerminal('', {'rows': 6})
374 let cmd = ":call timer_start(0, {-> assert_fails('call', 'E471:')})"
375 call term_sendkeys(buf, cmd)
376 call WaitForAssert({-> assert_equal(cmd, term_getline(buf, 6))})
377 call term_sendkeys(buf, "\<CR>")
378 call TermWait(buf, 100)
379 call assert_match('E471: Argument required', term_getline(buf, 6))
380
381 call StopVimInTerminal(buf)
Bram Moolenaarf2206432022-11-09 00:44:30 +0000382endfunc
383
Bram Moolenaarb48e96f2018-02-13 12:26:14 +0100384func Test_assert_beeps()
385 new
Bram Moolenaar65a54642018-04-28 16:56:53 +0200386 call assert_equal(0, assert_beeps('normal h'))
Bram Moolenaarb48e96f2018-02-13 12:26:14 +0100387
Bram Moolenaar65a54642018-04-28 16:56:53 +0200388 call assert_equal(1, assert_beeps('normal 0'))
Bram Moolenaarb48e96f2018-02-13 12:26:14 +0100389 call assert_match("command did not beep: normal 0", v:errors[0])
390 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +0200391
392 call assert_equal(0, 'normal h'->assert_beeps())
393 call assert_equal(1, 'normal 0'->assert_beeps())
394 call assert_match("command did not beep: normal 0", v:errors[0])
395 call remove(v:errors, 0)
396
Bram Moolenaarb48e96f2018-02-13 12:26:14 +0100397 bwipe
398endfunc
399
Yegappan Lakshmanane24b5e02022-09-22 13:44:00 +0100400func Test_assert_nobeep()
401 call assert_equal(1, assert_nobeep('normal! cr'))
402 call assert_match("command did beep: normal! cr", v:errors[0])
403 call remove(v:errors, 0)
404endfunc
405
Bram Moolenaar61c04492016-07-23 15:35:35 +0200406func Test_assert_inrange()
Bram Moolenaar65a54642018-04-28 16:56:53 +0200407 call assert_equal(0, assert_inrange(7, 7, 7))
408 call assert_equal(0, assert_inrange(5, 7, 5))
409 call assert_equal(0, assert_inrange(5, 7, 6))
410 call assert_equal(0, assert_inrange(5, 7, 7))
Bram Moolenaar61c04492016-07-23 15:35:35 +0200411
Bram Moolenaar65a54642018-04-28 16:56:53 +0200412 call assert_equal(1, assert_inrange(5, 7, 4))
Bram Moolenaar61c04492016-07-23 15:35:35 +0200413 call assert_match("Expected range 5 - 7, but got 4", v:errors[0])
414 call remove(v:errors, 0)
Bram Moolenaar65a54642018-04-28 16:56:53 +0200415 call assert_equal(1, assert_inrange(5, 7, 8))
Bram Moolenaar61c04492016-07-23 15:35:35 +0200416 call assert_match("Expected range 5 - 7, but got 8", v:errors[0])
417 call remove(v:errors, 0)
Bram Moolenaar34215662016-12-04 13:37:41 +0100418
Bram Moolenaar24278d22019-08-16 21:49:22 +0200419 call assert_equal(0, 5->assert_inrange(5, 7))
420 call assert_equal(0, 7->assert_inrange(5, 7))
421 call assert_equal(1, 8->assert_inrange(5, 7))
422 call assert_match("Expected range 5 - 7, but got 8", v:errors[0])
423 call remove(v:errors, 0)
424
Bram Moolenaar34215662016-12-04 13:37:41 +0100425 call assert_fails('call assert_inrange(1, 1)', 'E119:')
Bram Moolenaar38f08e72019-02-20 22:04:32 +0100426
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100427 call assert_equal(0, assert_inrange(7.0, 7, 7))
428 call assert_equal(0, assert_inrange(7, 7.0, 7))
429 call assert_equal(0, assert_inrange(7, 7, 7.0))
430 call assert_equal(0, assert_inrange(5, 7, 5.0))
431 call assert_equal(0, assert_inrange(5, 7, 6.0))
432 call assert_equal(0, assert_inrange(5, 7, 7.0))
Bram Moolenaar38f08e72019-02-20 22:04:32 +0100433
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100434 call assert_equal(1, assert_inrange(5, 7, 4.0))
435 call assert_match("Expected range 5.0 - 7.0, but got 4.0", v:errors[0])
436 call remove(v:errors, 0)
437 call assert_equal(1, assert_inrange(5, 7, 8.0))
438 call assert_match("Expected range 5.0 - 7.0, but got 8.0", v:errors[0])
439 call remove(v:errors, 0)
Yegappan Lakshmanane24b5e02022-09-22 13:44:00 +0100440
441 " Use a custom message
zeertzjq53f5e512023-05-04 18:58:22 +0100442 call assert_equal(1, assert_inrange(5, 7, 8, "Higher"))
443 call assert_match("Higher: Expected range 5 - 7, but got 8", v:errors[0])
444 call remove(v:errors, 0)
Yegappan Lakshmanane24b5e02022-09-22 13:44:00 +0100445 call assert_equal(1, assert_inrange(5, 7, 8.0, "Higher"))
zeertzjq53f5e512023-05-04 18:58:22 +0100446 call assert_match("Higher: Expected range 5.0 - 7.0, but got 8.0", v:errors[0])
Yegappan Lakshmanane24b5e02022-09-22 13:44:00 +0100447 call remove(v:errors, 0)
448
449 " Invalid arguments
450 call assert_fails("call assert_inrange([], 2, 3)", 'E1219:')
451 call assert_fails("call assert_inrange(1, [], 3)", 'E1219:')
452 call assert_fails("call assert_inrange(1, 2, [])", 'E1219:')
Bram Moolenaar61c04492016-07-23 15:35:35 +0200453endfunc
Bram Moolenaarf1551962016-03-15 12:55:58 +0100454
Bram Moolenaarc7b831c2017-01-28 18:08:12 +0100455func Test_assert_with_msg()
456 call assert_equal('foo', 'bar', 'testing')
457 call assert_match("testing: Expected 'foo' but got 'bar'", v:errors[0])
458 call remove(v:errors, 0)
459endfunc
460
Bram Moolenaareb992cb2017-03-09 18:20:16 +0100461func Test_override()
462 call test_override('char_avail', 1)
Bram Moolenaarce90e362019-09-08 18:58:44 +0200463 eval 1->test_override('redraw')
Bram Moolenaareb992cb2017-03-09 18:20:16 +0100464 call test_override('ALL', 0)
Bram Moolenaare2e40752020-09-04 21:18:46 +0200465 call assert_fails("call test_override('xxx', 1)", 'E475:')
Yegappan Lakshmanan8deb2b32022-09-02 15:15:27 +0100466 call assert_fails("call test_override('redraw', 'yes')", 'E1210:')
Bram Moolenaareb992cb2017-03-09 18:20:16 +0100467endfunc
468
Bram Moolenaarb0f94c12019-06-13 22:19:53 +0200469func Test_mouse_position()
470 let save_mouse = &mouse
471 set mouse=a
472 new
473 call setline(1, ['line one', 'line two'])
474 call assert_equal([0, 1, 1, 0], getpos('.'))
475 call test_setmouse(1, 5)
476 call feedkeys("\<LeftMouse>", "xt")
477 call assert_equal([0, 1, 5, 0], getpos('.'))
478 call test_setmouse(2, 20)
479 call feedkeys("\<LeftMouse>", "xt")
480 call assert_equal([0, 2, 8, 0], getpos('.'))
481 call test_setmouse(5, 1)
482 call feedkeys("\<LeftMouse>", "xt")
483 call assert_equal([0, 2, 1, 0], getpos('.'))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200484 call assert_fails('call test_setmouse("", 2)', 'E474:')
485 call assert_fails('call test_setmouse(1, "")', 'E474:')
Bram Moolenaarb0f94c12019-06-13 22:19:53 +0200486 bwipe!
487 let &mouse = save_mouse
488endfunc
489
Bram Moolenaar2d820802015-12-31 20:46:39 +0100490func Test_user_is_happy()
491 smile
492 sleep 300m
493endfunc
Bram Moolenaar89036762018-06-12 14:58:39 +0200494
Yegappan Lakshmanane24b5e02022-09-22 13:44:00 +0100495" Test for the test_alloc_fail() function
496func Test_test_alloc_fail()
497 call assert_fails('call test_alloc_fail([], 1, 1)', 'E474:')
498 call assert_fails('call test_alloc_fail(10, [], 1)', 'E474:')
499 call assert_fails('call test_alloc_fail(10, 1, [])', 'E474:')
500 call assert_fails('call test_alloc_fail(999999, 1, 1)', 'E474:')
501endfunc
502
503" Test for the test_option_not_set() function
504func Test_test_option_not_set()
505 call assert_fails('call test_option_not_set("Xinvalidopt")', 'E475:')
506endfunc
507
Bram Moolenaar89036762018-06-12 14:58:39 +0200508" Must be last.
509func Test_zz_quit_detected()
510 " Verify that if a test function ends Vim the test script detects this.
511 quit
512endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200513
514" vim: shiftwidth=2 sts=2 expandtab