diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-02-01 12:11:58 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-02-01 12:11:58 +0000 |
commit | 8133018f50bc447570825801e93d5ed67e8dac90 (patch) | |
tree | b59670eb8f761b319fad4ead8098674f603cede5 /src/testdir/test_vim9_builtin.vim | |
parent | 4e3b3182307444f205a5f35e257c651f0f3717ad (diff) |
patch 8.2.4279: Vim9: cannot change item type with map() after range()v8.2.4279
Problem: Vim9: cannot change item type with map() after range().
Solution: Split the return type in current type and declared type.
(closes #9665)
Diffstat (limited to 'src/testdir/test_vim9_builtin.vim')
-rw-r--r-- | src/testdir/test_vim9_builtin.vim | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index 2e84011ac8..248887f7b0 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -77,7 +77,12 @@ enddef def Test_add() v9.CheckDefAndScriptFailure(['add({}, 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1226: List or Blob required for argument 1']) - v9.CheckDefFailure(['add([1], "a")'], 'E1012: Type mismatch; expected number but got string') + v9.CheckDefExecFailure([ + 'var ln: list<number> = [1]', + 'add(ln, "a")'], + 'E1012: Type mismatch; expected number but got string') + assert_equal([1, 'a'], add([1], 'a')) + assert_equal(0z1234, add(0z12, 0x34)) var lines =<< trim END vim9script @@ -2804,6 +2809,9 @@ def Test_range() v9.CheckDefAndScriptFailure(['range("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) v9.CheckDefAndScriptFailure(['range(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) v9.CheckDefAndScriptFailure(['range(10, 20, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) + + # returns a list<number> but it's not declared as such + assert_equal(['x', 'x'], range(2)->map((i, v) => 'x')) enddef def Test_readdir() @@ -2980,6 +2988,10 @@ def Test_remove() var d2: any = {1: 'a', 2: 'b', 3: 'c'} remove(d2, 2) assert_equal({1: 'a', 3: 'c'}, d2) + + # using declared type + var x: string = range(2)->extend(['x'])->remove(2) + assert_equal('x', x) enddef def Test_remove_return_type() |