diff src/testdir/test_tagfunc.vim @ 26441:65ab0b035dd8 v8.2.3751

patch 8.2.3751: cannot assign a lambda to an option that takes a function Commit: https://github.com/vim/vim/commit/6409553b6e3b4de4e1d72b8ee5445595214581ff Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Mon Dec 6 11:03:55 2021 +0000 patch 8.2.3751: cannot assign a lambda to an option that takes a function Problem: Cannot assign a lambda to an option that takes a function. Solution: Automatically convert the lambda to a string. (Yegappan Lakshmanan, closes #9286)
author Bram Moolenaar <Bram@vim.org>
date Mon, 06 Dec 2021 12:15:04 +0100
parents 8aba638e91eb
children 65b4109a4297
line wrap: on
line diff
--- a/src/testdir/test_tagfunc.vim
+++ b/src/testdir/test_tagfunc.vim
@@ -140,12 +140,19 @@ func Test_tagfunc_callback()
 
   " Using a funcref variable to set 'tagfunc'
   let Fn = function('MytagFunc1')
+  let &tagfunc = Fn
+  new | only
+  let g:MytagFunc1_args = []
+  call assert_fails('tag a12', 'E433:')
+  call assert_equal(['a12', '', {}], g:MytagFunc1_args)
+
+  " Using a string(funcref_variable) to set 'tagfunc'
+  let Fn = function('MytagFunc1')
   let &tagfunc = string(Fn)
   new | only
   let g:MytagFunc1_args = []
   call assert_fails('tag a12', 'E433:')
   call assert_equal(['a12', '', {}], g:MytagFunc1_args)
-  call assert_fails('let &tagfunc = Fn', 'E729:')
 
   " Test for using a funcref()
   func MytagFunc2(pat, flags, info)
@@ -160,12 +167,19 @@ func Test_tagfunc_callback()
 
   " Using a funcref variable to set 'tagfunc'
   let Fn = funcref('MytagFunc2')
+  let &tagfunc = Fn
+  new | only
+  let g:MytagFunc2_args = []
+  call assert_fails('tag a14', 'E433:')
+  call assert_equal(['a14', '', {}], g:MytagFunc2_args)
+
+  " Using a string(funcref_variable) to set 'tagfunc'
+  let Fn = funcref('MytagFunc2')
   let &tagfunc = string(Fn)
   new | only
   let g:MytagFunc2_args = []
   call assert_fails('tag a14', 'E433:')
   call assert_equal(['a14', '', {}], g:MytagFunc2_args)
-  call assert_fails('let &tagfunc = Fn', 'E729:')
 
   " Test for using a script local function
   set tagfunc=<SID>ScriptLocalTagFunc
@@ -176,6 +190,14 @@ func Test_tagfunc_callback()
 
   " Test for using a script local funcref variable
   let Fn = function("s:ScriptLocalTagFunc")
+  let &tagfunc= Fn
+  new | only
+  let g:ScriptLocalFuncArgs = []
+  call assert_fails('tag a16', 'E433:')
+  call assert_equal(['a16', '', {}], g:ScriptLocalFuncArgs)
+
+  " Test for using a string(script local funcref variable)
+  let Fn = function("s:ScriptLocalTagFunc")
   let &tagfunc= string(Fn)
   new | only
   let g:ScriptLocalFuncArgs = []
@@ -194,6 +216,13 @@ func Test_tagfunc_callback()
   call assert_equal(['a17', '', {}], g:MytagFunc3_args)
 
   " Set 'tagfunc' to a lambda expression
+  let &tagfunc = {a, b, c -> MytagFunc3(a, b, c)}
+  new | only
+  let g:MytagFunc3_args = []
+  call assert_fails('tag a18', 'E433:')
+  call assert_equal(['a18', '', {}], g:MytagFunc3_args)
+
+  " Set 'tagfunc' to a string(lambda expression)
   let &tagfunc = '{a, b, c -> MytagFunc3(a, b, c)}'
   new | only
   let g:MytagFunc3_args = []
@@ -202,12 +231,19 @@ func Test_tagfunc_callback()
 
   " Set 'tagfunc' to a variable with a lambda expression
   let Lambda = {a, b, c -> MytagFunc3(a, b, c)}
+  let &tagfunc = Lambda
+  new | only
+  let g:MytagFunc3_args = []
+  call assert_fails("tag a19", "E433:")
+  call assert_equal(['a19', '', {}], g:MytagFunc3_args)
+
+  " Set 'tagfunc' to a string(variable with a lambda expression)
+  let Lambda = {a, b, c -> MytagFunc3(a, b, c)}
   let &tagfunc = string(Lambda)
   new | only
   let g:MytagFunc3_args = []
   call assert_fails("tag a19", "E433:")
   call assert_equal(['a19', '', {}], g:MytagFunc3_args)
-  call assert_fails('let &tagfunc = Lambda', 'E729:')
 
   " Test for using a lambda function with incorrect return value
   let Lambda = {s -> strlen(s)}
@@ -244,6 +280,13 @@ func Test_tagfunc_callback()
       g:MytagFunc2_args = [pat, flags, info]
       return null
     enddef
+    &tagfunc = (a, b, c) => MytagFunc2(a, b, c)
+    new | only
+    g:MytagFunc2_args = []
+    assert_fails('tag a20', 'E433:')
+    assert_equal(['a20', '', {}], g:MytagFunc2_args)
+
+    # Test for using a string(lambda)
     &tagfunc = '(a, b, c) => MytagFunc2(a, b, c)'
     new | only
     g:MytagFunc2_args = []
@@ -252,6 +295,13 @@ func Test_tagfunc_callback()
 
     # Test for using a variable with a lambda expression
     var Fn: func = (a, b, c) => MytagFunc2(a, b, c)
+    &tagfunc = Fn
+    new | only
+    g:MytagFunc2_args = []
+    assert_fails('tag a30', 'E433:')
+    assert_equal(['a30', '', {}], g:MytagFunc2_args)
+
+    # Test for using a variable with a lambda expression
     &tagfunc = string(Fn)
     new | only
     g:MytagFunc2_args = []