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_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 73func Test_assert_equalfile() 74 call assert_equal(1, assert_equalfile('abcabc', 'xyzxyz')) 75 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') 80 call assert_equal(1, 'Xone'->assert_equalfile('xyzxyz')) 81 call assert_match("E485: Can't read file xyzxyz", v:errors[0]) 82 call remove(v:errors, 0) 83 84 call writefile(goodtext, 'Xtwo') 85 call assert_equal(0, assert_equalfile('Xone', 'Xtwo')) 86 87 call writefile([goodtext[0]], 'Xone') 88 call assert_equal(1, assert_equalfile('Xone', 'Xtwo')) 89 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') 94 call assert_equal(1, assert_equalfile('Xone', 'Xtwo')) 95 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') 100 call assert_equal(1, assert_equalfile('Xone', 'Xtwo')) 101 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]) 109 call remove(v:errors, 0) 110 111 call assert_equal(1, assert_equalfile('Xone', 'Xtwo', 'a message')) 112 call assert_match("a message: difference at byte 234, line 1 after", v:errors[0]) 113 call remove(v:errors, 0) 114 115 call delete('Xone') 116 call delete('Xtwo') 117endfunc 118 119func Test_assert_notequal() 120 let n = 4 121 call assert_equal(0, assert_notequal('foo', n)) 122 let s = 'foo' 123 call assert_equal(0, assert_notequal([1, 2, 3], s)) 124 125 call assert_equal(1, assert_notequal('foo', s)) 126 call assert_match("Expected not equal to 'foo'", v:errors[0]) 127 call remove(v:errors, 0) 128endfunc 129 130func Test_assert_report() 131 call assert_equal(1, assert_report('something is wrong')) 132 call assert_match('something is wrong', v:errors[0]) 133 call remove(v:errors, 0) 134 call assert_equal(1, 'also wrong'->assert_report()) 135 call assert_match('also wrong', v:errors[0]) 136 call remove(v:errors, 0) 137endfunc 138 139func Test_assert_exception() 140 try 141 nocommand 142 catch 143 call assert_equal(0, assert_exception('E492:')) 144 endtry 145 146 try 147 nocommand 148 catch 149 try 150 " illegal argument, get NULL for error 151 call assert_equal(1, assert_exception([])) 152 catch 153 call assert_equal(0, assert_exception('E730:')) 154 endtry 155 endtry 156endfunc 157 158func 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 167func 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 175 call assert_equal(0, assert_exception('E724:')) 176 call assert_match("Expected NULL but got ''", v:errors[0]) 177 call remove(v:errors, 0) 178 endtry 179endfunc 180 181func Test_match() 182 call assert_equal(0, assert_match('^f.*b.*r$', 'foobar')) 183 184 call assert_equal(1, assert_match('bar.*foo', 'foobar')) 185 call assert_match("Pattern 'bar.*foo' does not match 'foobar'", v:errors[0]) 186 call remove(v:errors, 0) 187 188 call assert_equal(1, assert_match('bar.*foo', 'foobar', 'wrong')) 189 call assert_match('wrong', v:errors[0]) 190 call remove(v:errors, 0) 191 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) 195endfunc 196 197func Test_notmatch() 198 call assert_equal(0, assert_notmatch('foo', 'bar')) 199 call assert_equal(0, assert_notmatch('^foobar$', 'foobars')) 200 201 call assert_equal(1, assert_notmatch('foo', 'foobar')) 202 call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0]) 203 call remove(v:errors, 0) 204 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) 208endfunc 209 210func Test_assert_fail_fails() 211 call assert_equal(1, assert_fails('xxx', {})) 212 call assert_match("Expected {} but got 'E731:", v:errors[0]) 213 call remove(v:errors, 0) 214 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) 222 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) 226endfunc 227 228func Test_assert_fails_in_try_block() 229 try 230 call assert_equal(0, assert_fails('throw "error"')) 231 endtry 232endfunc 233 234func Test_assert_beeps() 235 new 236 call assert_equal(0, assert_beeps('normal h')) 237 238 call assert_equal(1, assert_beeps('normal 0')) 239 call assert_match("command did not beep: normal 0", v:errors[0]) 240 call remove(v:errors, 0) 241 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 247 bwipe 248endfunc 249 250func Test_assert_inrange() 251 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)) 255 256 call assert_equal(1, assert_inrange(5, 7, 4)) 257 call assert_match("Expected range 5 - 7, but got 4", v:errors[0]) 258 call remove(v:errors, 0) 259 call assert_equal(1, assert_inrange(5, 7, 8)) 260 call assert_match("Expected range 5 - 7, but got 8", v:errors[0]) 261 call remove(v:errors, 0) 262 263 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 269 call assert_fails('call assert_inrange(1, 1)', 'E119:') 270 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 286endfunc 287 288func 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 294func Test_override() 295 call test_override('char_avail', 1) 296 eval 1->test_override('redraw') 297 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 302func 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 321func Test_user_is_happy() 322 smile 323 sleep 300m 324endfunc 325 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 331