" Tests for Lua.

source check.vim

" This test also works without the lua feature.
func Test_skip_lua()
  if 0
    lua print("Not executed")
  endif
endfunc

CheckFeature lua
CheckFeature float

" Depending on the lua version, the error messages are different.
let [s:major, s:minor, s:patch] = luaeval('vim.lua_version')->split('\.')->map({-> str2nr(v:val)})
let s:lua_53_or_later = 0
let s:lua_543 = 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
    let s:lua_543 = 1
  endif
endif

func TearDown()
  " Run garbage collection after each test to exercise luaV_setref().
  call test_garbagecollect_now()
endfunc

" Check that switching to another buffer does not trigger ml_get error.
func Test_lua_command_new_no_ml_get_error()
  new
  let wincount = winnr('$')
  call setline(1, ['one', 'two', 'three'])
  luado vim.command("new")
  call assert_equal(wincount + 1, winnr('$'))
  %bwipe!
endfunc

" Test vim.command()
func Test_lua_command()
  new
  call setline(1, ['one', 'two', 'three'])
  luado vim.command("1,2d_")
  call assert_equal(['three'], getline(1, '$'))
  bwipe!
endfunc

func Test_lua_luado()
  new
  call setline(1, ['one', 'two'])
  luado return(linenr)
  call assert_equal(['1', '2'], getline(1, '$'))
  close!

  " Error cases
  call assert_fails('luado string.format()',
        \ "[string \"vim chunk\"]:1: bad argument #1 to 'format' (string expected, got no value)")
  if s:lua_543
    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

" Test vim.eval()
func Test_lua_eval()
  " lua.eval with a number
  lua v = vim.eval('123')
  call assert_equal('number', luaeval('vim.type(v)'))
  call assert_equal(123, luaeval('v'))

  " lua.eval with a string
  lua v = vim.eval('"abc"')
  call assert_equal('string', 'vim.type(v)'->luaeval())
  call assert_equal('abc', luaeval('v'))

  " lua.eval with a list
  lua v = vim.eval("['a']")
  call assert_equal('list', luaeval('vim.type(v)'))
  call assert_equal(['a'], luaeval('v'))

  " lua.eval with a dict
  lua v = vim.eval("{'a':'b'}")
  call assert_equal('dict', luaeval('vim.type(v)'))
  call assert_equal({'a':'b'}, luaeval('v'))

  " lua.eval with a blob
  lua v = vim.eval("0z00112233.deadbeef")
  call assert_equal('blob', luaeval('vim.type(v)'))
  call assert_equal(0z00112233.deadbeef, luaeval('v'))

  " lua.eval with a float
  lua v = vim.eval('3.14')
  call assert_equal('number', luaeval('vim.type(v)'))
  call assert_equal(3.14, luaeval('v'))

  " lua.eval with a bool
  lua v = vim.eval('v:true')
  call assert_equal('number', luaeval('vim.type(v)'))
  call assert_equal(1, luaeval('v'))
  lua v = vim.eval('v:false')
  call assert_equal('number', luaeval('vim.type(v)'))
  call assert_equal(0, luaeval('v'))

  " lua.eval with a null
  lua v = vim.eval('v:null')
  call assert_equal('nil', luaeval('vim.type(v)'))
  call assert_equal(v:null, luaeval('v'))

  call assert_fails('lua v = vim.eval(nil)',
        \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got nil)")
  call assert_fails('lua v = vim.eval(true)',
        \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got boolean)")
  call assert_fails('lua v = vim.eval({})',
        \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got table)")
  call assert_fails('lua v = vim.eval(print)',
        \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got function)")
  call assert_fails('lua v = vim.eval(vim.buffer())',
        \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got userdata)")

  lua v = nil
endfunc

" Test luaeval() with lambda
func Test_luaeval_with_lambda()
  lua function hello_luaeval_lambda(a, cb) return a .. cb() end
  call assert_equal('helloworld',
        \ luaeval('hello_luaeval_lambda(_A[1], _A[2])',
        \         ['hello', {->'world'}]))
  lua hello_luaeval_lambda = nil
endfunc

" Test vim.window()
func Test_lua_window()
  e Xfoo2
  new Xfoo1

  " Window 1 (top window) contains Xfoo1
  " Window 2 (bottom window) contains Xfoo2
  call assert_equal('Xfoo1', luaeval('vim.window(1):buffer().name'))
  call assert_equal('Xfoo2', luaeval('vim.window(2):buffer().name'))

  " Window 3 does not exist so vim.window(3) should return nil
  call assert_equal('nil', luaeval('tostring(vim.window(3))'))

  if s:lua_543
    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'")

  %bwipe!
endfunc

" Test vim.window().height
func Test_lua_window_height()
  new
  lua vim.window().height = 2
  call assert_equal(2, winheight(0))
  lua vim.window().height = vim.window().height + 1
  call assert_equal(3, winheight(0))
  bwipe!
endfunc

" Test vim.window().width
func Test_lua_window_width()
  vert new
  lua vim.window().width = 2
  call assert_equal(2, winwidth(0))
  lua vim.window().width = vim.window().width + 1
  call assert_equal(3, winwidth(0))
  bwipe!
endfunc

" Test vim.window().line and vim.window.col
func Test_lua_window_line_col()
  new
  call setline(1, ['line1', 'line2', 'line3'])
  lua vim.window().line = 2
  lua vim.window().col = 4
  call assert_equal([0, 2, 4, 0], getpos('.'))
  lua vim.window().line = vim.window().line + 1
  lua vim.window().col = vim.window().col - 1
  call assert_equal([0, 3, 3, 0], getpos('.'))

  call assert_fails('lua vim.window().line = 10',
        \           '[string "vim chunk"]:1: line out of range')
  bwipe!
