1" Tests for various eval things. 2 3function s:foo() abort 4 try 5 return [] == 0 6 catch 7 return 1 8 endtry 9endfunction 10 11func Test_catch_return_with_error() 12 call assert_equal(1, s:foo()) 13endfunc 14 15func Test_nocatch_restore_silent_emsg() 16 silent! try 17 throw 1 18 catch 19 endtry 20 echoerr 'wrong' 21 let c1 = nr2char(screenchar(&lines, 1)) 22 let c2 = nr2char(screenchar(&lines, 2)) 23 let c3 = nr2char(screenchar(&lines, 3)) 24 let c4 = nr2char(screenchar(&lines, 4)) 25 let c5 = nr2char(screenchar(&lines, 5)) 26 call assert_equal('wrong', c1 . c2 . c3 . c4 . c5) 27endfunc 28 29func Test_mkdir_p() 30 call mkdir('Xmkdir/nested', 'p') 31 call assert_true(isdirectory('Xmkdir/nested')) 32 try 33 " Trying to make existing directories doesn't error 34 call mkdir('Xmkdir', 'p') 35 call mkdir('Xmkdir/nested', 'p') 36 catch /E739:/ 37 call assert_report('mkdir(..., "p") failed for an existing directory') 38 endtry 39 " 'p' doesn't suppress real errors 40 call writefile([], 'Xfile') 41 call assert_fails('call mkdir("Xfile", "p")', 'E739') 42 call delete('Xfile') 43 call delete('Xmkdir', 'rf') 44 call assert_equal(0, mkdir(test_null_string())) 45 call assert_fails('call mkdir([])', 'E730') 46 call assert_fails('call mkdir("abc", [], [])', 'E745') 47endfunc 48 49func Test_line_continuation() 50 let array = [5, 51 "\ ignore this 52 \ 6, 53 "\ more to ignore 54 "\ more moreto ignore 55 \ ] 56 "\ and some more 57 call assert_equal([5, 6], array) 58endfunc 59 60func Test_E963() 61 " These commands used to cause an internal error prior to vim 8.1.0563 62 let v_e = v:errors 63 let v_o = v:oldfiles 64 call assert_fails("let v:errors=''", 'E963:') 65 call assert_equal(v_e, v:errors) 66 call assert_fails("let v:oldfiles=''", 'E963:') 67 call assert_equal(v_o, v:oldfiles) 68endfunc 69 70func Test_for_invalid() 71 call assert_fails("for x in 99", 'E714:') 72 call assert_fails("for x in 'asdf'", 'E714:') 73 call assert_fails("for x in {'a': 9}", 'E714:') 74endfunc 75 76func Test_readfile_binary() 77 new 78 call setline(1, ['one', 'two', 'three']) 79 setlocal ff=dos 80 silent write XReadfile 81 let lines = 'XReadfile'->readfile() 82 call assert_equal(['one', 'two', 'three'], lines) 83 let lines = readfile('XReadfile', '', 2) 84 call assert_equal(['one', 'two'], lines) 85 let lines = readfile('XReadfile', 'b') 86 call assert_equal(["one\r", "two\r", "three\r", ""], lines) 87 let lines = readfile('XReadfile', 'b', 2) 88 call assert_equal(["one\r", "two\r"], lines) 89 90 bwipe! 91 call delete('XReadfile') 92endfunc 93 94func Test_let_errmsg() 95 call assert_fails('let v:errmsg = []', 'E730:') 96 let v:errmsg = '' 97 call assert_fails('let v:errmsg = []', 'E730:') 98 let v:errmsg = '' 99endfunc 100 101func Test_string_concatenation() 102 call assert_equal('ab', 'a'.'b') 103 call assert_equal('ab', 'a' .'b') 104 call assert_equal('ab', 'a'. 'b') 105 call assert_equal('ab', 'a' . 'b') 106 107 call assert_equal('ab', 'a'..'b') 108 call assert_equal('ab', 'a' ..'b') 109 call assert_equal('ab', 'a'.. 'b') 110 call assert_equal('ab', 'a' .. 'b') 111 112 let a = 'a' 113 let b = 'b' 114 let a .= b 115 call assert_equal('ab', a) 116 117 let a = 'a' 118 let a.=b 119 call assert_equal('ab', a) 120 121 let a = 'a' 122 let a ..= b 123 call assert_equal('ab', a) 124 125 let a = 'a' 126 let a..=b 127 call assert_equal('ab', a) 128endfunc 129 130" Test fix for issue #4507 131func Test_skip_after_throw() 132 try 133 throw 'something' 134 let x = wincol() || &ts 135 catch /something/ 136 endtry 137endfunc 138 139scriptversion 2 140func Test_string_concat_scriptversion2() 141 call assert_true(has('vimscript-2')) 142 let a = 'a' 143 let b = 'b' 144 145 call assert_fails('echo a . b', 'E15:') 146 call assert_fails('let a .= b', 'E985:') 147 call assert_fails('let vers = 1.2.3', 'E15:') 148 149 if has('float') 150 let f = .5 151 call assert_equal(0.5, f) 152 endif 153endfunc 154 155scriptversion 1 156func Test_string_concat_scriptversion1() 157 call assert_true(has('vimscript-1')) 158 let a = 'a' 159 let b = 'b' 160 161 echo a . b 162 let a .= b 163 let vers = 1.2.3 164 call assert_equal('123', vers) 165 166 if has('float') 167 call assert_fails('let f = .5', 'E15:') 168 endif 169endfunc 170 171scriptversion 3 172func Test_vvar_scriptversion3() 173 call assert_true(has('vimscript-3')) 174 call assert_fails('echo version', 'E121:') 175 call assert_false(exists('version')) 176 let version = 1 177 call assert_equal(1, version) 178endfunc 179 180scriptversion 2 181func Test_vvar_scriptversion2() 182 call assert_true(exists('version')) 183 echo version 184 call assert_fails('let version = 1', 'E46:') 185 call assert_equal(v:version, version) 186 187 call assert_equal(v:version, v:versionlong / 10000) 188 call assert_true(v:versionlong > 8011525) 189endfunc 190 191func Test_dict_access_scriptversion2() 192 let l:x = {'foo': 1} 193 194 call assert_false(0 && l:x.foo) 195 call assert_true(1 && l:x.foo) 196endfunc 197 198scriptversion 4 199func Test_vvar_scriptversion4() 200 call assert_true(has('vimscript-4')) 201 call assert_equal(17, 017) 202 call assert_equal(18, 018) 203 call assert_equal(64, 0b1'00'00'00) 204 call assert_equal(1048576, 0x10'00'00) 205 call assert_equal(1000000, 1'000'000) 206 call assert_equal("1234", execute("echo 1'234")->trim()) 207 call assert_equal('1 234', execute("echo 1''234")->trim()) 208 call assert_fails("echo 1'''234", 'E115:') 209endfunc 210 211scriptversion 1 212func Test_vvar_scriptversion1() 213 call assert_equal(15, 017) 214 call assert_equal(18, 018) 215endfunc 216 217func Test_scriptversion_fail() 218 call writefile(['scriptversion 9'], 'Xversionscript') 219 call assert_fails('source Xversionscript', 'E999:') 220 call delete('Xversionscript') 221endfunc 222 223func Test_execute_cmd_with_null() 224 call assert_fails('execute test_null_list()', 'E730:') 225 call assert_fails('execute test_null_dict()', 'E731:') 226 call assert_fails('execute test_null_blob()', 'E976:') 227 execute test_null_string() 228 call assert_fails('execute test_null_partial()', 'E729:') 229 call assert_fails('execute test_unknown()', 'E908:') 230 if has('job') 231 call assert_fails('execute test_null_job()', 'E908:') 232 call assert_fails('execute test_null_channel()', 'E908:') 233 endif 234endfunc 235 236func Test_numbersize() 237 " This will fail on systems without 64 bit int support or when not configured 238 " correctly. 239 call assert_equal(64, v:numbersize) 240endfunc 241 242func Assert_reg(name, type, value, valuestr, expr, exprstr) 243 call assert_equal(a:type, getregtype(a:name)) 244 call assert_equal(a:value, getreg(a:name)) 245 call assert_equal(a:valuestr, string(getreg(a:name, 0, 1))) 246 call assert_equal(a:expr, getreg(a:name, 1)) 247 call assert_equal(a:exprstr, string(getreg(a:name, 1, 1))) 248endfunc 249 250func Test_let_register() 251 let @" = 'abc' 252 call Assert_reg('"', 'v', "abc", "['abc']", "abc", "['abc']") 253 let @" = "abc\n" 254 call Assert_reg('"', 'V', "abc\n", "['abc']", "abc\n", "['abc']") 255 let @" = "abc\<C-m>" 256 call Assert_reg('"', 'V', "abc\r\n", "['abc\r']", "abc\r\n", "['abc\r']") 257 let @= = '"abc"' 258 call Assert_reg('=', 'v', "abc", "['abc']", '"abc"', "['\"abc\"']") 259endfunc 260 261func Assert_regput(name, result) 262 new 263 execute "silent normal! o==\n==\e\"" . a:name . "P" 264 call assert_equal(a:result, getline(2, line('$'))) 265 bwipe! 266endfunc 267 268func Test_setreg_basic() 269 call setreg('a', 'abcA', 'c') 270 call Assert_reg('a', 'v', "abcA", "['abcA']", "abcA", "['abcA']") 271 call Assert_regput('a', ['==', '=abcA=']) 272 273 call setreg('A', 'abcAc', 'c') 274 call Assert_reg('A', 'v', "abcAabcAc", "['abcAabcAc']", "abcAabcAc", "['abcAabcAc']") 275 call Assert_regput('a', ['==', '=abcAabcAc=']) 276 277 call setreg('A', 'abcAl', 'l') 278 call Assert_reg('A', 'V', "abcAabcAcabcAl\n", "['abcAabcAcabcAl']", "abcAabcAcabcAl\n", "['abcAabcAcabcAl']") 279 call Assert_regput('a', ['==', 'abcAabcAcabcAl', '==']) 280 281 call setreg('A', 'abcAc2','c') 282 call Assert_reg('A', 'v', "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']", "abcAabcAcabcAl\nabcAc2", "['abcAabcAcabcAl', 'abcAc2']") 283 call Assert_regput('a', ['==', '=abcAabcAcabcAl', 'abcAc2=']) 284 285 call setreg('b', 'abcB', 'v') 286 call Assert_reg('b', 'v', "abcB", "['abcB']", "abcB", "['abcB']") 287 call Assert_regput('b', ['==', '=abcB=']) 288 289 call setreg('b', 'abcBc', 'ca') 290 call Assert_reg('b', 'v', "abcBabcBc", "['abcBabcBc']", "abcBabcBc", "['abcBabcBc']") 291 call Assert_regput('b', ['==', '=abcBabcBc=']) 292 293 call setreg('b', 'abcBb', 'ba') 294 call Assert_reg('b', "\<C-V>5", "abcBabcBcabcBb", "['abcBabcBcabcBb']", "abcBabcBcabcBb", "['abcBabcBcabcBb']") 295 call Assert_regput('b', ['==', '=abcBabcBcabcBb=']) 296 297 call setreg('b', 'abcBc2','ca') 298 call Assert_reg('b', "v", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']", "abcBabcBcabcBb\nabcBc2", "['abcBabcBcabcBb', 'abcBc2']") 299 call Assert_regput('b', ['==', '=abcBabcBcabcBb', 'abcBc2=']) 300 301 call setreg('b', 'abcBb2','b50a') 302 call Assert_reg('b', "\<C-V>50", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']", "abcBabcBcabcBb\nabcBc2abcBb2", "['abcBabcBcabcBb', 'abcBc2abcBb2']") 303 call Assert_regput('b', ['==', '=abcBabcBcabcBb =', ' abcBc2abcBb2']) 304 305 call setreg('c', 'abcC', 'l') 306 call Assert_reg('c', 'V', "abcC\n", "['abcC']", "abcC\n", "['abcC']") 307 call Assert_regput('c', ['==', 'abcC', '==']) 308 309 call setreg('C', 'abcCl', 'l') 310 call Assert_reg('C', 'V', "abcC\nabcCl\n", "['abcC', 'abcCl']", "abcC\nabcCl\n", "['abcC', 'abcCl']") 311 call Assert_regput('c', ['==', 'abcC', 'abcCl', '==']) 312 313 call setreg('C', 'abcCc', 'c') 314 call Assert_reg('C', 'v', "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']", "abcC\nabcCl\nabcCc", "['abcC', 'abcCl', 'abcCc']") 315 call Assert_regput('c', ['==', '=abcC', 'abcCl', 'abcCc=']) 316 317 call setreg('d', 'abcD', 'V') 318 call Assert_reg('d', 'V', "abcD\n", "['abcD']", "abcD\n", "['abcD']") 319 call Assert_regput('d', ['==', 'abcD', '==']) 320 321 call setreg('D', 'abcDb', 'b') 322 call Assert_reg('d', "\<C-V>5", "abcD\nabcDb", "['abcD', 'abcDb']", "abcD\nabcDb", "['abcD', 'abcDb']") 323 call Assert_regput('d', ['==', '=abcD =', ' abcDb']) 324 325 call setreg('e', 'abcE', 'b') 326 call Assert_reg('e', "\<C-V>4", "abcE", "['abcE']", "abcE", "['abcE']") 327 call Assert_regput('e', ['==', '=abcE=']) 328 329 call setreg('E', 'abcEb', 'b') 330 call Assert_reg('E', "\<C-V>5", "abcE\nabcEb", "['abcE', 'abcEb']", "abcE\nabcEb", "['abcE', 'abcEb']") 331 call Assert_regput('e', ['==', '=abcE =', ' abcEb']) 332 333 call setreg('E', 'abcEl', 'l') 334 call Assert_reg('E', "V", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']", "abcE\nabcEb\nabcEl\n", "['abcE', 'abcEb', 'abcEl']") 335 call Assert_regput('e', ['==', 'abcE', 'abcEb', 'abcEl', '==']) 336 337 call setreg('f', 'abcF', "\<C-v>") 338 call Assert_reg('f', "\<C-V>4", "abcF", "['abcF']", "abcF", "['abcF']") 339 call Assert_regput('f', ['==', '=abcF=']) 340 341 call setreg('F', 'abcFc', 'c') 342 call Assert_reg('F', "v", "abcF\nabcFc", "['abcF', 'abcFc']", "abcF\nabcFc", "['abcF', 'abcFc']") 343 call Assert_regput('f', ['==', '=abcF', 'abcFc=']) 344 345 call setreg('g', 'abcG', 'b10') 346 call Assert_reg('g', "\<C-V>10", "abcG", "['abcG']", "abcG", "['abcG']") 347 call Assert_regput('g', ['==', '=abcG =']) 348 349 call setreg('h', 'abcH', "\<C-v>10") 350 call Assert_reg('h', "\<C-V>10", "abcH", "['abcH']", "abcH", "['abcH']") 351 call Assert_regput('h', ['==', '=abcH =']) 352 353 call setreg('I', 'abcI') 354 call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']") 355 call Assert_regput('I', ['==', '=abcI=']) 356 357 " Error cases 358 call assert_fails('call setreg()', 'E119:') 359 call assert_fails('call setreg(1)', 'E119:') 360 call assert_fails('call setreg(1, 2, 3, 4)', 'E118:') 361 call assert_fails('call setreg([], 2)', 'E730:') 362 call assert_fails('call setreg(1, {})', 'E731:') 363 call assert_fails('call setreg(1, 2, [])', 'E730:') 364 call assert_fails('call setreg("/", ["1", "2"])', 'E883:') 365 call assert_fails('call setreg("=", ["1", "2"])', 'E883:') 366 call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:') 367endfunc 368 369" vim: shiftwidth=2 sts=2 expandtab 370