diff src/testdir/test_iminsert.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 8f17f8f327f3
children 65b4109a4297
line wrap: on
line diff
--- a/src/testdir/test_iminsert.vim
+++ b/src/testdir/test_iminsert.vim
@@ -130,12 +130,15 @@ func Test_imactivatefunc_imstatusfunc_ca
 
   " Using a funcref variable to set 'completefunc'
   let Fn1 = function('IMactivatefunc1')
+  let &imactivatefunc = Fn1
+  let Fn2 = function('IMstatusfunc1')
+  let &imstatusfunc = Fn2
+  normal! i
+
+  " Using a string(funcref variable) to set 'completefunc'
   let &imactivatefunc = string(Fn1)
-  let Fn2 = function('IMstatusfunc1')
   let &imstatusfunc = string(Fn2)
   normal! i
-  call assert_fails('let &imactivatefunc = Fn1', 'E729:')
-  call assert_fails('let &imstatusfunc = Fn2', 'E729:')
 
   " Test for using a funcref()
   set imactivatefunc=funcref('IMactivatefunc1')
@@ -144,12 +147,15 @@ func Test_imactivatefunc_imstatusfunc_ca
 
   " Using a funcref variable to set 'imactivatefunc'
   let Fn1 = funcref('IMactivatefunc1')
+  let &imactivatefunc = Fn1
+  let Fn2 = funcref('IMstatusfunc1')
+  let &imstatusfunc = Fn2
+  normal! i
+
+  " Using a string(funcref variable) to set 'imactivatefunc'
   let &imactivatefunc = string(Fn1)
-  let Fn2 = funcref('IMstatusfunc1')
   let &imstatusfunc = string(Fn2)
   normal! i
-  call assert_fails('let &imactivatefunc = Fn1', 'E729:')
-  call assert_fails('let &imstatusfunc = Fn2', 'E729:')
 
   " Test for using a lambda function
   set imactivatefunc={a\ ->\ IMactivatefunc1(a)}
@@ -157,6 +163,11 @@ func Test_imactivatefunc_imstatusfunc_ca
   normal! i
 
   " Set 'imactivatefunc' and 'imstatusfunc' to a lambda expression
+  let &imactivatefunc = {a -> IMactivatefunc1(a)}
+  let &imstatusfunc = { -> IMstatusfunc1()}
+  normal! i
+
+  " Set 'imactivatefunc' and 'imstatusfunc' to a string(lambda expression)
   let &imactivatefunc = '{a -> IMactivatefunc1(a)}'
   let &imstatusfunc = '{ -> IMstatusfunc1()}'
   normal! i
@@ -164,11 +175,15 @@ func Test_imactivatefunc_imstatusfunc_ca
   " Set 'imactivatefunc' 'imstatusfunc' to a variable with a lambda expression
   let Lambda1 = {a -> IMactivatefunc1(a)}
   let Lambda2 = { -> IMstatusfunc1()}
+  let &imactivatefunc = Lambda1
+  let &imstatusfunc = Lambda2
+  normal! i
+
+  " Set 'imactivatefunc' 'imstatusfunc' to a string(variable with a lambda
+  " expression)
   let &imactivatefunc = string(Lambda1)
   let &imstatusfunc = string(Lambda2)
   normal! i
-  call assert_fails('let &imactivatefunc = Lambda1', 'E729:')
-  call assert_fails('let &imstatusfunc = Lambda2', 'E729:')
 
   " Test for clearing the 'completefunc' option
   set imactivatefunc='' imstatusfunc=''
@@ -179,8 +194,8 @@ func Test_imactivatefunc_imstatusfunc_ca
   call assert_fails("set imactivatefunc=funcref('abc')", "E700:")
   call assert_fails("set imstatusfunc=funcref('abc')", "E700:")
 
-  call assert_equal(7, g:IMactivatefunc_called)
-  call assert_equal(14, g:IMstatusfunc_called)
+  call assert_equal(11, g:IMactivatefunc_called)
+  call assert_equal(22, g:IMstatusfunc_called)
 
   " Vim9 tests
   let lines =<< trim END
@@ -216,12 +231,17 @@ func Test_imactivatefunc_imstatusfunc_ca
            g:IMstatusfunc_called += 1
            return 1
         }
+    &imactivatefunc = Fn1
+    &imstatusfunc = Fn2
+    normal! i
+
+    # Test for using a string(variable with a lambda expression)
     &imactivatefunc = string(Fn1)
     &imstatusfunc = string(Fn2)
     normal! i
 
-    assert_equal(3, g:IMactivatefunc_called)
-    assert_equal(6, g:IMstatusfunc_called)
+    assert_equal(4, g:IMactivatefunc_called)
+    assert_equal(8, g:IMstatusfunc_called)
 
     set iminsert=0
     set imactivatefunc=