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