endfunc

" Test vim.call
func Test_lua_call()
  call assert_equal(has('lua'), luaeval('vim.call("has", "lua")'))
  call assert_equal(printf("Hello %s", "vim"), luaeval('vim.call("printf", "Hello %s", "vim")'))

  " Error cases
  call assert_fails("call luaeval('vim.call(\"min\", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)')",
        \ s:lua_53_or_later
        \ ? '[string "luaeval"]:1: Function called with too many arguments'
        \ : 'Function called with too many arguments')
  lua co = coroutine.create(function () print("hi") end)
  call assert_fails("call luaeval('vim.call(\"type\", co)')",
        \ s:lua_53_or_later
        \ ? '[string "luaeval"]:1: lua: cannot convert value'
        \ : 'lua: cannot convert value')
  lua co = nil
  call assert_fails("call luaeval('vim.call(\"abc\")')",
        \ ['E117:', s:lua_53_or_later ? '\[string "luaeval"]:1: lua: call_vim_function failed'
        \                             : 'lua: call_vim_function failed'])
endfunc

" Test vim.fn.*
func Test_lua_fn()
  call assert_equal(has('lua'), luaeval('vim.fn.has("lua")'))
  call assert_equal(printf("Hello %s", "vim"), luaeval('vim.fn.printf("Hello %s", "vim")'))
endfunc

" Test setting the current window
func Test_lua_window_set_current()
  new Xfoo1
  lua w1 = vim.window()
  new Xfoo2
  lua w2 = vim.window()

  call assert_equal('Xfoo2', bufname('%'))
  lua w1()
  call assert_equal('Xfoo1', bufname('%'))
  lua w2()
  call assert_equal('Xfoo2', bufname('%'))

  lua w1, w2 = nil
  %bwipe!
endfunc

" Test vim.window().buffer
func Test_lua_window_buffer()
  new Xfoo1
  lua w1 = vim.window()
  lua b1 = w1.buffer()
  new Xfoo2
  lua w2 = vim.window()
  lua b2 = w2.buffer()

  lua b1()
  call assert_equal('Xfoo1', bufname('%'))
  lua b2()
  call assert_equal('Xfoo2', bufname('%'))

  lua b1, b2, w1, w2 = nil
  %bwipe!
endfunc

" Test vim.window():previous() and vim.window():next()
func Test_lua_window_next_previous()
  new Xfoo1
  new Xfoo2
  new Xfoo3
  wincmd j

  call assert_equal('Xfoo2', luaeval('vim.window().buffer().name'))
  call assert_equal('Xfoo1', luaeval('vim.window():next():buffer().name'))
  call assert_equal('Xfoo3', luaeval('vim.window():previous():buffer().name'))

  %bwipe!
endfunc

" Test vim.window():isvalid()
func Test_lua_window_isvalid()
  new Xfoo
  lua w = vim.window()
  call assert_true(luaeval('w:isvalid()'))

  " FIXME: how to test the case when isvalid() returns v:false?
  " isvalid() gives errors when the window is deleted. Is it a bug?

  lua w = nil
  bwipe!
endfunc

" Test vim.buffer() with and without argument
func Test_lua_buffer()
  new Xfoo1
  let bn1 = bufnr('%')
  new Xfoo2
  let bn2 = bufnr('%')

  " Test vim.buffer() without argument.
  call assert_equal('Xfoo2', luaeval("vim.buffer().name"))

  " Test vim.buffer() with string argument.
  call assert_equal('Xfoo1', luaeval("vim.buffer('Xfoo1').name"))
  call assert_equal('Xfoo2', luaeval("vim.buffer('Xfoo2').name"))

  " Test vim.buffer() with integer argument.
  call assert_equal('Xfoo1', luaeval("vim.buffer(" . bn1 . ").name"))
  call assert_equal('Xfoo2', luaeval("vim.buffer(" . bn2 . ").name"))

  lua bn1, bn2 = nil
  %bwipe!
endfunc

" Test vim.buffer().name and vim.buffer().fname
func Test_lua_buffer_name()
  new
  call assert_equal('', luaeval('vim.buffer().name'))
  call assert_equal('', luaeval('vim.buffer().fname'))
  bwipe!

  new Xfoo
  call assert_equal('Xfoo', luaeval('vim.buffer().name'))
  call assert_equal(expand('%:p'), luaeval('vim.buffer().fname'))
  bwipe!
endfunc

" Test vim.buffer().number
func Test_lua_buffer_number()
  " All numbers in Lua are floating points number (no integers).
  call assert_equal(bufnr('%'), float2nr(luaeval('vim.buffer().number')))
endfunc

" Test inserting lines in buffer.
func Test_lua_buffer_insert()
  new
  lua vim.buffer()[1] = '3'
  lua vim.buffer():insert('1', 0)
  lua vim.buffer():insert('2', 1)
  lua vim.buffer():insert('4', 10)

  call assert_equal(['1', '2', '3', '4'], getline(1, '$'))
  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()[{}]'))
  if s:lua_543
    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!
endfunc

" Test deleting line in buffer
func Test_lua_buffer_delete()
  new
  call setline(1, ['1', '2', '3'])
  call cursor(3, 1)
  lua vim.buffer()[2] = nil
  call assert_equal(['1', '3'], getline(1, '$'))

  call assert_fails('lua vim.buffer()[3] = nil',
        \           '[string "vim chunk"]:1: invalid line number')
  bwipe!
endfunc

