Mercurial > vim
diff src/testdir/test_vim9_builtin.vim @ 27503:4cea92e99a5a v8.2.4279
patch 8.2.4279: Vim9: cannot change item type with map() after range()
Commit: https://github.com/vim/vim/commit/8133018f50bc447570825801e93d5ed67e8dac90
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Feb 1 12:11:58 2022 +0000
patch 8.2.4279: Vim9: cannot change item type with map() after range()
Problem: Vim9: cannot change item type with map() after range().
Solution: Split the return type in current type and declared type.
(closes #9665)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 01 Feb 2022 13:15:03 +0100 |
parents | 7480a2e2ca0f |
children | f00a7a2bee21 |
line wrap: on
line diff
--- 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()