blob: b1a52db03ba64bc68319fc21ee24fdeb850a8012 [file] [log] [blame]
Bram Moolenaar1735bc92016-03-14 23:05:14 +01001" Test binding arguments to a Funcref.
2
3func MyFunc(arg1, arg2, arg3)
4 return a:arg1 . '/' . a:arg2 . '/' . a:arg3
5endfunc
6
7func MySort(up, one, two)
8 if a:one == a:two
9 return 0
10 endif
11 if a:up
Bram Moolenaar790500a2016-03-15 11:05:45 +010012 return a:one > a:two ? 1 : -1
Bram Moolenaar1735bc92016-03-14 23:05:14 +010013 endif
Bram Moolenaar790500a2016-03-15 11:05:45 +010014 return a:one < a:two ? 1 : -1
Bram Moolenaar1735bc92016-03-14 23:05:14 +010015endfunc
16
17func Test_partial_args()
18 let Cb = function('MyFunc', ["foo", "bar"])
19 call assert_equal("foo/bar/xxx", Cb("xxx"))
20 call assert_equal("foo/bar/yyy", call(Cb, ["yyy"]))
21
Bram Moolenaar346418c2016-03-15 12:36:08 +010022 let Cb = function('MyFunc', [])
23 call assert_equal("a/b/c", Cb("a", "b", "c"))
24
Bram Moolenaar1735bc92016-03-14 23:05:14 +010025 let Sort = function('MySort', [1])
26 call assert_equal([1, 2, 3], sort([3, 1, 2], Sort))
27 let Sort = function('MySort', [0])
28 call assert_equal([3, 2, 1], sort([3, 1, 2], Sort))
29endfunc
30
31func MyDictFunc(arg1, arg2) dict
32 return self.name . '/' . a:arg1 . '/' . a:arg2
33endfunc
34
35func Test_partial_dict()
36 let dict = {'name': 'hello'}
37 let Cb = function('MyDictFunc', ["foo", "bar"], dict)
38 call assert_equal("hello/foo/bar", Cb())
39 call assert_fails('Cb("xxx")', 'E492:')
Bram Moolenaar346418c2016-03-15 12:36:08 +010040
Bram Moolenaar1735bc92016-03-14 23:05:14 +010041 let Cb = function('MyDictFunc', ["foo"], dict)
42 call assert_equal("hello/foo/xxx", Cb("xxx"))
43 call assert_fails('Cb()', 'E492:')
Bram Moolenaar346418c2016-03-15 12:36:08 +010044
45 let Cb = function('MyDictFunc', [], dict)
46 call assert_equal("hello/ttt/xxx", Cb("ttt", "xxx"))
47 call assert_fails('Cb("yyy")', 'E492:')
48
Bram Moolenaar1735bc92016-03-14 23:05:14 +010049 let Cb = function('MyDictFunc', dict)
50 call assert_equal("hello/xxx/yyy", Cb("xxx", "yyy"))
Bram Moolenaar346418c2016-03-15 12:36:08 +010051 call assert_fails('Cb("fff")', 'E492:')
Bram Moolenaar1735bc92016-03-14 23:05:14 +010052endfunc