diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-02-22 15:12:14 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-02-22 15:12:14 +0000 |
commit | 16f6c8ac94d8412075060945aa90ba90be08656f (patch) | |
tree | 6156645f9ceab36ff1aa58a0a7ed360854979747 /src/testdir/test_vim9_builtin.vim | |
parent | 6456fae9ba8e72c74b2c0c499eaf09974604ff30 (diff) |
patch 8.2.4441: Vim9: function argument of filter() not checked like map()v8.2.4441
Problem: Vim9: function argument of filter() not checked like map().
Solution: Also check the function argument of filter().
Diffstat (limited to 'src/testdir/test_vim9_builtin.vim')
-rw-r--r-- | src/testdir/test_vim9_builtin.vim | 62 |
1 files changed, 53 insertions, 9 deletions
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index 41060e1a2e..b91e9f2dce 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -1315,6 +1315,16 @@ def Wrong_dict_key_type(items: list<number>): list<number> enddef def Test_filter() + assert_equal([], filter([1, 2, 3], '0')) + assert_equal([1, 2, 3], filter([1, 2, 3], '1')) + assert_equal({b: 20}, filter({a: 10, b: 20}, 'v:val == 20')) + + def GetFiltered(): list<number> + var Odd: func = (_, v) => v % 2 + return range(3)->filter(Odd) + enddef + assert_equal([1], GetFiltered()) + v9.CheckDefAndScriptFailure(['filter(1.1, "1")'], ['E1013: Argument 1: type mismatch, expected list<any> but got float', 'E1251: List, Dictionary, Blob or String required for argument 1']) v9.CheckDefAndScriptFailure(['filter([1, 2], 4)'], ['E1256: String or function required for argument 2', 'E1024: Using a Number as a String']) @@ -1324,17 +1334,51 @@ def Test_filter() enddef echo filter([1, 2, 3], F) END - v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): bool', 'E1135: Using a String as a Bool:']) + v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?any): bool but got func(number, any): string', 'E1135: Using a String as a Bool:']) - assert_equal([], filter([1, 2, 3], '0')) - assert_equal([1, 2, 3], filter([1, 2, 3], '1')) - assert_equal({b: 20}, filter({a: 10, b: 20}, 'v:val == 20')) + # check first function argument type + lines =<< trim END + var l = [1, 2, 3] + filter(l, (i: string, v: number) => true) + END + v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): bool but got func(string, number): bool', 'E1013: Argument 1: type mismatch, expected string but got number']) + lines =<< trim END + var d = {a: 1} + filter(d, (i: number, v: number) => true) + END + v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?string, ?number): bool but got func(number, number): bool', 'E1013: Argument 1: type mismatch, expected number but got string']) + lines =<< trim END + var b = 0z1122 + filter(b, (i: string, v: number) => true) + END + v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): bool but got func(string, number): bool', 'E1013: Argument 1: type mismatch, expected string but got number']) + lines =<< trim END + var s = 'text' + filter(s, (i: string, v: string) => true) + END + v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?string): bool but got func(string, string): bool', 'E1013: Argument 1: type mismatch, expected string but got number']) - def GetFiltered(): list<number> - var Odd: func = (_, v) => v % 2 - return range(3)->filter(Odd) - enddef - assert_equal([1], GetFiltered()) + # check second function argument type + lines =<< trim END + var l = [1, 2, 3] + filter(l, (i: number, v: string) => true) + END + v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): bool but got func(number, string): bool', 'E1013: Argument 2: type mismatch, expected string but got number']) + lines =<< trim END + var d = {a: 1} + filter(d, (i: string, v: string) => true) + END + v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?string, ?number): bool but got func(string, string): bool', 'E1013: Argument 2: type mismatch, expected string but got number']) + lines =<< trim END + var b = 0z1122 + filter(b, (i: number, v: string) => true) + END + v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): bool but got func(number, string): bool', 'E1013: Argument 2: type mismatch, expected string but got number']) + lines =<< trim END + var s = 'text' + filter(s, (i: number, v: number) => true) + END + v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?string): bool but got func(number, number): bool', 'E1013: Argument 2: type mismatch, expected number but got string']) enddef def Test_filter_wrong_dict_key_type() |