xref: /vim-8.2.3635/src/testdir/test_assert.vim (revision fb517bac)
1" Test that the methods used for testing work.
2
3func Test_assert_false()
4  call assert_equal(0, assert_false(0))
5  call assert_equal(0, assert_false(v:false))
6  call assert_equal(0, v:false->assert_false())
7
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)
11
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)
15endfunc
16
17func Test_assert_true()
18  call assert_equal(0, assert_true(1))
19  call assert_equal(0, assert_true(123))
20  call assert_equal(0, assert_true(v:true))
21  call assert_equal(0, v:true->assert_true())
22
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)
26
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)
30endfunc
31
32func Test_assert_equal()
33  let s = 'foo'
34  call assert_equal(0, assert_equal('foo', s))
35  let n = 4
36  call assert_equal(0, assert_equal(4, n))
37  let l = [1, 2, 3]
38  call assert_equal(0, assert_equal([1, 2, 3], l))
39  call assert_equal(test_null_list(), test_null_list())
40  call assert_equal(test_null_list(), [])
41  call assert_equal([], test_null_list())
42
43  let s = 'foo'
44  call assert_equal(1, assert_equal('bar', s))
45  call assert_match("Expected 'bar' but got 'foo'", v:errors[0])
46  call remove(v:errors, 0)
47
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)
51endfunc
52
53func Test_assert_equalfile()
54  call assert_equal(1, assert_equalfile('abcabc', 'xyzxyz'))
55  call assert_match("E485: Can't read file abcabc", v:errors[0])
56  call remove(v:errors, 0)
57
58  let goodtext = ["one", "two", "three"]
59  call writefile(goodtext, 'Xone')
60  call assert_equal(1, 'Xone'->assert_equalfile('xyzxyz'))
61  call assert_match("E485: Can't read file xyzxyz", v:errors[0])
62  call remove(v:errors, 0)
63
64  call writefile(goodtext, 'Xtwo')
65  call assert_equal(0, assert_equalfile('Xone', 'Xtwo'))
66
67  call writefile([goodtext[0]], 'Xone')
68  call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
69  call assert_match("first file is shorter", v:errors[0])
70  call remove(v:errors, 0)
71
72  call writefile(goodtext, 'Xone')
73  call writefile([goodtext[0]], 'Xtwo')
74  call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
75  call assert_match("second file is shorter", v:errors[0])
76  call remove(v:errors, 0)
77
78  call writefile(['1234X89'], 'Xone')
79  call writefile(['1234Y89'], 'Xtwo')
80  call assert_equal(1, assert_equalfile('Xone', 'Xtwo'))
81  call assert_match("difference at byte 4", v:errors[0])
82  call remove(v:errors, 0)
83
84  call assert_equal(1, assert_equalfile('Xone', 'Xtwo', 'a message'))
85  call assert_match("a message: difference at byte 4", v:errors[0])
86  call remove(v:errors, 0)
87
88  call delete('Xone')
89  call delete('Xtwo')
90endfunc
91
92func Test_assert_notequal()
93  let n = 4
94  call assert_equal(0, assert_notequal('foo', n))
95  let s = 'foo'
96  call assert_equal(0, assert_notequal([1, 2, 3], s))
97
98  call assert_equal(1, assert_notequal('foo', s))
99  call assert_match("Expected not equal to 'foo'", v:errors[0])
100  call remove(v:errors, 0)
101endfunc
102
103func Test_assert_report()
104  call assert_equal(1, assert_report('something is wrong'))
105  call assert_match('something is wrong', v:errors[0])
106  call remove(v:errors, 0)
107  call assert_equal(1, 'also wrong'->assert_report())
108  call assert_match('also wrong', v:errors[0])
109  call remove(v:errors, 0)
110endfunc
111
112func Test_assert_exception()
113  try
114    nocommand
115  catch
116    call assert_equal(0, assert_exception('E492:'))
117  endtry
118
119  try
120    nocommand
121  catch
122    try
123      " illegal argument, get NULL for error
124      call assert_equal(1, assert_exception([]))
125    catch
126      call assert_equal(0, assert_exception('E730:'))
127    endtry
128  endtry
129endfunc
130
131func Test_wrong_error_type()
132  let save_verrors = v:errors
133  let v:['errors'] = {'foo': 3}
134  call assert_equal('yes', 'no')
135  let verrors = v:errors
136  let v:errors = save_verrors
137  call assert_equal(type([]), type(verrors))
138endfunc
139
140func Test_compare_fail()
141  let s:v = {}
142  let s:x = {"a": s:v}
143  let s:v["b"] = s:x
144  let s:w = {"c": s:x, "d": ''}
145  try
146    call assert_equal(s:w, '')
147  catch
148    call assert_equal(0, assert_exception('E724:'))
149    call assert_match("Expected NULL but got ''", v:errors[0])
150    call remove(v:errors, 0)
151  endtry
152endfunc
153
154func Test_match()
155  call assert_equal(0, assert_match('^f.*b.*r$', 'foobar'))
156
157  call assert_equal(1, assert_match('bar.*foo', 'foobar'))
158  call assert_match("Pattern 'bar.*foo' does not match 'foobar'", v:errors[0])
159  call remove(v:errors, 0)
160
161  call assert_equal(1, assert_match('bar.*foo', 'foobar', 'wrong'))
162  call assert_match('wrong', v:errors[0])
163  call remove(v:errors, 0)
164
165  call assert_equal(1, 'foobar'->assert_match('bar.*foo', 'wrong'))
166  call assert_match('wrong', v:errors[0])
167  call remove(v:errors, 0)
168endfunc
169
170func Test_notmatch()
171  call assert_equal(0, assert_notmatch('foo', 'bar'))
172  call assert_equal(0, assert_notmatch('^foobar$', 'foobars'))
173
174  call assert_equal(1, assert_notmatch('foo', 'foobar'))
175  call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0])
176  call remove(v:errors, 0)
177
178  call assert_equal(1, 'foobar'->assert_notmatch('foo'))
179  call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0])
180  call remove(v:errors, 0)
181endfunc
182
183func Test_assert_fail_fails()
184  call assert_equal(1, assert_fails('xxx', {}))
185  call assert_match("Expected {} but got 'E731:", v:errors[0])
186  call remove(v:errors, 0)
187
188  call assert_equal(1, assert_fails('xxx', {}, 'stupid'))
189  call assert_match("stupid: Expected {} but got 'E731:", v:errors[0])
190  call remove(v:errors, 0)
191
192  call assert_equal(1, assert_fails('echo', '', 'echo command'))
193  call assert_match("command did not fail: echo command", v:errors[0])
194  call remove(v:errors, 0)
195
196  call assert_equal(1, 'echo'->assert_fails('', 'echo command'))
197  call assert_match("command did not fail: echo command", v:errors[0])
198  call remove(v:errors, 0)
199endfunc
200
201func Test_assert_fails_in_try_block()
202  try
203    call assert_equal(0, assert_fails('throw "error"'))
204  endtry
205endfunc
206
207func Test_assert_beeps()
208  new
209  call assert_equal(0, assert_beeps('normal h'))
210
211  call assert_equal(1, assert_beeps('normal 0'))
212  call assert_match("command did not beep: normal 0", v:errors[0])
213  call remove(v:errors, 0)
214
215  call assert_equal(0, 'normal h'->assert_beeps())
216  call assert_equal(1, 'normal 0'->assert_beeps())
217  call assert_match("command did not beep: normal 0", v:errors[0])
218  call remove(v:errors, 0)
219
220  bwipe
221endfunc
222
223func Test_assert_inrange()
224  call assert_equal(0, assert_inrange(7, 7, 7))
225  call assert_equal(0, assert_inrange(5, 7, 5))
226  call assert_equal(0, assert_inrange(5, 7, 6))
227  call assert_equal(0, assert_inrange(5, 7, 7))
228
229  call assert_equal(1, assert_inrange(5, 7, 4))
230  call assert_match("Expected range 5 - 7, but got 4", v:errors[0])
231  call remove(v:errors, 0)
232  call assert_equal(1, assert_inrange(5, 7, 8))
233  call assert_match("Expected range 5 - 7, but got 8", v:errors[0])
234  call remove(v:errors, 0)
235
236  call assert_equal(0, 5->assert_inrange(5, 7))
237  call assert_equal(0, 7->assert_inrange(5, 7))
238  call assert_equal(1, 8->assert_inrange(5, 7))
239  call assert_match("Expected range 5 - 7, but got 8", v:errors[0])
240  call remove(v:errors, 0)
241
242  call assert_fails('call assert_inrange(1, 1)', 'E119:')
243
244  if has('float')
245    call assert_equal(0, assert_inrange(7.0, 7, 7))
246    call assert_equal(0, assert_inrange(7, 7.0, 7))
247    call assert_equal(0, assert_inrange(7, 7, 7.0))
248    call assert_equal(0, assert_inrange(5, 7, 5.0))
249    call assert_equal(0, assert_inrange(5, 7, 6.0))
250    call assert_equal(0, assert_inrange(5, 7, 7.0))
251
252    call assert_equal(1, assert_inrange(5, 7, 4.0))
253    call assert_match("Expected range 5.0 - 7.0, but got 4.0", v:errors[0])
254    call remove(v:errors, 0)
255    call assert_equal(1, assert_inrange(5, 7, 8.0))
256    call assert_match("Expected range 5.0 - 7.0, but got 8.0", v:errors[0])
257    call remove(v:errors, 0)
258  endif
259endfunc
260
261func Test_assert_with_msg()
262  call assert_equal('foo', 'bar', 'testing')
263  call assert_match("testing: Expected 'foo' but got 'bar'", v:errors[0])
264  call remove(v:errors, 0)
265endfunc
266
267func Test_override()
268  call test_override('char_avail', 1)
269  eval 1->test_override('redraw')
270  call test_override('ALL', 0)
271  call assert_fails("call test_override('xxx', 1)", 'E475')
272  call assert_fails("call test_override('redraw', 'yes')", 'E474')
273endfunc
274
275func Test_mouse_position()
276  let save_mouse = &mouse
277  set mouse=a
278  new
279  call setline(1, ['line one', 'line two'])
280  call assert_equal([0, 1, 1, 0], getpos('.'))
281  call test_setmouse(1, 5)
282  call feedkeys("\<LeftMouse>", "xt")
283  call assert_equal([0, 1, 5, 0], getpos('.'))
284  call test_setmouse(2, 20)
285  call feedkeys("\<LeftMouse>", "xt")
286  call assert_equal([0, 2, 8, 0], getpos('.'))
287  call test_setmouse(5, 1)
288  call feedkeys("\<LeftMouse>", "xt")
289  call assert_equal([0, 2, 1, 0], getpos('.'))
290  bwipe!
291  let &mouse = save_mouse
292endfunc
293
294func Test_user_is_happy()
295  smile
296  sleep 300m
297endfunc
298
299" Must be last.
300func Test_zz_quit_detected()
301  " Verify that if a test function ends Vim the test script detects this.
302  quit
303endfunc
304