blob: c2d055c95e9a71504d6b5a78f95d37a94d68e671 [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))
9 call assert_match("Expected False but got 123", v:errors[0])
10 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +020011
12 call assert_equal(1, 123->assert_false())
13 call assert_match("Expected False but got 123", v:errors[0])
14 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))
24 call assert_match("Expected True but got 0", v:errors[0])
25 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +020026
27 call assert_equal(1, 0->assert_true())
28 call assert_match("Expected True but got 0", v:errors[0])
29 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
48 call assert_equal('XxxxxxxxxxxxxxxxxxxxxxX', 'XyyyyyyyyyyyyyyyyyyyyyyyyyX')
49 call assert_match("Expected 'X\\\\\\[x occurs 21 times]X' but got 'X\\\\\\[y occurs 25 times]X'", v:errors[0])
50 call remove(v:errors, 0)
Bram Moolenaarb50e5f52016-04-03 20:57:20 +020051endfunc
52
Bram Moolenaar4a021df2020-06-13 15:13:38 +020053func Test_assert_equal_dict()
54 call assert_equal(0, assert_equal(#{one: 1, two: 2}, #{two: 2, one: 1}))
55
56 call assert_equal(1, assert_equal(#{one: 1, two: 2}, #{two: 2, one: 3}))
57 call assert_match("Expected {'one': 1} but got {'one': 3} - 1 equal item omitted", v:errors[0])
58 call remove(v:errors, 0)
59
60 call assert_equal(1, assert_equal(#{one: 1, two: 2}, #{two: 22, one: 11}))
61 call assert_match("Expected {'one': 1, 'two': 2} but got {'one': 11, 'two': 22}", v:errors[0])
62 call remove(v:errors, 0)
63
64 call assert_equal(1, assert_equal(#{}, #{two: 2, one: 1}))
65 call assert_match("Expected {} but got {'one': 1, 'two': 2}", v:errors[0])
66 call remove(v:errors, 0)
67
68 call assert_equal(1, assert_equal(#{two: 2, one: 1}, #{}))
69 call assert_match("Expected {'one': 1, 'two': 2} but got {}", v:errors[0])
70 call remove(v:errors, 0)
71endfunc
72
Bram Moolenaard96ff162018-02-18 22:13:29 +010073func Test_assert_equalfile()
Bram Moolenaar65a54642018-04-28 16:56:53 +020074 call assert_equal(1, assert_equalfile('abcabc', 'xyzxyz'))
Bram Moolenaard96ff162018-02-18 22:13:29 +010075 call assert_match("E485: Can't read file abcabc", v:errors[0])
76 call remove(v:errors, 0)
77
78 let goodtext = ["one", "two", "three"]
79 call writefile(goodtext, 'Xone')
Bram Moolenaare49fbff2019-08-21 22:50:07 +020080 call assert_equal(1, 'Xone'->assert_equalfile('xyzxyz'))
Bram Moolenaard96ff162018-02-18 22:13:29 +010081 call assert_match("E485: Can't read file xyzxyz", v:errors[0])
82 call remove(v:errors, 0)
83
84 call writefile(goodtext, 'Xtwo')
Bram Moolenaar65a54642018-04-28 16:56:53 +020085 call assert_equal(0, assert_equalfile('Xone', 'Xtwo'))
Bram Moolenaard96ff162018-02-18 22:13:29 +010086
87 call writefile([goodtext[0]], 'Xone')
Bram Moolenaar65a54642018-04-28 16:56:53 +020088 call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
Bram Moolenaard96ff162018-02-18 22:13:29 +010089 call assert_match("first file is shorter", v:errors[0])
90 call remove(v:errors, 0)
91
92 call writefile(goodtext, 'Xone')
93 call writefile([goodtext[0]], 'Xtwo')
Bram Moolenaar65a54642018-04-28 16:56:53 +020094 call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
Bram Moolenaard96ff162018-02-18 22:13:29 +010095 call assert_match("second file is shorter", v:errors[0])
96 call remove(v:errors, 0)
97
98 call writefile(['1234X89'], 'Xone')
99 call writefile(['1234Y89'], 'Xtwo')
Bram Moolenaar65a54642018-04-28 16:56:53 +0200100 call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
Bram Moolenaar30cc44a2020-06-04 16:52:40 +0200101 call assert_match('difference at byte 4, line 1 after "1234X" vs "1234Y"', v:errors[0])
102 call remove(v:errors, 0)
103
104 call writefile([repeat('x', 234) .. 'X'], 'Xone')
105 call writefile([repeat('x', 234) .. 'Y'], 'Xtwo')
106 call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
107 let xes = repeat('x', 134)
108 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 +0100109 call remove(v:errors, 0)
110
Bram Moolenaarfb517ba2020-06-03 19:55:35 +0200111 call assert_equal(1, assert_equalfile('Xone', 'Xtwo', 'a message'))
Bram Moolenaar30cc44a2020-06-04 16:52:40 +0200112 call assert_match("a message: difference at byte 234, line 1 after", v:errors[0])
Bram Moolenaarfb517ba2020-06-03 19:55:35 +0200113 call remove(v:errors, 0)
114
Bram Moolenaard96ff162018-02-18 22:13:29 +0100115 call delete('Xone')
116 call delete('Xtwo')
117endfunc
118
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200119func Test_assert_notequal()
120 let n = 4
Bram Moolenaar65a54642018-04-28 16:56:53 +0200121 call assert_equal(0, assert_notequal('foo', n))
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200122 let s = 'foo'
Bram Moolenaar65a54642018-04-28 16:56:53 +0200123 call assert_equal(0, assert_notequal([1, 2, 3], s))
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200124
Bram Moolenaar65a54642018-04-28 16:56:53 +0200125 call assert_equal(1, assert_notequal('foo', s))
Bram Moolenaar5869cf02017-01-14 20:06:14 +0100126 call assert_match("Expected not equal to 'foo'", v:errors[0])
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200127 call remove(v:errors, 0)
Bram Moolenaar43345542015-11-29 17:35:35 +0100128endfunc
Bram Moolenaar2d820802015-12-31 20:46:39 +0100129
Bram Moolenaar37175402017-03-18 20:18:45 +0100130func Test_assert_report()
Bram Moolenaar65a54642018-04-28 16:56:53 +0200131 call assert_equal(1, assert_report('something is wrong'))
Bram Moolenaar37175402017-03-18 20:18:45 +0100132 call assert_match('something is wrong', v:errors[0])
133 call remove(v:errors, 0)
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200134 call assert_equal(1, 'also wrong'->assert_report())
135 call assert_match('also wrong', v:errors[0])
136 call remove(v:errors, 0)
Bram Moolenaar37175402017-03-18 20:18:45 +0100137endfunc
138
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100139func Test_assert_exception()
140 try
141 nocommand
142 catch
Bram Moolenaar65a54642018-04-28 16:56:53 +0200143 call assert_equal(0, assert_exception('E492:'))
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100144 endtry
145
146 try
147 nocommand
148 catch
149 try
150 " illegal argument, get NULL for error
Bram Moolenaar65a54642018-04-28 16:56:53 +0200151 call assert_equal(1, assert_exception([]))
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100152 catch
Bram Moolenaar65a54642018-04-28 16:56:53 +0200153 call assert_equal(0, assert_exception('E730:'))
Bram Moolenaarda5dcd92016-01-19 14:31:20 +0100154 endtry
155 endtry
156endfunc
157
Bram Moolenaara542c682016-01-31 16:28:04 +0100158func Test_wrong_error_type()
159 let save_verrors = v:errors
160 let v:['errors'] = {'foo': 3}
161 call assert_equal('yes', 'no')
162 let verrors = v:errors
163 let v:errors = save_verrors
164 call assert_equal(type([]), type(verrors))
165endfunc
166
Bram Moolenaarf1551962016-03-15 12:55:58 +0100167func Test_compare_fail()
168 let s:v = {}
169 let s:x = {"a": s:v}
170 let s:v["b"] = s:x
171 let s:w = {"c": s:x, "d": ''}
172 try
173 call assert_equal(s:w, '')
174 catch
Bram Moolenaar65a54642018-04-28 16:56:53 +0200175 call assert_equal(0, assert_exception('E724:'))
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200176 call assert_match("Expected NULL but got ''", v:errors[0])
Bram Moolenaarf1551962016-03-15 12:55:58 +0100177 call remove(v:errors, 0)
178 endtry
179endfunc
180
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200181func Test_match()
Bram Moolenaar65a54642018-04-28 16:56:53 +0200182 call assert_equal(0, assert_match('^f.*b.*r$', 'foobar'))
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200183
Bram Moolenaar65a54642018-04-28 16:56:53 +0200184 call assert_equal(1, assert_match('bar.*foo', 'foobar'))
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200185 call assert_match("Pattern 'bar.*foo' does not match 'foobar'", v:errors[0])
186 call remove(v:errors, 0)
187
Bram Moolenaar65a54642018-04-28 16:56:53 +0200188 call assert_equal(1, assert_match('bar.*foo', 'foobar', 'wrong'))
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200189 call assert_match('wrong', v:errors[0])
190 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +0200191
192 call assert_equal(1, 'foobar'->assert_match('bar.*foo', 'wrong'))
193 call assert_match('wrong', v:errors[0])
194 call remove(v:errors, 0)
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200195endfunc
196
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200197func Test_notmatch()
Bram Moolenaar65a54642018-04-28 16:56:53 +0200198 call assert_equal(0, assert_notmatch('foo', 'bar'))
199 call assert_equal(0, assert_notmatch('^foobar$', 'foobars'))
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200200
Bram Moolenaar65a54642018-04-28 16:56:53 +0200201 call assert_equal(1, assert_notmatch('foo', 'foobar'))
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200202 call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0])
203 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +0200204
205 call assert_equal(1, 'foobar'->assert_notmatch('foo'))
206 call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0])
207 call remove(v:errors, 0)
Bram Moolenaarb50e5f52016-04-03 20:57:20 +0200208endfunc
209
Bram Moolenaar1abb5022016-03-15 13:33:55 +0100210func Test_assert_fail_fails()
Bram Moolenaar65a54642018-04-28 16:56:53 +0200211 call assert_equal(1, assert_fails('xxx', {}))
Bram Moolenaarea6553b2016-03-27 15:13:38 +0200212 call assert_match("Expected {} but got 'E731:", v:errors[0])
Bram Moolenaar1abb5022016-03-15 13:33:55 +0100213 call remove(v:errors, 0)
Bram Moolenaar1307d1c2018-10-07 20:16:49 +0200214
215 call assert_equal(1, assert_fails('xxx', {}, 'stupid'))
216 call assert_match("stupid: Expected {} but got 'E731:", v:errors[0])
217 call remove(v:errors, 0)
218
219 call assert_equal(1, assert_fails('echo', '', 'echo command'))
220 call assert_match("command did not fail: echo command", v:errors[0])
221 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +0200222
223 call assert_equal(1, 'echo'->assert_fails('', 'echo command'))
224 call assert_match("command did not fail: echo command", v:errors[0])
225 call remove(v:errors, 0)
Bram Moolenaar1abb5022016-03-15 13:33:55 +0100226endfunc
227
Bram Moolenaar7780e5c2019-07-10 22:04:48 +0200228func Test_assert_fails_in_try_block()
229 try
230 call assert_equal(0, assert_fails('throw "error"'))
231 endtry
232endfunc
233
Bram Moolenaarb48e96f2018-02-13 12:26:14 +0100234func Test_assert_beeps()
235 new
Bram Moolenaar65a54642018-04-28 16:56:53 +0200236 call assert_equal(0, assert_beeps('normal h'))
Bram Moolenaarb48e96f2018-02-13 12:26:14 +0100237
Bram Moolenaar65a54642018-04-28 16:56:53 +0200238 call assert_equal(1, assert_beeps('normal 0'))
Bram Moolenaarb48e96f2018-02-13 12:26:14 +0100239 call assert_match("command did not beep: normal 0", v:errors[0])
240 call remove(v:errors, 0)
Bram Moolenaar24278d22019-08-16 21:49:22 +0200241
242 call assert_equal(0, 'normal h'->assert_beeps())
243 call assert_equal(1, 'normal 0'->assert_beeps())
244 call assert_match("command did not beep: normal 0", v:errors[0])
245 call remove(v:errors, 0)
246
Bram Moolenaarb48e96f2018-02-13 12:26:14 +0100247 bwipe
248endfunc
249
Bram Moolenaar61c04492016-07-23 15:35:35 +0200250func Test_assert_inrange()
Bram Moolenaar65a54642018-04-28 16:56:53 +0200251 call assert_equal(0, assert_inrange(7, 7, 7))
252 call assert_equal(0, assert_inrange(5, 7, 5))
253 call assert_equal(0, assert_inrange(5, 7, 6))
254 call assert_equal(0, assert_inrange(5, 7, 7))
Bram Moolenaar61c04492016-07-23 15:35:35 +0200255
Bram Moolenaar65a54642018-04-28 16:56:53 +0200256 call assert_equal(1, assert_inrange(5, 7, 4))
Bram Moolenaar61c04492016-07-23 15:35:35 +0200257 call assert_match("Expected range 5 - 7, but got 4", v:errors[0])
258 call remove(v:errors, 0)
Bram Moolenaar65a54642018-04-28 16:56:53 +0200259 call assert_equal(1, assert_inrange(5, 7, 8))
Bram Moolenaar61c04492016-07-23 15:35:35 +0200260 call assert_match("Expected range 5 - 7, but got 8", v:errors[0])
261 call remove(v:errors, 0)
Bram Moolenaar34215662016-12-04 13:37:41 +0100262
Bram Moolenaar24278d22019-08-16 21:49:22 +0200263 call assert_equal(0, 5->assert_inrange(5, 7))
264 call assert_equal(0, 7->assert_inrange(5, 7))
265 call assert_equal(1, 8->assert_inrange(5, 7))
266 call assert_match("Expected range 5 - 7, but got 8", v:errors[0])
267 call remove(v:errors, 0)
268
Bram Moolenaar34215662016-12-04 13:37:41 +0100269 call assert_fails('call assert_inrange(1, 1)', 'E119:')
Bram Moolenaar38f08e72019-02-20 22:04:32 +0100270
271 if has('float')
272 call assert_equal(0, assert_inrange(7.0, 7, 7))
273 call assert_equal(0, assert_inrange(7, 7.0, 7))
274 call assert_equal(0, assert_inrange(7, 7, 7.0))
275 call assert_equal(0, assert_inrange(5, 7, 5.0))
276 call assert_equal(0, assert_inrange(5, 7, 6.0))
277 call assert_equal(0, assert_inrange(5, 7, 7.0))
278
279 call assert_equal(1, assert_inrange(5, 7, 4.0))
280 call assert_match("Expected range 5.0 - 7.0, but got 4.0", v:errors[0])
281 call remove(v:errors, 0)
282 call assert_equal(1, assert_inrange(5, 7, 8.0))
283 call assert_match("Expected range 5.0 - 7.0, but got 8.0", v:errors[0])
284 call remove(v:errors, 0)
285 endif
Bram Moolenaar61c04492016-07-23 15:35:35 +0200286endfunc
Bram Moolenaarf1551962016-03-15 12:55:58 +0100287
Bram Moolenaarc7b831c2017-01-28 18:08:12 +0100288func Test_assert_with_msg()
289 call assert_equal('foo', 'bar', 'testing')
290 call assert_match("testing: Expected 'foo' but got 'bar'", v:errors[0])
291 call remove(v:errors, 0)
292endfunc
293
Bram Moolenaareb992cb2017-03-09 18:20:16 +0100294func Test_override()
295 call test_override('char_avail', 1)
Bram Moolenaarce90e362019-09-08 18:58:44 +0200296 eval 1->test_override('redraw')
Bram Moolenaareb992cb2017-03-09 18:20:16 +0100297 call test_override('ALL', 0)
298 call assert_fails("call test_override('xxx', 1)", 'E475')
299 call assert_fails("call test_override('redraw', 'yes')", 'E474')
300endfunc
301
Bram Moolenaarb0f94c12019-06-13 22:19:53 +0200302func Test_mouse_position()
303 let save_mouse = &mouse
304 set mouse=a
305 new
306 call setline(1, ['line one', 'line two'])
307 call assert_equal([0, 1, 1, 0], getpos('.'))
308 call test_setmouse(1, 5)
309 call feedkeys("\<LeftMouse>", "xt")
310 call assert_equal([0, 1, 5, 0], getpos('.'))
311 call test_setmouse(2, 20)
312 call feedkeys("\<LeftMouse>", "xt")
313 call assert_equal([0, 2, 8, 0], getpos('.'))
314 call test_setmouse(5, 1)
315 call feedkeys("\<LeftMouse>", "xt")
316 call assert_equal([0, 2, 1, 0], getpos('.'))
317 bwipe!
318 let &mouse = save_mouse
319endfunc
320
Bram Moolenaar2d820802015-12-31 20:46:39 +0100321func Test_user_is_happy()
322 smile
323 sleep 300m
324endfunc
Bram Moolenaar89036762018-06-12 14:58:39 +0200325
326" Must be last.
327func Test_zz_quit_detected()
328 " Verify that if a test function ends Vim the test script detects this.
329 quit
330endfunc