changeset 24311:e3d72ea162c3 v8.2.2696

patch 8.2.2696: Lua test fails with Lua 5.4.3 and later Commit: https://github.com/vim/vim/commit/f65ed86f6f60e1b73f4203206cd3df024b7d61f3 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Apr 3 14:13:33 2021 +0200 patch 8.2.2696: Lua test fails with Lua 5.4.3 and later Problem: Lua test fails with Lua 5.4.3 and later. Solution: Check for different error messages. (Yegappan Lakshmanan, closes #8050)
author Bram Moolenaar <Bram@vim.org>
date Sat, 03 Apr 2021 14:15:21 +0200
parents 9717a002571b
children 7482f98856ae
files src/testdir/test_lua.vim src/version.c
diffstat 2 files changed, 54 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_lua.vim
+++ b/src/testdir/test_lua.vim
@@ -12,13 +12,20 @@ endfunc
 CheckFeature lua
 CheckFeature float
 
-let s:luaver = split(split(luaeval('_VERSION'), ' ')[1], '\.')
+" Depending on the lua version, the error messages are different.
+let s:luaver = split(split(systemlist('lua -v')[0], ' ')[1], '\.')
 let s:major = str2nr(s:luaver[0])
 let s:minor = str2nr(s:luaver[1])
-if s:major < 5 || (s:major == 5 && s:minor < 3)
-  let s:lua_53_or_later = 0
-else
+let s:patch = str2nr(s:luaver[2])
+let s:lua_53_or_later = 0
+let s:lua_543_or_later = 0
+if (s:major == 5 && s:minor >= 3) || s:major > 5
   let s:lua_53_or_later = 1
+  if (s:major == 5
+        \ && ((s:minor == 4 && s:patch >= 3) || s:minor > 4))
+        \ || s:major > 5
+    let s:lua_543_or_later = 1
+  endif
 endif
 
 func TearDown()
@@ -55,10 +62,14 @@ func Test_lua_luado()
   " Error cases
   call assert_fails('luado string.format()',
         \ "[string \"vim chunk\"]:1: bad argument #1 to 'format' (string expected, got no value)")
-  call assert_fails('luado func()',
-        \ s:lua_53_or_later
-        \ ? "[string \"vim chunk\"]:1: attempt to call a nil value (global 'func')"
-        \ : "[string \"vim chunk\"]:1: attempt to call global 'func' (a nil value)")
+  if s:lua_543_or_later
+    let msg = "[string \"vim chunk\"]:1: global 'func' is not callable (a nil value)"
+  elseif s:lua_53_or_later
+    let msg = "[string \"vim chunk\"]:1: attempt to call a nil value (global 'func')"
+  else
+    let msg = "[string \"vim chunk\"]:1: attempt to call global 'func' (a nil value)"
+  endif
+  call assert_fails('luado func()', msg)
   call assert_fails('luado error("failed")', "[string \"vim chunk\"]:1: failed")
 endfunc
 
@@ -143,10 +154,14 @@ func Test_lua_window()
   " Window 3 does not exist so vim.window(3) should return nil
   call assert_equal('nil', luaeval('tostring(vim.window(3))'))
 
-  call assert_fails("let n = luaeval('vim.window().xyz()')",
-        \ s:lua_53_or_later
-        \ ? "[string \"luaeval\"]:1: attempt to call a nil value (field 'xyz')"
-        \ : "[string \"luaeval\"]:1: attempt to call field 'xyz' (a nil value)")
+  if s:lua_543_or_later
+    let msg = "[string \"luaeval\"]:1: field 'xyz' is not callable (a nil value)"
+  elseif s:lua_53_or_later
+    let msg = "[string \"luaeval\"]:1: attempt to call a nil value (field 'xyz')"
+  else
+    let msg = "[string \"luaeval\"]:1: attempt to call field 'xyz' (a nil value)"
+  endif
+  call assert_fails("let n = luaeval('vim.window().xyz()')", msg)
   call assert_fails('lua vim.window().xyz = 1',
         \ "[string \"vim chunk\"]:1: invalid window property: `xyz'")
 