" Test #vim.buffer() i.e. number of lines in buffer
func Test_lua_buffer_number_lines()
  new
  call setline(1, ['a', 'b', 'c'])
  call assert_equal(3, luaeval('#vim.buffer()'))
  bwipe!
endfunc

" Test vim.buffer():next() and vim.buffer():previous()
" Note that these functions get the next or previous buffers
" but do not switch buffer.
func Test_lua_buffer_next_previous()
  new Xfoo1
  new Xfoo2
  new Xfoo3
  b Xfoo2

  lua bn = vim.buffer():next()
  lua bp = vim.buffer():previous()

  call assert_equal('Xfoo2', luaeval('vim.buffer().name'))
  call assert_equal('Xfoo1', luaeval('bp.name'))
  call assert_equal('Xfoo3', luaeval('bn.name'))

  call assert_equal('Xfoo2', bufname('%'))

  lua bn()
  call assert_equal('Xfoo3', luaeval('vim.buffer().name'))
  call assert_equal('Xfoo3', bufname('%'))

  lua bp()
  call assert_equal('Xfoo1', luaeval('vim.buffer().name'))
  call assert_equal('Xfoo1', bufname('%'))

  lua bn, bp = nil
  %bwipe!
endfunc

" Test vim.buffer():isvalid()
func Test_lua_buffer_isvalid()
  new Xfoo
  lua b = vim.buffer()
  call assert_true(luaeval('b:isvalid()'))

  " FIXME: how to test the case when isvalid() returns v:false?
  " isvalid() gives errors when the buffer is wiped. Is it a bug?

  lua b = nil
  bwipe!
endfunc

func Test_lua_list()
  call assert_equal([], luaeval('vim.list()'))

  let l = []
  lua l = vim.eval('l')
  lua l:add(123)
  lua l:add('abc')
  lua l:add(true)
  lua l:add(false)
  lua l:add(nil)
  lua l:add(vim.eval("[1, 2, 3]"))
  lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}"))
  call assert_equal([123, 'abc', v:true, v:false, v:null, [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}], l)
  call assert_equal(7, luaeval('#l'))
  call assert_match('^list: \%(0x\)\?\x\+$', luaeval('tostring(l)'))

  lua l[1] = 124
  lua l[6] = nil
  lua l:insert('first')
  lua l:insert('xx', 3)
  call assert_fails('lua l:insert("xx", -20)',
        \ '[string "vim chunk"]:1: invalid position')
  call assert_equal(['first', 124, 'abc', 'xx', v:true, v:false, v:null, {'a': 1, 'b': 2, 'c': 3}], l)

  lockvar 1 l
  call assert_fails('lua l:add("x")', '[string "vim chunk"]:1: list is locked')
  call assert_fails('lua l:insert(2)', '[string "vim chunk"]:1: list is locked')
  call assert_fails('lua l[9] = 1', '[string "vim chunk"]:1: list is locked')

  unlockvar l
  let l = [1, 2]
  lua ll = vim.eval('l')
  let x = luaeval("ll[3]")
  call assert_equal(v:null, x)
  if s:lua_543
    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)

  lua l = nil
endfunc

func Test_lua_list_table()
  " See :help lua-vim
  " Non-numeric keys should not be used to initialize the list
  " so say = 'hi' should be ignored.
  lua t = {3.14, 'hello', false, true, say = 'hi'}
  call assert_equal([3.14, 'hello', v:false, v:true], luaeval('vim.list(t)'))
  lua t = nil

  call assert_fails('lua vim.list(1)', '[string "vim chunk"]:1: table expected, got number')
  call assert_fails('lua vim.list("x")', '[string "vim chunk"]:1: table expected, got string')
  call assert_fails('lua vim.list(print)', '[string "vim chunk"]:1: table expected, got function')
  call assert_fails('lua vim.list(true)', '[string "vim chunk"]:1: table expected, got boolean')
endfunc

