" Utility functions for testing vim9 script " Use a different file name for each run. let s:sequence = 1 " Check that "lines" inside a ":def" function has no error. func CheckDefSuccess(lines) let cwd = getcwd() let fname = 'XdefSuccess' .. s:sequence let s:sequence += 1 call writefile(['def Func()'] + a:lines + ['enddef', 'defcompile'], fname) try exe 'so ' .. fname call Func() delfunc! Func finally call chdir(cwd) call delete(fname) endtry endfunc " Check that "lines" inside ":def" results in an "error" message. " If "lnum" is given check that the error is reported for this line. " Add a line before and after to make it less likely that the line number is " accidentally correct. func CheckDefFailure(lines, error, lnum = -3) let cwd = getcwd() let fname = 'XdefFailure' .. s:sequence let s:sequence += 1 call writefile(['def Func()', '# comment'] + a:lines + ['#comment', 'enddef', 'defcompile'], fname) try call assert_fails('so ' .. fname, a:error, a:lines, a:lnum + 1) finally call chdir(cwd) call delete(fname) delfunc! Func endtry endfunc " Check that "lines" inside ":def" results in an "error" message when executed. " If "lnum" is given check that the error is reported for this line. " Add a line before and after to make it less likely that the line number is " accidentally correct. func CheckDefExecFailure(lines, error, lnum = -3) let cwd = getcwd() let fname = 'XdefExecFailure' .. s:sequence let s:sequence += 1 call writefile(['def Func()', '# comment'] + a:lines + ['#comment', 'enddef'], fname) try exe 'so ' .. fname call assert_fails('call Func()', a:error, a:lines, a:lnum + 1) finally call chdir(cwd) call delete(fname) delfunc! Func endtry endfunc def CheckScriptFailure(lines: list, error: string, lnum = -3) var cwd = getcwd() var fname = 'XScriptFailure' .. s:sequence s:sequence += 1 writefile(lines, fname) try assert_fails('so ' .. fname, error, lines, lnum) finally chdir(cwd) delete(fname) endtry enddef def CheckScriptFailureList(lines: list, errors: list, lnum = -3) var cwd = getcwd() var fname = 'XScriptFailure' .. s:sequence s:sequence += 1 writefile(lines, fname) try assert_fails('so ' .. fname, errors, lines, lnum) finally chdir(cwd) delete(fname) endtry enddef def CheckScriptSuccess(lines: list) var cwd = getcwd() var fname = 'XScriptSuccess' .. s:sequence s:sequence += 1 writefile(lines, fname) try exe 'so ' .. fname finally chdir(cwd) delete(fname) endtry enddef def CheckDefAndScriptSuccess(lines: list) CheckDefSuccess(lines) CheckScriptSuccess(['vim9script'] + lines) enddef " Check that a command fails with the same error when used in a :def function " and when used in Vim9 script. def CheckDefAndScriptFailure(lines: list, error: string, lnum = -3) CheckDefFailure(lines, error, lnum) CheckScriptFailure(['vim9script'] + lines, error, lnum + 1) enddef " Check that a command fails with the same error when executed in a :def " function and when used in Vim9 script. def CheckDefExecAndScriptFailure(lines: list, error: string, lnum = -3) CheckDefExecFailure(lines, error, lnum) CheckScriptFailure(['vim9script'] + lines, error, lnum + 1) enddef