Mercurial > vim
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 = ¬exist", 'E113:') | 898 call CheckDefFailure(["let x = ¬exist"], '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 |