Mercurial > vim
comparison src/testdir/test_vim9_builtin.vim @ 30588:56fabd53c7b8 v9.0.0629
patch 9.0.0629: get an error for using const only when executing
Commit: https://github.com/vim/vim/commit/a5d1a67bee5672786c4b172f66ae4391e7b0cc57
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Sep 30 17:57:47 2022 +0100
patch 9.0.0629: get an error for using const only when executing
Problem: Get an error for using const only when executing.
Solution: Check for const at compile time for filter(), map(), remove(),
reverse(), sort() and uniq().
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 30 Sep 2022 19:00:05 +0200 |
parents | ee039a6049ff |
children | 9f37bcd4d5c5 |
comparison
equal
deleted
inserted
replaced
30587:8b4040d04c32 | 30588:56fabd53c7b8 |
---|---|
1526 var dict = {aa: [1], ab: [2], ac: [3], de: [4]} | 1526 var dict = {aa: [1], ab: [2], ac: [3], de: [4]} |
1527 var res = dict->filter((k, _) => k =~ 'a' && k !~ 'b') | 1527 var res = dict->filter((k, _) => k =~ 'a' && k !~ 'b') |
1528 res->assert_equal({aa: [1], ac: [3]}) | 1528 res->assert_equal({aa: [1], ac: [3]}) |
1529 enddef | 1529 enddef |
1530 | 1530 |
1531 def Test_filter_const() | |
1532 var lines =<< trim END | |
1533 const l = [1, 2, 3] | |
1534 filter(l, 'v:val == 2') | |
1535 END | |
1536 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>') | |
1537 | |
1538 lines =<< trim END | |
1539 const d = {a: 1, b: 2} | |
1540 filter(d, 'v:val == 2') | |
1541 END | |
1542 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const dict<number>') | |
1543 enddef | |
1544 | |
1531 def Test_foldclosed() | 1545 def Test_foldclosed() |
1532 v9.CheckDefAndScriptFailure(['foldclosed(function("min"))'], ['E1013: Argument 1: type mismatch, expected string but got func(...): unknown', 'E1220: String or Number required for argument 1']) | 1546 v9.CheckDefAndScriptFailure(['foldclosed(function("min"))'], ['E1013: Argument 1: type mismatch, expected string but got func(...): unknown', 'E1220: String or Number required for argument 1']) |
1533 v9.CheckDefExecAndScriptFailure(['foldclosed("")'], 'E1209: Invalid value for a line number') | 1547 v9.CheckDefExecAndScriptFailure(['foldclosed("")'], 'E1209: Invalid value for a line number') |
1534 assert_equal(-1, foldclosed(1)) | 1548 assert_equal(-1, foldclosed(1)) |
1535 assert_equal(-1, foldclosed('$')) | 1549 assert_equal(-1, foldclosed('$')) |
2543 var d: dict<number> = {a: 1} | 2557 var d: dict<number> = {a: 1} |
2544 g:gd = d | 2558 g:gd = d |
2545 map(g:gd, (k, v) => true) | 2559 map(g:gd, (k, v) => true) |
2546 END | 2560 END |
2547 v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got bool') | 2561 v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got bool') |
2562 enddef | |
2563 | |
2564 def Test_map_const() | |
2565 var lines =<< trim END | |
2566 const l = [1, 2, 3] | |
2567 map(l, 'SomeFunc') | |
2568 END | |
2569 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>') | |
2570 | |
2571 lines =<< trim END | |
2572 const d = {a: 1, b: 2} | |
2573 map(d, 'SomeFunc') | |
2574 END | |
2575 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const dict<number>') | |
2548 enddef | 2576 enddef |
2549 | 2577 |
2550 def Test_map_function_arg() | 2578 def Test_map_function_arg() |
2551 var lines =<< trim END | 2579 var lines =<< trim END |
2552 def MapOne(i: number, v: string): string | 2580 def MapOne(i: number, v: string): string |
3332 CheckFeature clientserver | 3360 CheckFeature clientserver |
3333 CheckEnv DISPLAY | 3361 CheckEnv DISPLAY |
3334 v9.CheckDefAndScriptFailure(['remote_startserver({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1']) | 3362 v9.CheckDefAndScriptFailure(['remote_startserver({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1']) |
3335 enddef | 3363 enddef |
3336 | 3364 |
3337 def Test_remove_const_list() | 3365 def Test_remove_literal_list() |
3338 var l: list<number> = [1, 2, 3, 4] | 3366 var l: list<number> = [1, 2, 3, 4] |
3339 assert_equal([1, 2], remove(l, 0, 1)) | 3367 assert_equal([1, 2], remove(l, 0, 1)) |
3340 assert_equal([3, 4], l) | 3368 assert_equal([3, 4], l) |
3369 enddef | |
3370 | |
3371 def Test_remove_const() | |
3372 var lines =<< trim END | |
3373 const l = [1, 2, 3, 4] | |
3374 remove(l, 1) | |
3375 END | |
3376 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>') | |
3377 | |
3378 lines =<< trim END | |
3379 const d = {a: 1, b: 2} | |
3380 remove(d, 'a') | |
3381 END | |
3382 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const dict<number>') | |
3383 | |
3384 lines =<< trim END | |
3385 const b = 0z010203 | |
3386 remove(b, 1) | |
3387 END | |
3388 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const blob') | |
3341 enddef | 3389 enddef |
3342 | 3390 |
3343 def Test_remove() | 3391 def Test_remove() |
3344 v9.CheckDefAndScriptFailure(['remove("a", 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1228: List, Dictionary or Blob required for argument 1']) | 3392 v9.CheckDefAndScriptFailure(['remove("a", 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1228: List, Dictionary or Blob required for argument 1']) |
3345 v9.CheckDefAndScriptFailure(['remove([], "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) | 3393 v9.CheckDefAndScriptFailure(['remove([], "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) |
3417 res += n | 3465 res += n |
3418 endfor | 3466 endfor |
3419 res->assert_equal(6) | 3467 res->assert_equal(6) |
3420 enddef | 3468 enddef |
3421 | 3469 |
3470 def Test_reverse_const() | |
3471 var lines =<< trim END | |
3472 const l = [1, 2, 3, 4] | |
3473 reverse(l) | |
3474 END | |
3475 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>') | |
3476 | |
3477 lines =<< trim END | |
3478 const b = 0z010203 | |
3479 reverse(b) | |
3480 END | |
3481 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const blob') | |
3482 enddef | |
3483 | |
3422 def Test_rubyeval() | 3484 def Test_rubyeval() |
3423 if !has('ruby') | 3485 if !has('ruby') |
3424 CheckFeature ruby | 3486 CheckFeature ruby |
3425 endif | 3487 endif |
3426 v9.CheckDefAndScriptFailure(['rubyeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1']) | 3488 v9.CheckDefAndScriptFailure(['rubyeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1']) |
4051 SortedList()->assert_equal([1, 2, 3]) | 4113 SortedList()->assert_equal([1, 2, 3]) |
4052 END | 4114 END |
4053 v9.CheckScriptSuccess(lines) | 4115 v9.CheckScriptSuccess(lines) |
4054 enddef | 4116 enddef |
4055 | 4117 |
4118 def Test_sort_const() | |
4119 var lines =<< trim END | |
4120 const l = [1, 2, 3, 4] | |
4121 sort(l) | |
4122 END | |
4123 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>') | |
4124 enddef | |
4125 | |
4056 def Test_sort_compare_func_fails() | 4126 def Test_sort_compare_func_fails() |
4057 v9.CheckDefAndScriptFailure(['sort("a")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1']) | 4127 v9.CheckDefAndScriptFailure(['sort("a")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1']) |
4058 v9.CheckDefAndScriptFailure(['sort([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3']) | 4128 v9.CheckDefAndScriptFailure(['sort([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3']) |
4059 | 4129 |
4060 var lines =<< trim END | 4130 var lines =<< trim END |
4650 def Test_uniq() | 4720 def Test_uniq() |
4651 v9.CheckDefAndScriptFailure(['uniq("a")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1']) | 4721 v9.CheckDefAndScriptFailure(['uniq("a")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1']) |
4652 v9.CheckDefAndScriptFailure(['uniq([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3']) | 4722 v9.CheckDefAndScriptFailure(['uniq([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3']) |
4653 | 4723 |
4654 v9.CheckDefFailure(['var l: list<number> = uniq(["a", "b"])'], 'E1012: Type mismatch; expected list<number> but got list<string>') | 4724 v9.CheckDefFailure(['var l: list<number> = uniq(["a", "b"])'], 'E1012: Type mismatch; expected list<number> but got list<string>') |
4725 enddef | |
4726 | |
4727 def Test_uniq_const() | |
4728 var lines =<< trim END | |
4729 const l = [1, 2, 3, 4] | |
4730 uniq(l) | |
4731 END | |
4732 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>') | |
4655 enddef | 4733 enddef |
4656 | 4734 |
4657 def Test_values() | 4735 def Test_values() |
4658 v9.CheckDefAndScriptFailure(['values([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1']) | 4736 v9.CheckDefAndScriptFailure(['values([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1']) |
4659 assert_equal([], {}->values()) | 4737 assert_equal([], {}->values()) |