@@ -331,10 +346,14 @@ func Test_lua_buffer_insert()
   call assert_equal('4', luaeval('vim.buffer()[4]'))
   call assert_equal(v:null, luaeval('vim.buffer()[5]'))
   call assert_equal(v:null, luaeval('vim.buffer()[{}]'))
-  call assert_fails('lua vim.buffer():xyz()',
-        \ s:lua_53_or_later
-        \ ? "[string \"vim chunk\"]:1: attempt to call a nil value (method 'xyz')"
-        \ : "[string \"vim chunk\"]:1: attempt to call method 'xyz' (a nil value)")
+  if s:lua_543_or_later
+    let msg = "[string \"vim chunk\"]:1: method 'xyz' is not callable (a nil value)"
+  elseif s:lua_53_or_later
+    let msg = "[string \"vim chunk\"]:1: attempt to call a nil value (method 'xyz')"
+  else
+    let msg = "[string \"vim chunk\"]:1: attempt to call method 'xyz' (a nil value)"
+  endif
+  call assert_fails('lua vim.buffer():xyz()', msg)
   call assert_fails('lua vim.buffer()[1] = {}',
         \ '[string "vim chunk"]:1: wrong argument to change')
   bwipe!
@@ -438,10 +457,14 @@ func Test_lua_list()
   lua ll = vim.eval('l')
   let x = luaeval("ll[3]")
   call assert_equal(v:null, x)
-  call assert_fails('let x = luaeval("ll:xyz(3)")',
-        \ s:lua_53_or_later
-        \ ? "[string \"luaeval\"]:1: attempt to call a nil value (method 'xyz')"
-        \ : "[string \"luaeval\"]:1: attempt to call method 'xyz' (a nil value)")
+  if s:lua_543_or_later
+    let msg = "[string \"luaeval\"]:1: method 'xyz' is not callable (a nil value)"
+  elseif s:lua_53_or_later
+    let msg = "[string \"luaeval\"]:1: attempt to call a nil value (method 'xyz')"
+  else
+    let msg = "[string \"luaeval\"]:1: attempt to call method 'xyz' (a nil value)"
+  endif
+  call assert_fails('let x = luaeval("ll:xyz(3)")', msg)
   let y = luaeval("ll[{}]")
   call assert_equal(v:null, y)
 
@@ -467,7 +490,7 @@ func Test_lua_list_table_insert_remove()
     throw 'Skipped: Lua version < 5.3'
   endif
 
-  let l = [1, 2] 
+  let l = [1, 2]
   lua t = vim.eval('l')
   lua table.insert(t, 10)
   lua t[#t + 1] = 20
@@ -625,10 +648,14 @@ func Test_lua_blob()
   call assert_equal(2, n)
   let n = luaeval('lb[6]')
   call assert_equal(v:null, n)
-  call assert_fails('let x = luaeval("lb:xyz(3)")',
-        \ s:lua_53_or_later
-        \ ? "[string \"luaeval\"]:1: attempt to call a nil value (method 'xyz')"
-        \ : "[string \"luaeval\"]:1: attempt to call method 'xyz' (a nil value)")
+  if s:lua_543_or_later
+    let msg = "[string \"luaeval\"]:1: method 'xyz' is not callable (a nil value)"
+  elseif s:lua_53_or_later
+    let msg = "[string \"luaeval\"]:1: attempt to call a nil value (method 'xyz')"
+  else
+    let msg = "[string \"luaeval\"]:1: attempt to call method 'xyz' (a nil value)"
+  endif
+  call assert_fails('let x = luaeval("lb:xyz(3)")', msg)
   let y = luaeval("lb[{}]")
   call assert_equal(v:null, y)
 
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2696,
+/**/
     2695,
 /**/
     2694,