func Test_lua_list_table_insert_remove()
  if !s:lua_53_or_later
    throw 'Skipped: Lua version < 5.3'
  endif

  let l = [1, 2]
  lua t = vim.eval('l')
  lua table.insert(t, 10)
  lua t[#t + 1] = 20
  lua table.insert(t, 2, 30)
  call assert_equal(l, [1, 30, 2, 10, 20])
  lua table.remove(t, 2)
  call assert_equal(l, [1, 2, 10, 20])
  lua t[3] = nil
  call assert_equal(l, [1, 2, 20])
  lua removed_value = table.remove(t, 3)
  call assert_equal(luaeval('removed_value'), 20)
  lua t = nil
  lua removed_value = nil
  unlet l
endfunc

" Test l() i.e. iterator on list
func Test_lua_list_iter()
  lua l = vim.list():add('foo'):add('bar')
  lua str = ''
  lua for v in l() do str = str .. v end
  call assert_equal('foobar', luaeval('str'))

  lua str, l = nil
endfunc

func Test_lua_recursive_list()
  lua l = vim.list():add(1):add(2)
  lua l = l:add(l)

  call assert_equal(1, luaeval('l[1]'))
  call assert_equal(2, luaeval('l[2]'))

  call assert_equal(1, luaeval('l[3][1]'))
  call assert_equal(2, luaeval('l[3][2]'))

  call assert_equal(1, luaeval('l[3][3][1]'))
  call assert_equal(2, luaeval('l[3][3][2]'))

  call assert_equal('[1, 2, [...]]', string(luaeval('l')))

  call assert_match('^list: \%(0x\)\?\x\+$', luaeval('tostring(l)'))
  call assert_equal(luaeval('tostring(l)'), luaeval('tostring(l[3])'))

  call assert_equal(luaeval('l'), luaeval('l[3]'))
  call assert_equal(luaeval('l'), luaeval('l[3][3]'))

  lua l = nil
endfunc

func Test_lua_dict()
  call assert_equal({}, luaeval('vim.dict()'))

  let d = {}
  lua d = vim.eval('d')
  lua d[0] = 123
  lua d[1] = "abc"
  lua d[2] = true
  lua d[3] = false
  lua d[4] = vim.eval("[1, 2, 3]")
  lua d[5] = vim.eval("{'a':1, 'b':2, 'c':3}")
  call assert_equal({'0':123, '1':'abc', '2':v:true, '3':v:false, '4': [1, 2, 3], '5': {'a':1, 'b':2, 'c':3}}, d)
  call assert_equal(6, luaeval('#d'))
  call assert_match('^dict: \%(0x\)\?\x\+$', luaeval('tostring(d)'))

  call assert_equal('abc', luaeval('d[1]'))
  call assert_equal(v:null, luaeval('d[22]'))

  lua d[0] = 124
  lua d[4] = nil
  call assert_equal({'0':124, '1':'abc', '2':v:true, '3':v:false, '5': {'a':1, 'b':2, 'c':3}}, d)

  lockvar 1 d
  call assert_fails('lua d[6] = 1', '[string "vim chunk"]:1: dict is locked')
  unlockvar d

  " Error case
  lua d = {}
  lua d[''] = 10
  call assert_fails("let t = luaeval('vim.dict(d)')",
        \ s:lua_53_or_later
        \ ? '[string "luaeval"]:1: table has empty key'
        \ : 'table has empty key')
  let d = {}
  lua x = vim.eval('d')
  call assert_fails("lua x[''] = 10", '[string "vim chunk"]:1: empty key')
  lua x['a'] = nil
  call assert_equal({}, d)

  " cannot assign funcrefs in the global scope
  lua x = vim.eval('g:')
  call assert_fails("lua x['min'] = vim.funcref('max')",
        \ '[string "vim chunk"]:1: cannot assign funcref to builtin scope')

  lua d = nil
endfunc

func Test_lua_dict_table()
  lua t = {key1 = 'x', key2 = 3.14, key3 = true, key4 = false}
  call assert_equal({'key1': 'x', 'key2': 3.14, 'key3': v:true, 'key4': v:false},
        \           luaeval('vim.dict(t)'))

  " Same example as in :help lua-vim.
  lua t = {math.pi, false, say = 'hi'}
  " FIXME: commented out as it currently does not work as documented:
  " Expected {'say': 'hi'}
  " but got {'1': 3.141593, '2': v:false, 'say': 'hi'}
  " Is the documentation or the code wrong?
  "call assert_equal({'say' : 'hi'}, luaeval('vim.dict(t)'))
  lua t = nil

  call assert_fails('lua vim.dict(1)', '[string "vim chunk"]:1: table expected, got number')
  call assert_fails('lua vim.dict("x")', '[string "vim chunk"]:1: table expected, got string')
  call assert_fails('lua vim.dict(print)', '[string "vim chunk"]:1: table expected, got function')
  call assert_fails('lua vim.dict(true)', '[string "vim chunk"]:1: table expected, got boolean')
endfunc

" Test d() i.e. iterator on dictionary
func Test_lua_dict_iter()
  let d = {'a': 1, 'b':2}
  lua d = vim.eval('d')
  lua str = ''
  lua for k,v in d() do str = str .. k ..':' .. v .. ',' end
  call assert_equal('a:1,b:2,', luaeval('str'))

  lua str, d = nil
endfunc

func Test_lua_blob()
  call assert_equal(0z, luaeval('vim.blob("")'))
  call assert_equal(0z31326162, luaeval('vim.blob("12ab")'))
  call assert_equal(0z00010203, luaeval('vim.blob("\x00\x01\x02\x03")'))
  call assert_equal(0z8081FEFF, luaeval('vim.blob("\x80\x81\xfe\xff")'))

  lua b = vim.blob("\x00\x00\x00\x00")
  call assert_equal(0z00000000, luaeval('b'))
  call assert_equal(4, luaeval('#b'))
  lua b[0], b[1], b[2], b[3] = 1, 32, 256, 0xff
  call assert_equal(0z012000ff, luaeval('b'))
  lua b[4] = string.byte("z", 1)
  call assert_equal(0z012000ff.7a, luaeval('b'))
  call assert_equal(5, luaeval('#b'))
  call assert_fails('lua b[#b+1] = 0x80', '[string "vim chunk"]:1: index out of range')
  lua b:add("12ab")
  call assert_equal(0z012000ff.7a313261.62, luaeval('b'))
  call assert_equal(9, luaeval('#b'))
  call assert_fails('lua b:add(nil)', '[string "vim chunk"]:1: string expected, got nil')
  call assert_fails('lua b:add(true)', '[string "vim chunk"]:1: string expected, got boolean')
  call assert_fails('lua b:add({})', '[string "vim chunk"]:1: string expected, got table')
  lua b = nil

  let b = 0z0102
  lua lb = vim.eval('b')
  let n = luaeval('lb[1]')
  call assert_equal(2, n)
  let n = luaeval('lb[6]')
  call assert_equal(v:null, n)
  if s:lua_543
    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)

  lockvar b
  call assert_fails('lua lb[1] = 2', '[string "vim chunk"]:1: blob is locked')
  call assert_fails('lua lb:add("12")', '[string "vim chunk"]:1: blob is locked')

  " Error cases
  lua t = {}
  call assert_fails('lua b = vim.blob(t)',
        \ '[string "vim chunk"]:1: string expected, got table')
endfunc

