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) 51 52 " special characters are escaped 53 call assert_equal("\b\e\f\n\t\r\\\x01\x7f", 'x') 54 call assert_match('Expected ''\\b\\e\\f\\n\\t\\r\\\\\\x01\\x7f'' but got ''x''', v:errors[0]) 55 call remove(v:errors, 0) 56endfunc 57 58func Test_assert_equal_dict() 59 call assert_equal(0, assert_equal(#{one: 1, two: 2}, #{two: 2, one: 1})) 60 61 call assert_equal(1, assert_equal(#{one: 1, two: 2}, #{two: 2, one: 3})) 62 call assert_match("Expected {'one': 1} but got {'one': 3} - 1 equal item omitted", v:errors[0]) 63 call remove(v:errors, 0) 64 65 call assert_equal(1, assert_equal(#{one: 1, two: 2}, #{two: 22, one: 11})) 66 call assert_match("Expected {'one': 1, 'two': 2} but got {'one': 11, 'two': 22}", v:errors[0]) 67 call remove(v:errors, 0) 68 69 call assert_equal(1, assert_equal(#{}, #{two: 2, one: 1})) 70 call assert_match("Expected {} but got {'one': 1, 'two': 2}", v:errors[0]) 71 call remove(v:errors, 0) 72 73 call assert_equal(1, assert_equal(#{two: 2, one: 1}, #{})) 74 call assert_match("Expected {'one': 1, 'two': 2} but got {}", v:errors[0]) 75 call remove(v:errors, 0) 76endfunc 77 78func Test_assert_equalfile() 79 call assert_equal(1, assert_equalfile('abcabc', 'xyzxyz')) 80 call assert_match("E485: Can't read file abcabc", v:errors[0]) 81 call remove(v:errors, 0) 82 83 let goodtext = ["one", "two", "three"] 84 call writefile(goodtext, 'Xone') 85 call assert_equal(1, 'Xone'->assert_equalfile('xyzxyz')) 86 call assert_match("E485: Can't read file xyzxyz", v:errors[0]) 87 call remove(v:errors, 0) 88 89 call writefile(goodtext, 'Xtwo') 90 call assert_equal(0, assert_equalfile('Xone', 'Xtwo')) 91 92 call writefile([goodtext[0]], 'Xone') 93 call assert_equal(1, assert_equalfile('Xone', 'Xtwo')) 94 call assert_match("first file is shorter", v:errors[0]) 95 call remove(v:errors, 0) 96 97 call writefile(goodtext, 'Xone') 98 call writefile([goodtext[0]], 'Xtwo') 99 call assert_equal(1, assert_equalfile('Xone', 'Xtwo')) 100 call assert_match("second file is shorter", v:errors[0]) 101 call remove(v:errors, 0) 102 103 call writefile(['1234X89'], 'Xone') 104 call writefile(['1234Y89'], 'Xtwo') 105 call assert_equal(1, assert_equalfile('Xone', 'Xtwo')) 106 call assert_match('difference at byte 4, line 1 after "1234X" vs "1234Y"', v:errors[0]) 107 call remove(v:errors, 0) 108 109 call writefile([repeat('x', 234) .. 'X'], 'Xone') 110 call writefile([repeat('x', 234) .. 'Y'], 'Xtwo') 111 call assert_equal(1, assert_equalfile('Xone', 'Xtwo')) 112 let xes = repeat('x', 134) 113 call assert_match('difference at byte 234, line 1 after "' .. xes .. 'X" vs "' .. xes .. 'Y"', v:errors[0]) 114 call remove(v:errors, 0) 115 116 call assert_equal(1, assert_equalfile('Xone', 'Xtwo', 'a message')) 117 call assert_match("a message: difference at byte 234, line 1 after", v:errors[0]) 118 call remove(v:errors, 0) 119 120 call delete('Xone') 121 call delete('Xtwo') 122endfunc 123 124func Test_assert_notequal() 125 let n = 4 126 call assert_equal(0, assert_notequal('foo', n)) 127 let s = 'foo' 128 call assert_equal(0, assert_notequal([1, 2, 3], s)) 129 130 call assert_equal(1, assert_notequal('foo', s)) 131 call assert_match("Expected not equal to 'foo'", v:errors[0]) 132 call remove(v:errors, 0) 133endfunc 134 135func Test_assert_report() 136 call assert_equal(1, assert_report('something is wrong')) 137 call assert_match('something is wrong', v:errors[0]) 138 call remove(v:errors, 0) 139 call assert_equal(1, 'also wrong'->assert_report()) 140 call assert_match('also wrong', v:errors[0]) 141 call remove(v:errors, 0) 142endfunc 143 144func Test_assert_exception() 145 try 146 nocommand 147 catch 148 call assert_equal(0, assert_exception('E492:')) 149 endtry 150 151 try 152 nocommand 153 catch 154 call assert_equal(1, assert_exception('E12345:')) 155 endtry 156 call assert_match("Expected 'E12345:' but got 'Vim:E492: ", v:errors[0]) 157 call remove(v:errors, 0) 158 159 try 160 nocommand 161 catch 162 try 163 " illegal argument, get NULL for error 164 call assert_equal(1, assert_exception([])) 165 catch 166 call assert_equal(0, assert_exception('E730:')) 167 endtry 168 endtry 169 170 call assert_equal(1, assert_exception('E492:')) 171 call assert_match('v:exception is not set', v:errors[0]) 172 call remove(v:errors, 0) 173endfunc 174 175func Test_wrong_error_type() 176 let save_verrors = v:errors 177 let v:['errors'] = {'foo': 3} 178 call assert_equal('yes', 'no') 179 let verrors = v:errors 180 let v:errors = save_verrors 181 call assert_equal(type([]), type(verrors)) 182endfunc 183 184func Test_compare_fail() 185 let s:v = {} 186 let s:x = {"a": s:v} 187 let s:v["b"] = s:x 188 let s:w = {"c": s:x, "d": ''} 189 try 190 call assert_equal(s:w, '') 191 catch 192 call assert_equal(0, assert_exception('E724:')) 193 call assert_match("Expected NULL but got ''", v:errors[0]) 194 call remove(v:errors, 0) 195 endtry 196endfunc 197 198func Test_match() 199 call assert_equal(0, assert_match('^f.*b.*r$', 'foobar')) 200 201 call assert_equal(1, assert_match('bar.*foo', 'foobar')) 202 call assert_match("Pattern 'bar.*foo' does not match 'foobar'", v:errors[0]) 203 call remove(v:errors, 0) 204 205 call assert_equal(1, assert_match('bar.*foo', 'foobar', 'wrong')) 206 call assert_match('wrong', v:errors[0]) 207 call remove(v:errors, 0) 208 209 call assert_equal(1, 'foobar'->assert_match('bar.*foo', 'wrong')) 210 call assert_match('wrong', v:errors[0]) 211 call remove(v:errors, 0) 212endfunc 213 214func Test_notmatch() 215 call assert_equal(0, assert_notmatch('foo', 'bar')) 216 call assert_equal(0, assert_notmatch('^foobar$', 'foobars')) 217 218 call assert_equal(1, assert_notmatch('foo', 'foobar')) 219 call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0]) 220 call remove(v:errors, 0) 221 222 call assert_equal(1, 'foobar'->assert_notmatch('foo')) 223 call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0]) 224 call remove(v:errors, 0) 225endfunc 226 227func Test_assert_fail_fails() 228 call assert_equal(1, assert_fails('xxx', 'E12345')) 229 call assert_match("Expected 'E12345' but got 'E492:", v:errors[0]) 230 call remove(v:errors, 0) 231 232 call assert_equal(1, assert_fails('xxx', 'E9876', 'stupid')) 233 call assert_match("stupid: Expected 'E9876' but got 'E492:", v:errors[0]) 234 call remove(v:errors, 0) 235 236 call assert_equal(1, assert_fails('xxx', ['E9876'])) 237 call assert_match("Expected \\['E9876'\\] but got 'E492:", v:errors[0]) 238 call remove(v:errors, 0) 239 240 call assert_equal(1, assert_fails('xxx', ['E492:', 'E9876'])) 241 call assert_match("Expected \\['E492:', 'E9876'\\] but got 'E492:", v:errors[0]) 242 call remove(v:errors, 0) 243 244 call assert_equal(1, assert_fails('echo', '', 'echo command')) 245 call assert_match("command did not fail: echo command", v:errors[0]) 246 call remove(v:errors, 0) 247 248 call assert_equal(1, 'echo'->assert_fails('', 'echo command')) 249 call assert_match("command did not fail: echo command", v:errors[0]) 250 call remove(v:errors, 0) 251 252 try 253 call assert_equal(1, assert_fails('xxx', [])) 254 catch 255 let exp = v:exception 256 endtry 257 call assert_match("E856: \"assert_fails()\" second argument", exp) 258 259 try 260 call assert_equal(1, assert_fails('xxx', ['1', '2', '3'])) 261 catch 262 let exp = v:exception 263 endtry 264 call assert_match("E856: \"assert_fails()\" second argument", exp) 265 266 try 267 call assert_equal(1, assert_fails('xxx', #{one: 1})) 268 catch 269 let exp = v:exception 270 endtry 271 call assert_match("E856: \"assert_fails()\" second argument", exp) 272 273 try 274 call assert_equal(1, assert_fails('xxx', 'E492', '', 'burp')) 275 catch 276 let exp = v:exception 277 endtry 278 call assert_match("E1115: \"assert_fails()\" fourth argument must be a number", exp) 279 280 try 281 call assert_equal(1, assert_fails('xxx', 'E492', '', 54, 123)) 282 catch 283 let exp = v:exception 284 endtry 285 call assert_match("E1116: \"assert_fails()\" fifth argument must be a string", exp) 286endfunc 287 288func Test_assert_fails_in_try_block() 289 try 290 call assert_equal(0, assert_fails('throw "error"')) 291 endtry 292endfunc 293 294func Test_assert_beeps() 295 new 296 call assert_equal(0, assert_beeps('normal h')) 297 298 call assert_equal(1, assert_beeps('normal 0')) 299 call assert_match("command did not beep: normal 0", v:errors[0]) 300 call remove(v:errors, 0) 301 302 call assert_equal(0, 'normal h'->assert_beeps()) 303 call assert_equal(1, 'normal 0'->assert_beeps()) 304 call assert_match("command did not beep: normal 0", v:errors[0]) 305 call remove(v:errors, 0) 306 307 bwipe 308endfunc 309 310func Test_assert_inrange() 311 call assert_equal(0, assert_inrange(7, 7, 7)) 312 call assert_equal(0, assert_inrange(5, 7, 5)) 313 call assert_equal(0, assert_inrange(5, 7, 6)) 314 call assert_equal(0, assert_inrange(5, 7, 7)) 315 316 call assert_equal(1, assert_inrange(5, 7, 4)) 317 call assert_match("Expected range 5 - 7, but got 4", v:errors[0]) 318 call remove(v:errors, 0) 319 call assert_equal(1, assert_inrange(5, 7, 8)) 320 call assert_match("Expected range 5 - 7, but got 8", v:errors[0]) 321 call remove(v:errors, 0) 322 323 call assert_equal(0, 5->assert_inrange(5, 7)) 324 call assert_equal(0, 7->assert_inrange(5, 7)) 325 call assert_equal(1, 8->assert_inrange(5, 7)) 326 call assert_match("Expected range 5 - 7, but got 8", v:errors[0]) 327 call remove(v:errors, 0) 328 329 call assert_fails('call assert_inrange(1, 1)', 'E119:') 330 331 if has('float') 332 call assert_equal(0, assert_inrange(7.0, 7, 7)) 333 call assert_equal(0, assert_inrange(7, 7.0, 7)) 334 call assert_equal(0, assert_inrange(7, 7, 7.0)) 335 call assert_equal(0, assert_inrange(5, 7, 5.0)) 336 call assert_equal(0, assert_inrange(5, 7, 6.0)) 337 call assert_equal(0, assert_inrange(5, 7, 7.0)) 338 339 call assert_equal(1, assert_inrange(5, 7, 4.0)) 340 call assert_match("Expected range 5.0 - 7.0, but got 4.0", v:errors[0]) 341 call remove(v:errors, 0) 342 call assert_equal(1, assert_inrange(5, 7, 8.0)) 343 call assert_match("Expected range 5.0 - 7.0, but got 8.0", v:errors[0]) 344 call remove(v:errors, 0) 345 endif 346endfunc 347 348func Test_assert_with_msg() 349 call assert_equal('foo', 'bar', 'testing') 350 call assert_match("testing: Expected 'foo' but got 'bar'", v:errors[0]) 351 call remove(v:errors, 0) 352endfunc 353 354func Test_override() 355 call test_override('char_avail', 1) 356 eval 1->test_override('redraw') 357 call test_override('ALL', 0) 358 call assert_fails("call test_override('xxx', 1)", 'E475:') 359 call assert_fails("call test_override('redraw', 'yes')", 'E474:') 360endfunc 361 362func Test_mouse_position() 363 let save_mouse = &mouse 364 set mouse=a 365 new 366 call setline(1, ['line one', 'line two']) 367 call assert_equal([0, 1, 1, 0], getpos('.')) 368 call test_setmouse(1, 5) 369 call feedkeys("\<LeftMouse>", "xt") 370 call assert_equal([0, 1, 5, 0], getpos('.')) 371 call test_setmouse(2, 20) 372 call feedkeys("\<LeftMouse>", "xt") 373 call assert_equal([0, 2, 8, 0], getpos('.')) 374 call test_setmouse(5, 1) 375 call feedkeys("\<LeftMouse>", "xt") 376 call assert_equal([0, 2, 1, 0], getpos('.')) 377 bwipe! 378 let &mouse = save_mouse 379endfunc 380 381func Test_user_is_happy() 382 smile 383 sleep 300m 384endfunc 385 386" Must be last. 387func Test_zz_quit_detected() 388 " Verify that if a test function ends Vim the test script detects this. 389 quit 390endfunc 391 392" vim: shiftwidth=2 sts=2 expandtab 393