comparison src/testdir/test_vim9_expr.vim @ 20170:0612c64a2b87 v8.2.0640

patch 8.2.0640: Vim9: expanding does not work Commit: https://github.com/vim/vim/commit/cfe435d7feacf123ac060747b885f7c4328062ea Author: Bram Moolenaar <Bram@vim.org> Date: Sat Apr 25 20:02:55 2020 +0200 patch 8.2.0640: Vim9: expanding does not work Problem: Vim9: expanding does not work. Solution: Find wildcards in not compiled commands. Reorganize test files.
author Bram Moolenaar <Bram@vim.org>
date Sat, 25 Apr 2020 20:15:03 +0200
parents 7fc5d62fe2a5
children 63cc54100ae4
comparison
equal deleted inserted replaced
20169:bd970e6fa5d4 20170:0612c64a2b87
1 " Tests for Vim9 script expressions 1 " Tests for Vim9 script expressions
2 2
3 source check.vim 3 source check.vim
4 4 source vim9.vim
5 " Check that "line" inside ":def" results in an "error" message.
6 func CheckDefFailure(line, error)
7 call writefile(['def! Func()', a:line, 'enddef'], 'Xdef')
8 call assert_fails('so Xdef', a:error, a:line)
9 call delete('Xdef')
10 endfunc
11
12 func CheckDefFailureMult(lines, error)
13 call writefile(['def! Func()'] + a:lines + ['enddef'], 'Xdef')
14 call assert_fails('so Xdef', a:error, join(a:lines, ' | '))
15 call delete('Xdef')
16 endfunc
17
18 " Check that "line" inside ":def" results in an "error" message when executed.
19 func CheckDefExecFailure(line, error)
20 call writefile(['def! Func()', a:line, 'enddef'], 'Xdef')
21 so Xdef
22 call assert_fails('call Func()', a:error, a:line)
23 call delete('Xdef')
24 endfunc
25
26 func CheckDefFailureList(lines, error)
27 call writefile(['def! Func()'] + a:lines + ['enddef'], 'Xdef')
28 call assert_fails('so Xdef', a:error, string(a:lines))
29 call delete('Xdef')
30 endfunc
31 5
32 " test cond ? expr : expr 6 " test cond ? expr : expr
33 def Test_expr1() 7 def Test_expr1()
34 assert_equal('one', true ? 'one' : 'two') 8 assert_equal('one', true ? 'one' : 'two')
35 assert_equal('one', 1 ? 9 assert_equal('one', 1 ?
57 var = 0 31 var = 0
58 assert_equal('two', var ? 'one' : 'two') 32 assert_equal('two', var ? 'one' : 'two')
59 enddef 33 enddef
60 34
61 func Test_expr1_fails() 35 func Test_expr1_fails()
62 call CheckDefFailure("let x = 1 ? 'one'", "Missing ':' after '?'") 36 call CheckDefFailure(["let x = 1 ? 'one'"], "Missing ':' after '?'")
63 call CheckDefFailure("let x = 1 ? 'one' : xxx", "E1001:") 37 call CheckDefFailure(["let x = 1 ? 'one' : xxx"], "E1001:")
64 38
65 let msg = "white space required before and after '?'" 39 let msg = "white space required before and after '?'"
66 call CheckDefFailure("let x = 1? 'one' : 'two'", msg) 40 call CheckDefFailure(["let x = 1? 'one' : 'two'"], msg)
67 call CheckDefFailure("let x = 1 ?'one' : 'two'", msg) 41 call CheckDefFailure(["let x = 1 ?'one' : 'two'"], msg)
68 call CheckDefFailure("let x = 1?'one' : 'two'", msg) 42 call CheckDefFailure(["let x = 1?'one' : 'two'"], msg)
69 43
70 let msg = "white space required before and after ':'" 44 let msg = "white space required before and after ':'"
71 call CheckDefFailure("let x = 1 ? 'one': 'two'", msg) 45 call CheckDefFailure(["let x = 1 ? 'one': 'two'"], msg)
72 call CheckDefFailure("let x = 1 ? 'one' :'two'", msg) 46 call CheckDefFailure(["let x = 1 ? 'one' :'two'"], msg)
73 call CheckDefFailure("let x = 1 ? 'one':'two'", msg) 47 call CheckDefFailure(["let x = 1 ? 'one':'two'"], msg)
74 endfunc 48 endfunc
75 49
76 " TODO: define inside test function 50 " TODO: define inside test function
77 def Record(val: any): any 51 def Record(val: any): any
78 g:vals->add(val) 52 g:vals->add(val)
105 assert_equal([[], '', 0], g:vals) 79 assert_equal([[], '', 0], g:vals)
106 enddef 80 enddef
107 81
108 func Test_expr2_fails() 82 func Test_expr2_fails()
109 let msg = "white space required before and after '||'" 83 let msg = "white space required before and after '||'"
110 call CheckDefFailure("let x = 1||2", msg) 84 call CheckDefFailure(["let x = 1||2"], msg)
111 call CheckDefFailure("let x = 1 ||2", msg) 85 call CheckDefFailure(["let x = 1 ||2"], msg)
112 call CheckDefFailure("let x = 1|| 2", msg) 86 call CheckDefFailure(["let x = 1|| 2"], msg)
113 87
114 call CheckDefFailure("let x = 1 || xxx", 'E1001:') 88 call CheckDefFailure(["let x = 1 || xxx"], 'E1001:')
115 endfunc 89 endfunc
116 90
117 " test && 91 " test &&
118 def Test_expr3() 92 def Test_expr3()
119 assert_equal(0, 2 && 0) 93 assert_equal(0, 2 && 0)
146 assert_equal([[1], 'z', 0], g:vals) 120 assert_equal([[1], 'z', 0], g:vals)
147 enddef 121 enddef
148 122
149 func Test_expr3_fails() 123 func Test_expr3_fails()
150 let msg = "white space required before and after '&&'" 124 let msg = "white space required before and after '&&'"
151 call CheckDefFailure("let x = 1&&2", msg) 125 call CheckDefFailure(["let x = 1&&2"], msg)
152 call CheckDefFailure("let x = 1 &&2", msg) 126 call CheckDefFailure(["let x = 1 &&2"], msg)
153 call CheckDefFailure("let x = 1&& 2", msg) 127 call CheckDefFailure(["let x = 1&& 2"], msg)
154 endfunc 128 endfunc
155 129
156 let atrue = v:true 130 let atrue = v:true
157 let afalse = v:false 131 let afalse = v:false
158 let anone = v:none 132 let anone = v:none
210 set ignorecase 184 set ignorecase
211 assert_equal(false, 'abc' == 'ABC') 185 assert_equal(false, 'abc' == 'ABC')
212 assert_equal(false, 'abc' ==# 'ABC') 186 assert_equal(false, 'abc' ==# 'ABC')
213 set noignorecase 187 set noignorecase
214 188
215 call CheckDefFailure("let x = 'a' == xxx", 'E1001:') 189 call CheckDefFailure(["let x = 'a' == xxx"], 'E1001:')
216 190
217 assert_equal(true, 0z3f == 0z3f) 191 assert_equal(true, 0z3f == 0z3f)
218 assert_equal(false, 0z3f == 0z4f) 192 assert_equal(false, 0z3f == 0z4f)
219 assert_equal(true, g:ablob == 0z01ab) 193 assert_equal(true, g:ablob == 0z01ab)
220 assert_equal(false, 0z3f == g:ablob) 194 assert_equal(false, 0z3f == g:ablob)
411 let x = 1 385 let x = 1
412 enddef 386 enddef
413 387
414 func Test_expr4_fails() 388 func Test_expr4_fails()
415 let msg = "white space required before and after '>'" 389 let msg = "white space required before and after '>'"
416 call CheckDefFailure("let x = 1>2", msg) 390 call CheckDefFailure(["let x = 1>2"], msg)
417 call CheckDefFailure("let x = 1 >2", msg) 391 call CheckDefFailure(["let x = 1 >2"], msg)
418 call CheckDefFailure("let x = 1> 2", msg) 392 call CheckDefFailure(["let x = 1> 2"], msg)
419 393
420 let msg = "white space required before and after '=='" 394 let msg = "white space required before and after '=='"
421 call CheckDefFailure("let x = 1==2", msg) 395 call CheckDefFailure(["let x = 1==2"], msg)
422 call CheckDefFailure("let x = 1 ==2", msg) 396 call CheckDefFailure(["let x = 1 ==2"], msg)
423 call CheckDefFailure("let x = 1== 2", msg) 397 call CheckDefFailure(["let x = 1== 2"], msg)
424 398
425 let msg = "white space required before and after 'is'" 399 let msg = "white space required before and after 'is'"
426 call CheckDefFailure("let x = '1'is'2'", msg) 400 call CheckDefFailure(["let x = '1'is'2'"], msg)
427 call CheckDefFailure("let x = '1' is'2'", msg) 401 call CheckDefFailure(["let x = '1' is'2'"], msg)
428 call CheckDefFailure("let x = '1'is '2'", msg) 402 call CheckDefFailure(["let x = '1'is '2'"], msg)
429 403
430 let msg = "white space required before and after 'isnot'" 404 let msg = "white space required before and after 'isnot'"
431 call CheckDefFailure("let x = '1'isnot'2'", msg) 405 call CheckDefFailure(["let x = '1'isnot'2'"], msg)
432 call CheckDefFailure("let x = '1' isnot'2'", msg) 406 call CheckDefFailure(["let x = '1' isnot'2'"], msg)
433 call CheckDefFailure("let x = '1'isnot '2'", msg) 407 call CheckDefFailure(["let x = '1'isnot '2'"], msg)
434 408
435 call CheckDefFailure("let x = 1 is# 2", 'E15:') 409 call CheckDefFailure(["let x = 1 is# 2"], 'E15:')
436 call CheckDefFailure("let x = 1 is? 2", 'E15:') 410 call CheckDefFailure(["let x = 1 is? 2"], 'E15:')
437 call CheckDefFailure("let x = 1 isnot# 2", 'E15:') 411 call CheckDefFailure(["let x = 1 isnot# 2"], 'E15:')
438 call CheckDefFailure("let x = 1 isnot? 2", 'E15:') 412 call CheckDefFailure(["let x = 1 isnot? 2"], 'E15:')
439 413
440 call CheckDefFailure("let x = 1 == '2'", 'Cannot compare number with string') 414 call CheckDefFailure(["let x = 1 == '2'"], 'Cannot compare number with string')
441 call CheckDefFailure("let x = '1' == 2", 'Cannot compare string with number') 415 call CheckDefFailure(["let x = '1' == 2"], 'Cannot compare string with number')
442 call CheckDefFailure("let x = 1 == RetVoid()", 'Cannot use void value') 416 call CheckDefFailure(["let x = 1 == RetVoid()"], 'Cannot use void value')
443 call CheckDefFailure("let x = RetVoid() == 1", 'Cannot compare void with number') 417 call CheckDefFailure(["let x = RetVoid() == 1"], 'Cannot compare void with number')
444 418
445 call CheckDefFailure("let x = true > false", 'Cannot compare bool with bool') 419 call CheckDefFailure(["let x = true > false"], 'Cannot compare bool with bool')
446 call CheckDefFailure("let x = true >= false", 'Cannot compare bool with bool') 420 call CheckDefFailure(["let x = true >= false"], 'Cannot compare bool with bool')
447 call CheckDefFailure("let x = true < false", 'Cannot compare bool with bool') 421 call CheckDefFailure(["let x = true < false"], 'Cannot compare bool with bool')
448 call CheckDefFailure("let x = true <= false", 'Cannot compare bool with bool') 422 call CheckDefFailure(["let x = true <= false"], 'Cannot compare bool with bool')
449 call CheckDefFailure("let x = true =~ false", 'Cannot compare bool with bool') 423 call CheckDefFailure(["let x = true =~ false"], 'Cannot compare bool with bool')
450 call CheckDefFailure("let x = true !~ false", 'Cannot compare bool with bool') 424 call CheckDefFailure(["let x = true !~ false"], 'Cannot compare bool with bool')
451 call CheckDefFailure("let x = true is false", 'Cannot use "is" with bool') 425 call CheckDefFailure(["let x = true is false"], 'Cannot use "is" with bool')
452 call CheckDefFailure("let x = true isnot false", 'Cannot use "isnot" with bool') 426 call CheckDefFailure(["let x = true isnot false"], 'Cannot use "isnot" with bool')
453 427
454 call CheckDefFailure("let x = v:none is v:null", 'Cannot use "is" with special') 428 call CheckDefFailure(["let x = v:none is v:null"], 'Cannot use "is" with special')
455 call CheckDefFailure("let x = v:none isnot v:null", 'Cannot use "isnot" with special') 429 call CheckDefFailure(["let x = v:none isnot v:null"], 'Cannot use "isnot" with special')
456 call CheckDefFailure("let x = 123 is 123", 'Cannot use "is" with number') 430 call CheckDefFailure(["let x = 123 is 123"], 'Cannot use "is" with number')
457 call CheckDefFailure("let x = 123 isnot 123", 'Cannot use "isnot" with number') 431 call CheckDefFailure(["let x = 123 isnot 123"], 'Cannot use "isnot" with number')
458 if has('float') 432 if has('float')
459 call CheckDefFailure("let x = 1.3 is 1.3", 'Cannot use "is" with float') 433 call CheckDefFailure(["let x = 1.3 is 1.3"], 'Cannot use "is" with float')
460 call CheckDefFailure("let x = 1.3 isnot 1.3", 'Cannot use "isnot" with float') 434 call CheckDefFailure(["let x = 1.3 isnot 1.3"], 'Cannot use "isnot" with float')
461 endif 435 endif
462 436
463 call CheckDefFailure("let x = 0za1 > 0z34", 'Cannot compare blob with blob') 437 call CheckDefFailure(["let x = 0za1 > 0z34"], 'Cannot compare blob with blob')
464 call CheckDefFailure("let x = 0za1 >= 0z34", 'Cannot compare blob with blob') 438 call CheckDefFailure(["let x = 0za1 >= 0z34"], 'Cannot compare blob with blob')
465 call CheckDefFailure("let x = 0za1 < 0z34", 'Cannot compare blob with blob') 439 call CheckDefFailure(["let x = 0za1 < 0z34"], 'Cannot compare blob with blob')
466 call CheckDefFailure("let x = 0za1 <= 0z34", 'Cannot compare blob with blob') 440 call CheckDefFailure(["let x = 0za1 <= 0z34"], 'Cannot compare blob with blob')
467 call CheckDefFailure("let x = 0za1 =~ 0z34", 'Cannot compare blob with blob') 441 call CheckDefFailure(["let x = 0za1 =~ 0z34"], 'Cannot compare blob with blob')
468 call CheckDefFailure("let x = 0za1 !~ 0z34", 'Cannot compare blob with blob') 442 call CheckDefFailure(["let x = 0za1 !~ 0z34"], 'Cannot compare blob with blob')
469 443
470 call CheckDefFailure("let x = [13] > [88]", 'Cannot compare list with list') 444 call CheckDefFailure(["let x = [13] > [88]"], 'Cannot compare list with list')
471 call CheckDefFailure("let x = [13] >= [88]", 'Cannot compare list with list') 445 call CheckDefFailure(["let x = [13] >= [88]"], 'Cannot compare list with list')
472 call CheckDefFailure("let x = [13] < [88]", 'Cannot compare list with list') 446 call CheckDefFailure(["let x = [13] < [88]"], 'Cannot compare list with list')
473 call CheckDefFailure("let x = [13] <= [88]", 'Cannot compare list with list') 447 call CheckDefFailure(["let x = [13] <= [88]"], 'Cannot compare list with list')
474 call CheckDefFailure("let x = [13] =~ [88]", 'Cannot compare list with list') 448 call CheckDefFailure(["let x = [13] =~ [88]"], 'Cannot compare list with list')
475 call CheckDefFailure("let x = [13] !~ [88]", 'Cannot compare list with list') 449 call CheckDefFailure(["let x = [13] !~ [88]"], 'Cannot compare list with list')
476 450
477 call CheckDefFailureMult(['let j: job', 'let chan: channel', 'let r = j == chan'], 'Cannot compare job with channel') 451 call CheckDefFailure(['let j: job', 'let chan: channel', 'let r = j == chan'], 'Cannot compare job with channel')
478 call CheckDefFailureMult(['let j: job', 'let x: list<any>', 'let r = j == x'], 'Cannot compare job with list') 452 call CheckDefFailure(['let j: job', 'let x: list<any>', 'let r = j == x'], 'Cannot compare job with list')
479 call CheckDefFailureMult(['let j: job', 'let Xx: func', 'let r = j == Xx'], 'Cannot compare job with func') 453 call CheckDefFailure(['let j: job', 'let Xx: func', 'let r = j == Xx'], 'Cannot compare job with func')
480 call CheckDefFailureMult(['let j: job', 'let Xx: func', 'let r = j == Xx'], 'Cannot compare job with func') 454 call CheckDefFailure(['let j: job', 'let Xx: func', 'let r = j == Xx'], 'Cannot compare job with func')
481 endfunc 455 endfunc
482 456
483 " test addition, subtraction, concatenation 457 " test addition, subtraction, concatenation
484 def Test_expr5() 458 def Test_expr5()
485 assert_equal(66, 60 + 6) 459 assert_equal(66, 60 + 6)
530 endif 504 endif
531 enddef 505 enddef
532 506
533 func Test_expr5_fails() 507 func Test_expr5_fails()
534 let msg = "white space required before and after '+'" 508 let msg = "white space required before and after '+'"
535 call CheckDefFailure("let x = 1+2", msg) 509 call CheckDefFailure(["let x = 1+2"], msg)
536 call CheckDefFailure("let x = 1 +2", msg) 510 call CheckDefFailure(["let x = 1 +2"], msg)
537 call CheckDefFailure("let x = 1+ 2", msg) 511 call CheckDefFailure(["let x = 1+ 2"], msg)
538 512
539 let msg = "white space required before and after '-'" 513 let msg = "white space required before and after '-'"
540 call CheckDefFailure("let x = 1-2", msg) 514 call CheckDefFailure(["let x = 1-2"], msg)
541 call CheckDefFailure("let x = 1 -2", msg) 515 call CheckDefFailure(["let x = 1 -2"], msg)
542 call CheckDefFailure("let x = 1- 2", msg) 516 call CheckDefFailure(["let x = 1- 2"], msg)
543 517
544 let msg = "white space required before and after '..'" 518 let msg = "white space required before and after '..'"
545 call CheckDefFailure("let x = '1'..'2'", msg) 519 call CheckDefFailure(["let x = '1'..'2'"], msg)
546 call CheckDefFailure("let x = '1' ..'2'", msg) 520 call CheckDefFailure(["let x = '1' ..'2'"], msg)
547 call CheckDefFailure("let x = '1'.. '2'", msg) 521 call CheckDefFailure(["let x = '1'.. '2'"], msg)
548 522
549 call CheckDefFailure("let x = 0z1122 + 33", 'E1035') 523 call CheckDefFailure(["let x = 0z1122 + 33"], 'E1035')
550 call CheckDefFailure("let x = 0z1122 + [3]", 'E1035') 524 call CheckDefFailure(["let x = 0z1122 + [3]"], 'E1035')
551 call CheckDefFailure("let x = 0z1122 + 'asd'", 'E1035') 525 call CheckDefFailure(["let x = 0z1122 + 'asd'"], 'E1035')
552 call CheckDefFailure("let x = 33 + 0z1122", 'E1035') 526 call CheckDefFailure(["let x = 33 + 0z1122"], 'E1035')
553 call CheckDefFailure("let x = [3] + 0z1122", 'E1035') 527 call CheckDefFailure(["let x = [3] + 0z1122"], 'E1035')
554 call CheckDefFailure("let x = 'asdf' + 0z1122", 'E1035') 528 call CheckDefFailure(["let x = 'asdf' + 0z1122"], 'E1035')
555 call CheckDefFailure("let x = 6 + xxx", 'E1001') 529 call CheckDefFailure(["let x = 6 + xxx"], 'E1001')
556 endfunc 530 endfunc
557 531
558 " test multiply, divide, modulo 532 " test multiply, divide, modulo
559 def Test_expr6() 533 def Test_expr6()
560 assert_equal(36, 6 * 6) 534 assert_equal(36, 6 * 6)
586 let yf = [3.0] 560 let yf = [3.0]
587 assert_equal(5.0, xf[0] + yf[0]) 561 assert_equal(5.0, xf[0] + yf[0])
588 assert_equal(6.0, xf[0] * yf[0]) 562 assert_equal(6.0, xf[0] * yf[0])
589 endif 563 endif
590 564
591 call CheckDefFailure("let x = 6 * xxx", 'E1001') 565 call CheckDefFailure(["let x = 6 * xxx"], 'E1001')
592 enddef 566 enddef
593 567
594 def Test_expr6_float() 568 def Test_expr6_float()
595 if !has('float') 569 if !has('float')
596 MissingFeature 'float' 570 MissingFeature 'float'
621 endif 595 endif
622 enddef 596 enddef
623 597
624 func Test_expr6_fails() 598 func Test_expr6_fails()
625 let msg = "white space required before and after '*'" 599 let msg = "white space required before and after '*'"
626 call CheckDefFailure("let x = 1*2", msg) 600 call CheckDefFailure(["let x = 1*2"], msg)
627 call CheckDefFailure("let x = 1 *2", msg) 601 call CheckDefFailure(["let x = 1 *2"], msg)
628 call CheckDefFailure("let x = 1* 2", msg) 602 call CheckDefFailure(["let x = 1* 2"], msg)
629 603
630 let msg = "white space required before and after '/'" 604 let msg = "white space required before and after '/'"
631 call CheckDefFailure("let x = 1/2", msg) 605 call CheckDefFailure(["let x = 1/2"], msg)
632 call CheckDefFailure("let x = 1 /2", msg) 606 call CheckDefFailure(["let x = 1 /2"], msg)
633 call CheckDefFailure("let x = 1/ 2", msg) 607 call CheckDefFailure(["let x = 1/ 2"], msg)
634 608
635 let msg = "white space required before and after '%'" 609 let msg = "white space required before and after '%'"
636 call CheckDefFailure("let x = 1%2", msg) 610 call CheckDefFailure(["let x = 1%2"], msg)
637 call CheckDefFailure("let x = 1 %2", msg) 611 call CheckDefFailure(["let x = 1 %2"], msg)
638 call CheckDefFailure("let x = 1% 2", msg) 612 call CheckDefFailure(["let x = 1% 2"], msg)
639 613
640 call CheckDefFailure("let x = '1' * '2'", 'E1036:') 614 call CheckDefFailure(["let x = '1' * '2'"], 'E1036:')
641 call CheckDefFailure("let x = '1' / '2'", 'E1036:') 615 call CheckDefFailure(["let x = '1' / '2'"], 'E1036:')
642 call CheckDefFailure("let x = '1' % '2'", 'E1035:') 616 call CheckDefFailure(["let x = '1' % '2'"], 'E1035:')
643 617
644 call CheckDefFailure("let x = 0z01 * 0z12", 'E1036:') 618 call CheckDefFailure(["let x = 0z01 * 0z12"], 'E1036:')
645 call CheckDefFailure("let x = 0z01 / 0z12", 'E1036:') 619 call CheckDefFailure(["let x = 0z01 / 0z12"], 'E1036:')
646 call CheckDefFailure("let x = 0z01 % 0z12", 'E1035:') 620 call CheckDefFailure(["let x = 0z01 % 0z12"], 'E1035:')
647 621
648 call CheckDefFailure("let x = [1] * [2]", 'E1036:') 622 call CheckDefFailure(["let x = [1] * [2]"], 'E1036:')
649 call CheckDefFailure("let x = [1] / [2]", 'E1036:') 623 call CheckDefFailure(["let x = [1] / [2]"], 'E1036:')
650 call CheckDefFailure("let x = [1] % [2]", 'E1035:') 624 call CheckDefFailure(["let x = [1] % [2]"], 'E1035:')
651 625
652 call CheckDefFailure("let x = #{one: 1} * #{two: 2}", 'E1036:') 626 call CheckDefFailure(["let x = #{one: 1} * #{two: 2}"], 'E1036:')
653 call CheckDefFailure("let x = #{one: 1} / #{two: 2}", 'E1036:') 627 call CheckDefFailure(["let x = #{one: 1} / #{two: 2}"], 'E1036:')
654 call CheckDefFailure("let x = #{one: 1} % #{two: 2}", 'E1035:') 628 call CheckDefFailure(["let x = #{one: 1} % #{two: 2}"], 'E1035:')
655 629
656 call CheckDefFailure("let x = 0xff[1]", 'E714:') 630 call CheckDefFailure(["let x = 0xff[1]"], 'E714:')
657 if has('float') 631 if has('float')
658 call CheckDefFailure("let x = 0.7[1]", 'E714:') 632 call CheckDefFailure(["let x = 0.7[1]"], 'E714:')
659 endif 633 endif
660 endfunc 634 endfunc
661 635
662 func Test_expr6_float_fails() 636 func Test_expr6_float_fails()
663 CheckFeature float 637 CheckFeature float
664 call CheckDefFailure("let x = 1.0 % 2", 'E1035:') 638 call CheckDefFailure(["let x = 1.0 % 2"], 'E1035:')
665 endfunc 639 endfunc
666 640
667 " define here to use old style parsing 641 " define here to use old style parsing
668 if has('float') 642 if has('float')
669 let g:float_zero = 0.0 643 let g:float_zero = 0.0
719 " blob constant 693 " blob constant
720 assert_equal(g:blob_empty, 0z) 694 assert_equal(g:blob_empty, 0z)
721 assert_equal(g:blob_one, 0z01) 695 assert_equal(g:blob_one, 0z01)
722 assert_equal(g:blob_long, 0z0102.0304) 696 assert_equal(g:blob_long, 0z0102.0304)
723 697
724 call CheckDefFailure("let x = 0z123", 'E973:') 698 call CheckDefFailure(["let x = 0z123"], 'E973:')
725 enddef 699 enddef
726 700
727 def Test_expr7_string() 701 def Test_expr7_string()
728 " string constant 702 " string constant
729 assert_equal(g:string_empty, '') 703 assert_equal(g:string_empty, '')
732 assert_equal(g:string_short, "x") 706 assert_equal(g:string_short, "x")
733 assert_equal(g:string_long, 'abcdefghijklm') 707 assert_equal(g:string_long, 'abcdefghijklm')
734 assert_equal(g:string_long, "abcdefghijklm") 708 assert_equal(g:string_long, "abcdefghijklm")
735 assert_equal(g:string_special, "ab\ncd\ref\ekk") 709 assert_equal(g:string_special, "ab\ncd\ref\ekk")
736 710
737 call CheckDefFailure('let x = "abc', 'E114:') 711 call CheckDefFailure(['let x = "abc'], 'E114:')
738 call CheckDefFailure("let x = 'abc", 'E115:') 712 call CheckDefFailure(["let x = 'abc"], 'E115:')
739 enddef 713 enddef
740 714
741 def Test_expr7_vimvar() 715 def Test_expr7_vimvar()
742 let old: list<string> = v:oldfiles 716 let old: list<string> = v:oldfiles
743 let compl: dict<any> = v:completed_item 717 let compl: dict<any> = v:completed_item
744 718
745 call CheckDefFailure("let old: list<number> = v:oldfiles", 'E1013: type mismatch, expected list<number> but got list<string>') 719 call CheckDefFailure(["let old: list<number> = v:oldfiles"], 'E1013: type mismatch, expected list<number> but got list<string>')
746 call CheckDefFailure("let old: dict<number> = v:completed_item", 'E1013: type mismatch, expected dict<number> but got dict<any>') 720 call CheckDefFailure(["let old: dict<number> = v:completed_item"], 'E1013: type mismatch, expected dict<number> but got dict<any>')
747 enddef 721 enddef
748 722
749 def Test_expr7_special() 723 def Test_expr7_special()
750 " special constant 724 " special constant
751 assert_equal(g:special_true, true) 725 assert_equal(g:special_true, true)
753 assert_equal(g:special_true, v:true) 727 assert_equal(g:special_true, v:true)
754 assert_equal(g:special_false, v:false) 728 assert_equal(g:special_false, v:false)
755 assert_equal(g:special_null, v:null) 729 assert_equal(g:special_null, v:null)
756 assert_equal(g:special_none, v:none) 730 assert_equal(g:special_none, v:none)
757 731
758 call CheckDefFailure('v:true = true', 'E46:') 732 call CheckDefFailure(['v:true = true'], 'E46:')
759 call CheckDefFailure('v:true = false', 'E46:') 733 call CheckDefFailure(['v:true = false'], 'E46:')
760 call CheckDefFailure('v:false = true', 'E46:') 734 call CheckDefFailure(['v:false = true'], 'E46:')
761 call CheckDefFailure('v:null = 11', 'E46:') 735 call CheckDefFailure(['v:null = 11'], 'E46:')
762 call CheckDefFailure('v:none = 22', 'E46:') 736 call CheckDefFailure(['v:none = 22'], 'E46:')
763 enddef 737 enddef
764 738
765 def Test_expr7_list() 739 def Test_expr7_list()
766 " list 740 " list
767 assert_equal(g:list_empty, []) 741 assert_equal(g:list_empty, [])
768 assert_equal(g:list_empty, [ ]) 742 assert_equal(g:list_empty, [ ])
769 assert_equal(g:list_mixed, [1, 'b', false]) 743 assert_equal(g:list_mixed, [1, 'b', false])
770 assert_equal('b', g:list_mixed[1]) 744 assert_equal('b', g:list_mixed[1])
771 745
772 call CheckDefExecFailure("let x = g:anint[3]", 'E714:') 746 call CheckDefExecFailure("let x = g:anint[3]", 'E714:')
773 call CheckDefFailure("let x = g:list_mixed[xxx]", 'E1001:') 747 call CheckDefFailure(["let x = g:list_mixed[xxx]"], 'E1001:')
774 call CheckDefExecFailure("let x = g:list_mixed['xx']", 'E39:') 748 call CheckDefExecFailure("let x = g:list_mixed['xx']", 'E39:')
775 call CheckDefFailure("let x = g:list_mixed[0", 'E111:') 749 call CheckDefFailure(["let x = g:list_mixed[0"], 'E111:')
776 call CheckDefExecFailure("let x = g:list_empty[3]", 'E684:') 750 call CheckDefExecFailure("let x = g:list_empty[3]", 'E684:')
777 enddef 751 enddef
778 752
779 def Test_expr7_lambda() 753 def Test_expr7_lambda()
780 " lambda 754 " lambda
790 assert_equal(g:dict_one, {'one': 1}) 764 assert_equal(g:dict_one, {'one': 1})
791 let key = 'one' 765 let key = 'one'
792 let val = 1 766 let val = 1
793 assert_equal(g:dict_one, {key: val}) 767 assert_equal(g:dict_one, {key: val})
794 768
795 call CheckDefFailure("let x = #{8: 8}", 'E1014:') 769 call CheckDefFailure(["let x = #{8: 8}"], 'E1014:')
796 call CheckDefFailure("let x = #{xxx}", 'E720:') 770 call CheckDefFailure(["let x = #{xxx}"], 'E720:')
797 call CheckDefFailureMult(["let x = #{xxx: 1", "let y = 2"], 'E722:') 771 call CheckDefFailure(["let x = #{xxx: 1", "let y = 2"], 'E722:')
798 call CheckDefFailure("let x = #{xxx: 1,", 'E723:') 772 call CheckDefFailure(["let x = #{xxx: 1,"], 'E723:')
799 call CheckDefFailure("let x = {'a': xxx}", 'E1001:') 773 call CheckDefFailure(["let x = {'a': xxx}"], 'E1001:')
800 call CheckDefFailure("let x = {xxx: 8}", 'E1001:') 774 call CheckDefFailure(["let x = {xxx: 8}"], 'E1001:')
801 call CheckDefFailure("let x = #{a: 1, a: 2}", 'E721:') 775 call CheckDefFailure(["let x = #{a: 1, a: 2}"], 'E721:')
802 call CheckDefFailure("let x = #", 'E1015:') 776 call CheckDefFailure(["let x = #"], 'E1015:')
803 call CheckDefFailure("let x += 1", 'E1020:') 777 call CheckDefFailure(["let x += 1"], 'E1020:')
804 call CheckDefFailure("let x = x + 1", 'E1001:') 778 call CheckDefFailure(["let x = x + 1"], 'E1001:')
805 call CheckDefExecFailure("let x = g:anint.member", 'E715:') 779 call CheckDefExecFailure("let x = g:anint.member", 'E715:')
806 call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:') 780 call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:')
807 enddef 781 enddef
808 782
809 def Test_expr_member() 783 def Test_expr_member()
810 assert_equal(1, g:dict_one.one) 784 assert_equal(1, g:dict_one.one)
811 785
812 call CheckDefFailure("let x = g:dict_one.#$!", 'E1002:') 786 call CheckDefFailure(["let x = g:dict_one.#$!"], 'E1002:')
813 enddef 787 enddef
814 788
815 def Test_expr7_option() 789 def Test_expr7_option()
816 " option 790 " option
817 set ts=11 791 set ts=11
829 def Test_expr7_environment() 803 def Test_expr7_environment()
830 " environment variable 804 " environment variable
831 assert_equal('testvar', $TESTVAR) 805 assert_equal('testvar', $TESTVAR)
832 assert_equal('', $ASDF_ASD_XXX) 806 assert_equal('', $ASDF_ASD_XXX)
833 807
834 call CheckDefFailure("let x = $$$", 'E1002:') 808 call CheckDefFailure(["let x = $$$"], 'E1002:')
835 enddef 809 enddef
836 810
837 def Test_expr7_register() 811 def Test_expr7_register()
838 @a = 'register a' 812 @a = 'register a'
839 assert_equal('register a', @a) 813 assert_equal('register a', @a)
869 843
870 def Test_expr7_call() 844 def Test_expr7_call()
871 assert_equal('yes', 'yes'->Echo()) 845 assert_equal('yes', 'yes'->Echo())
872 assert_equal('yes', 'yes'->s:EchoArg()) 846 assert_equal('yes', 'yes'->s:EchoArg())
873 847
874 call CheckDefFailure("let x = 'yes'->Echo", 'E107:') 848 call CheckDefFailure(["let x = 'yes'->Echo"], 'E107:')
875 enddef 849 enddef
876 850
877 851
878 def Test_expr7_not() 852 def Test_expr7_not()
879 assert_equal(true, !'') 853 assert_equal(true, !'')
902 assert_equal(true, !test_void()) 876 assert_equal(true, !test_void())
903 assert_equal(true, !test_unknown()) 877 assert_equal(true, !test_unknown())
904 enddef 878 enddef
905 879
906 func Test_expr7_fails() 880 func Test_expr7_fails()
907 call CheckDefFailure("let x = (12", "E110:") 881 call CheckDefFailure(["let x = (12"], "E110:")
908 882
909 call CheckDefFailure("let x = -'xx'", "E1030:") 883 call CheckDefFailure(["let x = -'xx'"], "E1030:")
910 call CheckDefFailure("let x = +'xx'", "E1030:") 884 call CheckDefFailure(["let x = +'xx'"], "E1030:")
911 call CheckDefFailure("let x = -0z12", "E974:") 885 call CheckDefFailure(["let x = -0z12"], "E974:")
912 call CheckDefExecFailure("let x = -[8]", "E39:") 886 call CheckDefExecFailure("let x = -[8]", "E39:")
913 call CheckDefExecFailure("let x = -{'a': 1}", "E39:") 887 call CheckDefExecFailure("let x = -{'a': 1}", "E39:")
914 888
915 call CheckDefFailure("let x = @", "E1002:") 889 call CheckDefFailure(["let x = @"], "E1002:")
916 call CheckDefFailure("let x = @<", "E354:") 890 call CheckDefFailure(["let x = @<"], "E354:")
917 891
918 call CheckDefFailure("let x = [1, 2", "E697:") 892 call CheckDefFailure(["let x = [1, 2"], "E697:")
919 call CheckDefFailure("let x = [notfound]", "E1001:") 893 call CheckDefFailure(["let x = [notfound]"], "E1001:")
920 894
921 call CheckDefFailure("let x = { -> 123) }", "E451:") 895 call CheckDefFailure(["let x = { -> 123) }"], "E451:")
922 call CheckDefFailure("let x = 123->{x -> x + 5) }", "E451:") 896 call CheckDefFailure(["let x = 123->{x -> x + 5) }"], "E451:")
923 897
924 call CheckDefFailure("let x = &notexist", 'E113:') 898 call CheckDefFailure(["let x = &notexist"], 'E113:')
925 call CheckDefFailure("&grepprg = [343]", 'E1013:') 899 call CheckDefFailure(["&grepprg = [343]"], 'E1013:')
926 900
927 call CheckDefExecFailure("echo s:doesnt_exist", 'E121:') 901 call CheckDefExecFailure("echo s:doesnt_exist", 'E121:')
928 call CheckDefExecFailure("echo g:doesnt_exist", 'E121:') 902 call CheckDefExecFailure("echo g:doesnt_exist", 'E121:')
929 903
930 call CheckDefFailure("echo a:somevar", 'E1075:') 904 call CheckDefFailure(["echo a:somevar"], 'E1075:')
931 call CheckDefFailure("echo l:somevar", 'E1075:') 905 call CheckDefFailure(["echo l:somevar"], 'E1075:')
932 call CheckDefFailure("echo x:somevar", 'E1075:') 906 call CheckDefFailure(["echo x:somevar"], 'E1075:')
933 907
934 call CheckDefExecFailure("let x = +g:astring", 'E1030:') 908 call CheckDefExecFailure("let x = +g:astring", 'E1030:')
935 call CheckDefExecFailure("let x = +g:ablob", 'E974:') 909 call CheckDefExecFailure("let x = +g:ablob", 'E974:')
936 call CheckDefExecFailure("let x = +g:alist", 'E745:') 910 call CheckDefExecFailure("let x = +g:alist", 'E745:')
937 call CheckDefExecFailure("let x = +g:adict", 'E728:') 911 call CheckDefExecFailure("let x = +g:adict", 'E728:')
938 912
939 call CheckDefFailureMult(["let x = ''", "let y = x.memb"], 'E715:') 913 call CheckDefFailure(["let x = ''", "let y = x.memb"], 'E715:')
940 914
941 call CheckDefExecFailure("[1, 2->len()", 'E492:') 915 call CheckDefExecFailure("[1, 2->len()", 'E492:')
942 call CheckDefExecFailure("#{a: 1->len()", 'E488:') 916 call CheckDefExecFailure("#{a: 1->len()", 'E488:')
943 call CheckDefExecFailure("{'a': 1->len()", 'E492:') 917 call CheckDefExecFailure("{'a': 1->len()", 'E492:')
944 endfunc 918 endfunc
986 assert_equal(123, d.key) 960 assert_equal(123, d.key)
987 enddef 961 enddef
988 962
989 963
990 func Test_expr7_trailing_fails() 964 func Test_expr7_trailing_fails()
991 call CheckDefFailureList(['let l = [2]', 'l->{l -> add(l, 8)}'], 'E107') 965 call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)}'], 'E107')
992 call CheckDefFailureList(['let l = [2]', 'l->{l -> add(l, 8)} ()'], 'E274') 966 call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)} ()'], 'E274')
993 endfunc 967 endfunc
994 968
995 func Test_expr_fails() 969 func Test_expr_fails()
996 call CheckDefFailure("let x = '1'is2", 'E488:') 970 call CheckDefFailure(["let x = '1'is2"], 'E488:')
997 call CheckDefFailure("let x = '1'isnot2", 'E488:') 971 call CheckDefFailure(["let x = '1'isnot2"], 'E488:')
998 972
999 call CheckDefExecFailure("CallMe ('yes')", 'E492:') 973 call CheckDefExecFailure("CallMe ('yes')", 'E492:')
1000 call CheckDefFailure("CallMe2('yes','no')", 'E1069:') 974 call CheckDefFailure(["CallMe2('yes','no')"], 'E1069:')
1001 call CheckDefFailure("CallMe2('yes' , 'no')", 'E1068:') 975 call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:')
1002 976
1003 call CheckDefFailure("v:nosuch += 3", 'E1001:') 977 call CheckDefFailure(["v:nosuch += 3"], 'E1001:')
1004 call CheckDefFailure("let v:statusmsg = ''", 'E1064:') 978 call CheckDefFailure(["let v:statusmsg = ''"], 'E1064:')
1005 call CheckDefFailure("let asdf = v:nosuch", 'E1001:') 979 call CheckDefFailure(["let asdf = v:nosuch"], 'E1001:')
1006 980
1007 call CheckDefFailure("echo len('asdf'", 'E110:') 981 call CheckDefFailure(["echo len('asdf'"], 'E110:')
1008 call CheckDefFailure("echo Func0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789()", 'E1011:') 982 call CheckDefFailure(["echo Func0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789()"], 'E1011:')
1009 call CheckDefFailure("echo doesnotexist()", 'E117:') 983 call CheckDefFailure(["echo doesnotexist()"], 'E117:')
1010 endfunc 984 endfunc