func Test_lua_funcref()
  function I(x)
    return a:x
  endfunction
  let R = function('I')
  lua i1 = vim.funcref"I"
  lua i2 = vim.eval"R"
  lua msg = "funcref|test|" .. (#i2(i1) == #i1(i2) and "OK" or "FAIL")
  lua msg = vim.funcref"tr"(msg, "|", " ")
  call assert_equal("funcref test OK", luaeval('msg'))

  " Error cases
  call assert_fails('lua f1 = vim.funcref("")',
        \ '[string "vim chunk"]:1: invalid function name: ')
  call assert_fails('lua f1 = vim.funcref("10")',
        \ '[string "vim chunk"]:1: invalid function name: 10')
  let fname = test_null_string()
  call assert_fails('lua f1 = vim.funcref(fname)',
        \ "[string \"vim chunk\"]:1: bad argument #1 to 'funcref' (string expected, got nil)")
  call assert_fails('lua vim.funcref("abc")()',
        \ ['E117:', '\[string "vim chunk"]:1: cannot call funcref'])

  " dict funcref
  function Mylen() dict
    return len(self.data)
  endfunction
  let l = [0, 1, 2, 3]
  let mydict = {'data': l}
  lua d = vim.eval"mydict"
  lua d.len = vim.funcref"Mylen" -- assign d as 'self'
  lua res = (d.len() == vim.funcref"len"(vim.eval"l")) and "OK" or "FAIL"
  call assert_equal("OK", luaeval('res'))
  call assert_equal(function('Mylen', {'data': l, 'len': function('Mylen')}), mydict.len)

  lua i1, i2, msg, d, res = nil
endfunc

" Test vim.type()
func Test_lua_type()
  " The following values are identical to Lua's type function.
  call assert_equal('string',   luaeval('vim.type("foo")'))
  call assert_equal('number',   luaeval('vim.type(1)'))
  call assert_equal('number',   luaeval('vim.type(1.2)'))
  call assert_equal('function', luaeval('vim.type(print)'))
  call assert_equal('table',    luaeval('vim.type({})'))
  call assert_equal('boolean',  luaeval('vim.type(true)'))
  call assert_equal('boolean',  luaeval('vim.type(false)'))
  call assert_equal('nil',      luaeval('vim.type(nil)'))

  " The following values are specific to Vim.
  call assert_equal('window',   luaeval('vim.type(vim.window())'))
  call assert_equal('buffer',   luaeval('vim.type(vim.buffer())'))
  call assert_equal('list',     luaeval('vim.type(vim.list())'))
  call assert_equal('dict',     luaeval('vim.type(vim.dict())'))
  call assert_equal('funcref',  luaeval('vim.type(vim.funcref("Test_type"))'))
endfunc

" Test vim.open()
func Test_lua_open()
  call assert_notmatch('XOpen', execute('ls'))

  " Open a buffer XOpen1, but do not jump to it.
  lua b = vim.open('XOpen1')
  call assert_equal('XOpen1', luaeval('b.name'))
  call assert_equal('', bufname('%'))

  call assert_match('XOpen1', execute('ls'))
  call assert_notequal('XOpen2', bufname('%'))

  " Open a buffer XOpen2 and jump to it.
  lua b = vim.open('XOpen2')()
  call assert_equal('XOpen2', luaeval('b.name'))
  call assert_equal('XOpen2', bufname('%'))

  lua b = nil
  %bwipe!
endfunc

func Test_update_package_paths()
  set runtimepath+=./testluaplugin
  call assert_equal("hello from lua", luaeval("require('testluaplugin').hello()"))
endfunc

func Vim_func_call_lua_callback(Concat, Cb)
  let l:message = a:Concat("hello", "vim")
  call a:Cb(l:message)
endfunc

func Test_pass_lua_callback_to_vim_from_lua()
  lua pass_lua_callback_to_vim_from_lua_result = ""
  call assert_equal("", luaeval("pass_lua_callback_to_vim_from_lua_result"))
  lua <<EOF
  vim.funcref('Vim_func_call_lua_callback')(
    function(greeting, message)
      return greeting .. " " .. message
    end,
    function(message)
      pass_lua_callback_to_vim_from_lua_result = message
    end)
EOF
  call assert_equal("hello vim", luaeval("pass_lua_callback_to_vim_from_lua_result"))
endfunc

func Vim_func_call_metatable_lua_callback(Greet)
  return a:Greet("world")
endfunc

func Test_pass_lua_metatable_callback_to_vim_from_lua()
  let result = luaeval("vim.funcref('Vim_func_call_metatable_lua_callback')(setmetatable({ space = ' '}, { __call = function(tbl, msg) return 'hello' .. tbl.space .. msg  end }) )")
  call assert_equal("hello world", result)
endfunc

" Test vim.line()
func Test_lua_line()
  new
  call setline(1, ['first line', 'second line'])
  1
  call assert_equal('first line', luaeval('vim.line()'))
  2
  call assert_equal('second line', luaeval('vim.line()'))
  bwipe!
endfunc

" Test vim.beep()
func Test_lua_beep()
  call assert_beeps('lua vim.beep()')
endfunc

" Test errors in luaeval()
func Test_luaeval_error()
  " Compile error
  call assert_fails("call luaeval('-nil')",
  \ '[string "luaeval"]:1: attempt to perform arithmetic on a nil value')
  call assert_fails("call luaeval(']')",
  \ "[string \"luaeval\"]:1: unexpected symbol near ']'")
  lua co = coroutine.create(function () print("hi") end)
  call assert_fails('let i = luaeval("co")', 'luaeval: cannot convert value')
  lua co = nil
  call assert_fails('let m = luaeval("{}")', 'luaeval: cannot convert value')
endfunc

" Test :luafile foo.lua
func Test_luafile()
  call delete('Xlua_file')
  call writefile(["str = 'hello'", "num = 123" ], 'Xlua_file')
  call setfperm('Xlua_file', 'r-xr-xr-x')

  luafile Xlua_file
  call assert_equal('hello', luaeval('str'))
  call assert_equal(123, luaeval('num'))

  lua str, num = nil
  call delete('Xlua_file')
endfunc

" Test :luafile %
func Test_luafile_percent()
  new Xlua_file
  append
    str, num = 'foo', 321.0
    print(string.format('str=%s, num=%d', str, num))
.
  w!
  luafile %
  let msg = split(execute('message'), "\n")[-1]
  call assert_equal('str=foo, num=321', msg)

  lua str, num = nil
  call delete('Xlua_file')
  bwipe!
endfunc

" Test :luafile with syntax error
func Test_luafile_error()
  new Xlua_file
  call writefile(['nil = 0' ], 'Xlua_file')
  call setfperm('Xlua_file', 'r-xr-xr-x')

  call assert_fails('luafile Xlua_file', "Xlua_file:1: unexpected symbol near 'nil'")

  call delete('Xlua_file')
  bwipe!
endfunc

" Test :luafile printing a long string
func Test_luafile_print()
  new Xlua_file
  let lines =<< trim END
      local data = ''
      for i = 1, 130 do
	data = data .. 'xxxxx asd as as dad sad sad xz cxz  czxcxzczxc ad ad asd asd asd asd asd'
      end
      print(data)
  END
  call setline(1, lines)
  w
  luafile %

  call delete('Xlua_file')
  bwipe!
endfunc

" Test for dealing with strings containing newlines and null character
func Test_lua_string_with_newline()
  let x = execute('lua print("Hello\nWorld", 2)')
  call assert_equal("\nHello\nWorld 2", x)
  new
  lua k = vim.buffer(vim.eval('bufnr()'))
  lua k:insert("Hello\0World", 0)
  call assert_equal(["Hello\nWorld", ''], getline(1, '$'))
  close!
endfunc

func Test_lua_set_cursor()
  " Check that setting the cursor position works.
  new
  call setline(1, ['first line', 'second line'])
  normal gg
  lua << trim EOF
    w = vim.window()
    w.line = 1
    w.col = 5
  EOF
  call assert_equal([1, 5], [line('.'), col('.')])

  " Check that movement after setting cursor position keeps current column.
  normal j
  call assert_equal([2, 5], [line('.'), col('.')])
endfunc

" Test for various heredoc syntax
func Test_lua_heredoc()
  lua << END
vim.command('let s = "A"')
END
  lua <<
vim.command('let s ..= "B"')
.
  lua << trim END
    vim.command('let s ..= "C"')
  END
  lua << trim
    vim.command('let s ..= "D"')
  .
  lua << trim eof
    vim.command('let s ..= "E"')
  eof
  call assert_equal('ABCDE', s)
endfunc

" Test for adding, accessing and removing global variables using the vim.g
" Lua table
func Test_lua_global_var_table()
  " Access global variables with different types of values
  let g:Var1 = 10
  let g:Var2 = 'Hello'
  let g:Var3 = ['a', 'b']
  let g:Var4 = #{x: 'edit', y: 'run'}
  let g:Var5 = function('min')
  call assert_equal(10, luaeval('vim.g.Var1'))
  call assert_equal('Hello', luaeval('vim.g.Var2'))
  call assert_equal(['a', 'b'], luaeval('vim.g.Var3'))
  call assert_equal(#{x: 'edit', y: 'run'}, luaeval('vim.g.Var4'))
  call assert_equal(2, luaeval('vim.g.Var5')([5, 9, 2]))

  " Access list of dictionaries and dictionary of lists
  let g:Var1 = [#{a: 10}, #{b: 20}]
  let g:Var2 = #{p: [5, 6], q: [1.1, 2.2]}
  call assert_equal([#{a: 10}, #{b: 20}], luaeval('vim.g.Var1'))
  call assert_equal(#{p: [5, 6], q: [1.1, 2.2]}, luaeval('vim.g.Var2'))

  " Create new global variables with different types of values
  unlet g:Var1 g:Var2 g:Var3 g:Var4 g:Var5
  lua << trim END
    vim.g.Var1 = 34
    vim.g.Var2 = 'World'
    vim.g.Var3 = vim.list({'#', '$'})
    vim.g.Var4 = vim.dict({model='honda', year=2020})
    vim.g.Var5 = vim.funcref('max')
  END
  call assert_equal(34, g:Var1)
  call assert_equal('World', g:Var2)
  call assert_equal(['#', '$'], g:Var3)
  call assert_equal(#{model: 'honda', year: 2020}, g:Var4)
  call assert_equal(10, g:Var5([5, 10, 9]))

  " Create list of dictionaries and dictionary of lists
  unlet g:Var1 g:Var2
  lua << trim END
    vim.g.Var1 = vim.list({vim.dict({a=10}), vim.dict({b=20})})
    vim.g.Var2 = vim.dict({p=vim.list({5, 6}), q=vim.list({1.1, 2.2})})
  END
  call assert_equal([#{a: 10}, #{b: 20}], luaeval('vim.g.Var1'))
  call assert_equal(#{p: [5, 6], q: [1.1, 2.2]}, luaeval('vim.g.Var2'))

  " Modify a global variable with a list value or a dictionary value
  let g:Var1 = [10, 20]
  let g:Var2 = #{one: 'mercury', two: 'mars'}
  lua << trim END
    vim.g.Var1[2] = Nil
    vim.g.Var1[3] = 15
    vim.g.Var2['two'] = Nil
    vim.g.Var2['three'] = 'earth'
  END
  call assert_equal([10, 15], g:Var1)
  call assert_equal(#{one: 'mercury', three: 'earth'}, g:Var2)

  " Remove global variables with different types of values
  let g:Var1 = 10
  let g:Var2 = 'Hello'
  let g:Var3 = ['a', 'b']
  let g:Var4 = #{x: 'edit', y: 'run'}
  let g:Var5 = function('min')
  lua << trim END
    vim.g.Var1 = Nil
    vim.g.Var2 = Nil
    vim.g.Var3 = Nil
    vim.g.Var4 = Nil
    vim.g.Var5 = Nil
  END
  call assert_false(exists('g:Var1'))
  call assert_false(exists('g:Var2'))
  call assert_false(exists('g:Var3'))
  call assert_false(exists('g:Var4'))
  call assert_false(exists('g:Var5'))

  " Try to modify and remove a locked global variable
  let g:Var1 = 10
  lockvar g:Var1
  call assert_fails('lua vim.g.Var1 = 20', 'variable is locked')
  call assert_fails('lua vim.g.Var1 = Nil', 'variable is locked')
  unlockvar g:Var1
  let g:Var2 = [7, 14]
  lockvar 0 g:Var2
  lua vim.g.Var2[2] = Nil
  lua vim.g.Var2[3] = 21
  call assert_fails('lua vim.g.Var2 = Nil', 'variable is locked')
  call assert_equal([7, 21], g:Var2)
  lockvar 1 g:Var2
  call assert_fails('lua vim.g.Var2[2] = Nil', 'list is locked')
  call assert_fails('lua vim.g.Var2[3] = 21', 'list is locked')
  unlockvar g:Var2

  let g:TestFunc = function('len')
  call assert_fails('lua vim.g.func = vim.g.TestFunc', ['E704:', 'Couldn''t add to dictionary'])
  unlet g:TestFunc

  " Attempt to access a non-existing global variable
  call assert_equal(v:null, luaeval('vim.g.NonExistingVar'))
  lua vim.g.NonExisting = Nil

  unlet! g:Var1 g:Var2 g:Var3 g:Var4 g:Var5
endfunc

" Test for accessing and modifying predefined vim variables using the vim.v
" Lua table
func Test_lua_predefined_var_table()
  call assert_equal(v:progpath, luaeval('vim.v.progpath'))
  let v:errmsg = 'SomeError'
  call assert_equal('SomeError', luaeval('vim.v.errmsg'))
  lua vim.v.errmsg = 'OtherError'
  call assert_equal('OtherError', v:errmsg)
  call assert_fails('lua vim.v.errmsg = Nil', 'variable is fixed')
  let v:oldfiles = ['one', 'two']
  call assert_equal(['one', 'two'], luaeval('vim.v.oldfiles'))
  lua vim.v.oldfiles = vim.list({})
  call assert_equal([], v:oldfiles)
  call assert_equal(v:null, luaeval('vim.v.null'))
  call assert_fails('lua vim.v.argv[1] = Nil', 'list is locked')
  call assert_fails('lua vim.v.newvar = 1', 'Dictionary is locked')
endfunc

" Test for adding, accessing and modifying window-local variables using the
" vim.w Lua table
func Test_lua_window_var_table()
  " Access window variables with different types of values
  new
  let w:wvar1 = 10
  let w:wvar2 = 'edit'
  let w:wvar3 = 3.14
  let w:wvar4 = 0zdeadbeef
  let w:wvar5 = ['a', 'b']
  let w:wvar6 = #{action: 'run'}
  call assert_equal(10, luaeval('vim.w.wvar1'))
  call assert_equal('edit', luaeval('vim.w.wvar2'))
  call assert_equal(3.14, luaeval('vim.w.wvar3'))
  call assert_equal(0zdeadbeef, luaeval('vim.w.wvar4'))
  call assert_equal(['a', 'b'], luaeval('vim.w.wvar5'))
  call assert_equal(#{action: 'run'}, luaeval('vim.w.wvar6'))
  call assert_equal(v:null, luaeval('vim.w.NonExisting'))

  " modify a window variable
  lua vim.w.wvar2 = 'paste'
  call assert_equal('paste', w:wvar2)

  " change the type stored in a variable
  let w:wvar2 = [1, 2]
  lua vim.w.wvar2 = vim.dict({a=10, b=20})
  call assert_equal(#{a: 10, b: 20}, w:wvar2)

  " create a new window variable
  lua vim.w.wvar7 = vim.dict({a=vim.list({1, 2}), b=20})
  call assert_equal(#{a: [1, 2], b: 20}, w:wvar7)

  " delete a window variable
  lua vim.w.wvar2 = Nil
  call assert_false(exists('w:wvar2'))

  new
  call assert_equal(v:null, luaeval('vim.w.wvar1'))
  call assert_equal(v:null, luaeval('vim.w.wvar2'))
  %bw!
endfunc

" Test for adding, accessing and modifying buffer-local variables using the
" vim.b Lua table
func Test_lua_buffer_var_table()
  " Access buffer variables with different types of values
  let b:bvar1 = 10
  let b:bvar2 = 'edit'
  let b:bvar3 = 3.14
  let b:bvar4 = 0zdeadbeef
  let b:bvar5 = ['a', 'b']
  let b:bvar6 = #{action: 'run'}
  call assert_equal(10, luaeval('vim.b.bvar1'))
  call assert_equal('edit', luaeval('vim.b.bvar2'))
  call assert_equal(3.14, luaeval('vim.b.bvar3'))
  call assert_equal(0zdeadbeef, luaeval('vim.b.bvar4'))
  call assert_equal(['a', 'b'], luaeval('vim.b.bvar5'))
  call assert_equal(#{action: 'run'}, luaeval('vim.b.bvar6'))
  call assert_equal(v:null, luaeval('vim.b.NonExisting'))

  " modify a buffer variable
  lua vim.b.bvar2 = 'paste'
  call assert_equal('paste', b:bvar2)

  " change the type stored in a variable
  let b:bvar2 = [1, 2]
  lua vim.b.bvar2 = vim.dict({a=10, b=20})
  call assert_equal(#{a: 10, b: 20}, b:bvar2)

  " create a new buffer variable
  lua vim.b.bvar7 = vim.dict({a=vim.list({1, 2}), b=20})
  call assert_equal(#{a: [1, 2], b: 20}, b:bvar7)

  " delete a buffer variable
  lua vim.b.bvar2 = Nil
  call assert_false(exists('b:bvar2'))

  new
  call assert_equal(v:null, luaeval('vim.b.bvar1'))
  call assert_equal(v:null, luaeval('vim.b.bvar2'))
  %bw!
endfunc

" Test for adding, accessing and modifying tabpage-local variables using the
" vim.t Lua table
func Test_lua_tabpage_var_table()
  " Access tabpage variables with different types of values
  let t:tvar1 = 10
  let t:tvar2 = 'edit'
  let t:tvar3 = 3.14
  let t:tvar4 = 0zdeadbeef
  let t:tvar5 = ['a', 'b']
  let t:tvar6 = #{action: 'run'}
  call assert_equal(10, luaeval('vim.t.tvar1'))
  call assert_equal('edit', luaeval('vim.t.tvar2'))
  call assert_equal(3.14, luaeval('vim.t.tvar3'))
  call assert_equal(0zdeadbeef, luaeval('vim.t.tvar4'))
  call assert_equal(['a', 'b'], luaeval('vim.t.tvar5'))
  call assert_equal(#{action: 'run'}, luaeval('vim.t.tvar6'))
  call assert_equal(v:null, luaeval('vim.t.NonExisting'))

  " modify a tabpage variable
  lua vim.t.tvar2 = 'paste'
  call assert_equal('paste', t:tvar2)

  " change the type stored in a variable
  let t:tvar2 = [1, 2]
  lua vim.t.tvar2 = vim.dict({a=10, b=20})
  call assert_equal(#{a: 10, b: 20}, t:tvar2)

  " create a new tabpage variable
  lua vim.t.tvar7 = vim.dict({a=vim.list({1, 2}), b=20})
  call assert_equal(#{a: [1, 2], b: 20}, t:tvar7)

  " delete a tabpage variable
  lua vim.t.tvar2 = Nil
  call assert_false(exists('t:tvar2'))

  tabnew
  call assert_equal(v:null, luaeval('vim.t.tvar1'))
  call assert_equal(v:null, luaeval('vim.t.tvar2'))
  %bw!
endfunc

" Test for vim.version()
func Test_lua_vim_version()
  lua << trim END
    vimver = vim.version()
    vimver_n = vimver.major * 100 + vimver.minor
  END
  call assert_equal(v:version, luaeval('vimver_n'))
endfunc

" Test for running multiple commands using vim.command()
func Test_lua_multiple_commands()
  lua << trim END
    vim.command([[
        let Var1 = []
        for i in range(3)
          let Var1 += [#{name: 'x'}]
        endfor
        augroup Luagroup
          autocmd!
          autocmd User Luatest echo 'Hello'
        augroup END
      ]])
  END
  call assert_equal([{'name': 'x'}, {'name': 'x'}, {'name': 'x'}], Var1)
  call assert_true(exists('#Luagroup'))
  call assert_true(exists('#Luagroup#User#Luatest'))
  augroup Luagroup
    autocmd!
  augroup END
  augroup! Luagroup
endfunc

func Test_lua_debug()
  CheckRunVimInTerminal

  let buf = RunVimInTerminal('', {'rows': 10})
  call term_sendkeys(buf, ":lua debug.debug()\n")
  call WaitForAssert({-> assert_equal('lua_debug> ', term_getline(buf, 10))})

  call term_sendkeys(buf, "foo = 42\n")
  call WaitForAssert({-> assert_equal('lua_debug> foo = 42', term_getline(buf, 9))})
  call WaitForAssert({-> assert_equal('lua_debug> ',         term_getline(buf, 10))})

  call term_sendkeys(buf, "print(foo)\n")
  call WaitForAssert({-> assert_equal('lua_debug> print(foo)', term_getline(buf, 8))})
  call WaitForAssert({-> assert_equal('42',                    term_getline(buf, 9))})
  call WaitForAssert({-> assert_equal('lua_debug> ',           term_getline(buf, 10))})

  call term_sendkeys(buf, "-\n")
  call WaitForAssert({-> assert_equal("(debug command):1: unexpected symbol near '-'",
  \                                                  term_getline(buf, 9))})
  call WaitForAssert({-> assert_equal('lua_debug> ', term_getline(buf, 10))})

  call term_sendkeys(buf, "cont\n")
  call WaitForAssert({-> assert_match(' All$', term_getline(buf, 10))})

  " Entering an empty line also exits the debugger.
  call term_sendkeys(buf, ":lua debug.debug()\n")
  call WaitForAssert({-> assert_equal('lua_debug> ', term_getline(buf, 10))})
  call term_sendkeys(buf, "\n")
  call WaitForAssert({-> assert_match(' All$', term_getline(buf, 10))})

  call StopVimInTerminal(buf)
endfunc

" vim: shiftwidth=2 sts=2 expandtab
