# HG changeset patch # User Bram Moolenaar # Date 1684529103 -7200 # Node ID 0a0b9371957f50e47fb81b5a83a6763622241caf # Parent 2dd215ad5fc2badf2dd0ff3af0de2d34887f9c40 patch 9.0.1570: some tests are slow Commit: https://github.com/vim/vim/commit/bf63011a52a3cc32609ae5945665875062a5ae50 Author: Bram Moolenaar Date: Fri May 19 21:41:02 2023 +0100 patch 9.0.1570: some tests are slow Problem: Some tests are slow. Solution: Make a few test cases faster. diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -791,10 +791,10 @@ func Test_shellcmd_completion() endfunc func Test_expand_star_star() - call mkdir('a/b', 'pR') - call writefile(['asdfasdf'], 'a/b/fileXname') - call feedkeys(":find **/fileXname\\", 'xt') - call assert_equal('find a/b/fileXname', @:) + call mkdir('a/b/c', 'pR') + call writefile(['asdfasdf'], 'a/b/c/fileXname') + call feedkeys(":find a/**/fileXname\\", 'xt') + call assert_equal('find a/b/c/fileXname', @:) bwipe! endfunc diff --git a/src/testdir/test_codestyle.vim b/src/testdir/test_codestyle.vim --- a/src/testdir/test_codestyle.vim +++ b/src/testdir/test_codestyle.vim @@ -2,6 +2,7 @@ def Test_source_files() for fname in glob('../*.[ch]', 0, 1) + bwipe! exe 'edit ' .. fname cursor(1, 1) @@ -26,11 +27,11 @@ def Test_source_files() lnum = search(')\s*{', '', 0, 0, skip) assert_equal(0, lnum, fname .. ': curly after closing paren') - cursor(1, 1) # Examples in comments use double quotes. skip = "getline('.') =~ '\"'" - # Avoid examples that contain: "} else - lnum = search('[^"]}\s*else', '', 0, 0, skip) + + cursor(1, 1) + lnum = search('}\s*else', '', 0, 0, skip) assert_equal(0, lnum, fname .. ': curly before "else"') cursor(1, 1) diff --git a/src/testdir/test_debugger.vim b/src/testdir/test_debugger.vim --- a/src/testdir/test_debugger.vim +++ b/src/testdir/test_debugger.vim @@ -20,39 +20,39 @@ command! -nargs=0 -bar CheckCWD call Che " "options" argument can contain: " 'msec' - time to wait for a match " 'match' - "pattern" to use "lines" as pattern instead of text -func CheckDbgOutput(buf, lines, options = {}) - " Verify the expected output - let lnum = 20 - len(a:lines) - let msec = get(a:options, 'msec', 1000) - for l in a:lines - if get(a:options, 'match', 'equal') ==# 'pattern' - call WaitForAssert({-> assert_match(l, term_getline(a:buf, lnum))}, msec) +def s:CheckDbgOutput(buf: number, lines: list, options = {}) + # Verify the expected output + var lnum = 20 - len(lines) + var msec = get(options, 'msec', 1000) + for l in lines + if get(options, 'match', 'equal') ==# 'pattern' + g:WaitForAssert(() => assert_match(l, term_getline(buf, lnum)), msec) else - call WaitForAssert({-> assert_equal(l, term_getline(a:buf, lnum))}, msec) + g:WaitForAssert(() => assert_equal(l, term_getline(buf, lnum)), msec) endif - let lnum += 1 + lnum += 1 endfor -endfunc +enddef " Run a Vim debugger command " If the expected output argument is supplied, then check for it. -func RunDbgCmd(buf, cmd, ...) - call term_sendkeys(a:buf, a:cmd . "\r") - call TermWait(a:buf) +def s:RunDbgCmd(buf: number, cmd: string, ...extra: list) + term_sendkeys(buf, cmd .. "\r") + g:TermWait(buf) - if a:0 != 0 - let options = #{match: 'equal'} - if a:0 > 1 - call extend(options, a:2) + if len(extra) > 0 + var options = {match: 'equal'} + if len(extra) > 1 + extend(options, extra[1]) endif - call CheckDbgOutput(a:buf, a:1, options) + s:CheckDbgOutput(buf, extra[0], options) endif -endfunc +enddef " Debugger tests -func Test_Debugger() - " Create a Vim script with some functions - let lines =<< trim END +def Test_Debugger() + # Create a Vim script with some functions + var lines =<< trim END func Foo() let var1 = 1 let var2 = Bar(var1) + 9 @@ -81,257 +81,257 @@ func Test_Debugger() endfor enddef END - call writefile(lines, 'XtestDebug.vim', 'D') + writefile(lines, 'XtestDebug.vim', 'D') - " Start Vim in a terminal - let buf = RunVimInTerminal('-S XtestDebug.vim', {}) + # Start Vim in a terminal + var buf = g:RunVimInTerminal('-S XtestDebug.vim', {}) - " Start the Vim debugger - call RunDbgCmd(buf, ':debug echo Foo()', ['cmd: echo Foo()']) + # Start the Vim debugger + s:RunDbgCmd(buf, ':debug echo Foo()', ['cmd: echo Foo()']) - " Create a few stack frames by stepping through functions - call RunDbgCmd(buf, 'step', ['line 1: let var1 = 1']) - call RunDbgCmd(buf, 'step', ['line 2: let var2 = Bar(var1) + 9']) - call RunDbgCmd(buf, 'step', ['line 1: let var1 = 2 + a:var']) - call RunDbgCmd(buf, 'step', ['line 2: let var2 = Bazz(var1) + 4']) - call RunDbgCmd(buf, 'step', ['line 1: try']) - call RunDbgCmd(buf, 'step', ['line 2: let var1 = 3 + a:var']) - call RunDbgCmd(buf, 'step', ['line 3: let var3 = "another var"']) + # Create a few stack frames by stepping through functions + s:RunDbgCmd(buf, 'step', ['line 1: let var1 = 1']) + s:RunDbgCmd(buf, 'step', ['line 2: let var2 = Bar(var1) + 9']) + s:RunDbgCmd(buf, 'step', ['line 1: let var1 = 2 + a:var']) + s:RunDbgCmd(buf, 'step', ['line 2: let var2 = Bazz(var1) + 4']) + s:RunDbgCmd(buf, 'step', ['line 1: try']) + s:RunDbgCmd(buf, 'step', ['line 2: let var1 = 3 + a:var']) + s:RunDbgCmd(buf, 'step', ['line 3: let var3 = "another var"']) - " check backtrace - call RunDbgCmd(buf, 'backtrace', [ - \ ' 2 function Foo[2]', - \ ' 1 Bar[2]', - \ '->0 Bazz', - \ 'line 3: let var3 = "another var"']) + # check backtrace + s:RunDbgCmd(buf, 'backtrace', [ + ' 2 function Foo[2]', + ' 1 Bar[2]', + '->0 Bazz', + 'line 3: let var3 = "another var"']) - " Check variables in different stack frames - call RunDbgCmd(buf, 'echo var1', ['6']) + # Check variables in different stack frames + s:RunDbgCmd(buf, 'echo var1', ['6']) - call RunDbgCmd(buf, 'up') - call RunDbgCmd(buf, 'back', [ - \ ' 2 function Foo[2]', - \ '->1 Bar[2]', - \ ' 0 Bazz', - \ 'line 3: let var3 = "another var"']) - call RunDbgCmd(buf, 'echo var1', ['3']) + s:RunDbgCmd(buf, 'up') + s:RunDbgCmd(buf, 'back', [ + ' 2 function Foo[2]', + '->1 Bar[2]', + ' 0 Bazz', + 'line 3: let var3 = "another var"']) + s:RunDbgCmd(buf, 'echo var1', ['3']) - call RunDbgCmd(buf, 'u') - call RunDbgCmd(buf, 'bt', [ - \ '->2 function Foo[2]', - \ ' 1 Bar[2]', - \ ' 0 Bazz', - \ 'line 3: let var3 = "another var"']) - call RunDbgCmd(buf, 'echo var1', ['1']) + s:RunDbgCmd(buf, 'u') + s:RunDbgCmd(buf, 'bt', [ + '->2 function Foo[2]', + ' 1 Bar[2]', + ' 0 Bazz', + 'line 3: let var3 = "another var"']) + s:RunDbgCmd(buf, 'echo var1', ['1']) - " Undefined variables - call RunDbgCmd(buf, 'step') - call RunDbgCmd(buf, 'frame 2') - call RunDbgCmd(buf, 'echo var3', [ - \ 'Error detected while processing function Foo[2]..Bar[2]..Bazz:', - \ 'line 4:', - \ 'E121: Undefined variable: var3']) + # Undefined variables + s:RunDbgCmd(buf, 'step') + s:RunDbgCmd(buf, 'frame 2') + s:RunDbgCmd(buf, 'echo var3', [ + 'Error detected while processing function Foo[2]..Bar[2]..Bazz:', + 'line 4:', + 'E121: Undefined variable: var3']) - " var3 is defined in this level with some other value - call RunDbgCmd(buf, 'fr 0') - call RunDbgCmd(buf, 'echo var3', ['another var']) + # var3 is defined in this level with some other value + s:RunDbgCmd(buf, 'fr 0') + s:RunDbgCmd(buf, 'echo var3', ['another var']) - call RunDbgCmd(buf, 'step') - call RunDbgCmd(buf, '') - call RunDbgCmd(buf, '') - call RunDbgCmd(buf, '') - call RunDbgCmd(buf, '') - call RunDbgCmd(buf, 'step', [ - \ 'function Foo[2]..Bar', - \ 'line 3: End of function']) - call RunDbgCmd(buf, 'up') + s:RunDbgCmd(buf, 'step') + s:RunDbgCmd(buf, '') + s:RunDbgCmd(buf, '') + s:RunDbgCmd(buf, '') + s:RunDbgCmd(buf, '') + s:RunDbgCmd(buf, 'step', [ + 'function Foo[2]..Bar', + 'line 3: End of function']) + s:RunDbgCmd(buf, 'up') - " Undefined var2 - call RunDbgCmd(buf, 'echo var2', [ - \ 'Error detected while processing function Foo[2]..Bar:', - \ 'line 3:', - \ 'E121: Undefined variable: var2']) + # Undefined var2 + s:RunDbgCmd(buf, 'echo var2', [ + 'Error detected while processing function Foo[2]..Bar:', + 'line 3:', + 'E121: Undefined variable: var2']) - " Var2 is defined with 10 - call RunDbgCmd(buf, 'down') - call RunDbgCmd(buf, 'echo var2', ['10']) + # Var2 is defined with 10 + s:RunDbgCmd(buf, 'down') + s:RunDbgCmd(buf, 'echo var2', ['10']) - " Backtrace movements - call RunDbgCmd(buf, 'b', [ - \ ' 1 function Foo[2]', - \ '->0 Bar', - \ 'line 3: End of function']) + # Backtrace movements + s:RunDbgCmd(buf, 'b', [ + ' 1 function Foo[2]', + '->0 Bar', + 'line 3: End of function']) - " next command cannot go down, we are on bottom - call RunDbgCmd(buf, 'down', ['frame is zero']) - call RunDbgCmd(buf, 'up') + # next command cannot go down, we are on bottom + s:RunDbgCmd(buf, 'down', ['frame is zero']) + s:RunDbgCmd(buf, 'up') - " next command cannot go up, we are on top - call RunDbgCmd(buf, 'up', ['frame at highest level: 1']) - call RunDbgCmd(buf, 'where', [ - \ '->1 function Foo[2]', - \ ' 0 Bar', - \ 'line 3: End of function']) + # next command cannot go up, we are on top + s:RunDbgCmd(buf, 'up', ['frame at highest level: 1']) + s:RunDbgCmd(buf, 'where', [ + '->1 function Foo[2]', + ' 0 Bar', + 'line 3: End of function']) - " fil is not frame or finish, it is file - call RunDbgCmd(buf, 'fil', ['"[No Name]" --No lines in buffer--']) + # fil is not frame or finish, it is file + s:RunDbgCmd(buf, 'fil', ['"[No Name]" --No lines in buffer--']) - " relative backtrace movement - call RunDbgCmd(buf, 'fr -1') - call RunDbgCmd(buf, 'frame', [ - \ ' 1 function Foo[2]', - \ '->0 Bar', - \ 'line 3: End of function']) + # relative backtrace movement + s:RunDbgCmd(buf, 'fr -1') + s:RunDbgCmd(buf, 'frame', [ + ' 1 function Foo[2]', + '->0 Bar', + 'line 3: End of function']) - call RunDbgCmd(buf, 'fr +1') - call RunDbgCmd(buf, 'fram', [ - \ '->1 function Foo[2]', - \ ' 0 Bar', - \ 'line 3: End of function']) + s:RunDbgCmd(buf, 'fr +1') + s:RunDbgCmd(buf, 'fram', [ + '->1 function Foo[2]', + ' 0 Bar', + 'line 3: End of function']) - " go beyond limits does not crash - call RunDbgCmd(buf, 'fr 100', ['frame at highest level: 1']) - call RunDbgCmd(buf, 'fra', [ - \ '->1 function Foo[2]', - \ ' 0 Bar', - \ 'line 3: End of function']) + # go beyond limits does not crash + s:RunDbgCmd(buf, 'fr 100', ['frame at highest level: 1']) + s:RunDbgCmd(buf, 'fra', [ + '->1 function Foo[2]', + ' 0 Bar', + 'line 3: End of function']) - call RunDbgCmd(buf, 'frame -40', ['frame is zero']) - call RunDbgCmd(buf, 'fram', [ - \ ' 1 function Foo[2]', - \ '->0 Bar', - \ 'line 3: End of function']) + s:RunDbgCmd(buf, 'frame -40', ['frame is zero']) + s:RunDbgCmd(buf, 'fram', [ + ' 1 function Foo[2]', + '->0 Bar', + 'line 3: End of function']) - " final result 19 - call RunDbgCmd(buf, 'cont', ['19']) + # final result 19 + s:RunDbgCmd(buf, 'cont', ['19']) - " breakpoints tests + # breakpoints tests - " Start a debug session, so that reading the last line from the terminal - " works properly. - call RunDbgCmd(buf, ':debug echo Foo()', ['cmd: echo Foo()']) + # Start a debug session, so that reading the last line from the terminal + # works properly. + s:RunDbgCmd(buf, ':debug echo Foo()', ['cmd: echo Foo()']) - " No breakpoints - call RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) + # No breakpoints + s:RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) - " Place some breakpoints - call RunDbgCmd(buf, 'breaka func Bar') - call RunDbgCmd(buf, 'breaklis', [' 1 func Bar line 1']) - call RunDbgCmd(buf, 'breakadd func 3 Bazz') - call RunDbgCmd(buf, 'breaklist', [' 1 func Bar line 1', - \ ' 2 func Bazz line 3']) + # Place some breakpoints + s:RunDbgCmd(buf, 'breaka func Bar') + s:RunDbgCmd(buf, 'breaklis', [' 1 func Bar line 1']) + s:RunDbgCmd(buf, 'breakadd func 3 Bazz') + s:RunDbgCmd(buf, 'breaklist', [' 1 func Bar line 1', + ' 2 func Bazz line 3']) - " Check whether the breakpoints are hit - call RunDbgCmd(buf, 'cont', [ - \ 'Breakpoint in "Bar" line 1', - \ 'function Foo[2]..Bar', - \ 'line 1: let var1 = 2 + a:var']) - call RunDbgCmd(buf, 'cont', [ - \ 'Breakpoint in "Bazz" line 3', - \ 'function Foo[2]..Bar[2]..Bazz', - \ 'line 3: let var3 = "another var"']) + # Check whether the breakpoints are hit + s:RunDbgCmd(buf, 'cont', [ + 'Breakpoint in "Bar" line 1', + 'function Foo[2]..Bar', + 'line 1: let var1 = 2 + a:var']) + s:RunDbgCmd(buf, 'cont', [ + 'Breakpoint in "Bazz" line 3', + 'function Foo[2]..Bar[2]..Bazz', + 'line 3: let var3 = "another var"']) - " Delete the breakpoints - call RunDbgCmd(buf, 'breakd 1') - call RunDbgCmd(buf, 'breakli', [' 2 func Bazz line 3']) - call RunDbgCmd(buf, 'breakdel func 3 Bazz') - call RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) + # Delete the breakpoints + s:RunDbgCmd(buf, 'breakd 1') + s:RunDbgCmd(buf, 'breakli', [' 2 func Bazz line 3']) + s:RunDbgCmd(buf, 'breakdel func 3 Bazz') + s:RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) - call RunDbgCmd(buf, 'cont') + s:RunDbgCmd(buf, 'cont') - " Make sure the breakpoints are removed - call RunDbgCmd(buf, ':echo Foo()', ['19']) + # Make sure the breakpoints are removed + s:RunDbgCmd(buf, ':echo Foo()', ['19']) - " Delete a non-existing breakpoint - call RunDbgCmd(buf, ':breakdel 2', ['E161: Breakpoint not found: 2']) + # Delete a non-existing breakpoint + s:RunDbgCmd(buf, ':breakdel 2', ['E161: Breakpoint not found: 2']) - " Expression breakpoint - call RunDbgCmd(buf, ':breakadd func 2 Bazz') - call RunDbgCmd(buf, ':echo Bazz(1)', [ - \ 'Entering Debug mode. Type "cont" to continue.', - \ 'function Bazz', - \ 'line 2: let var1 = 3 + a:var']) - call RunDbgCmd(buf, 'step') - call RunDbgCmd(buf, 'step') - call RunDbgCmd(buf, 'breaka expr var3') - call RunDbgCmd(buf, 'breakl', [' 3 func Bazz line 2', + # Expression breakpoint + s:RunDbgCmd(buf, ':breakadd func 2 Bazz') + s:RunDbgCmd(buf, ':echo Bazz(1)', [ + 'Entering Debug mode. Type "cont" to continue.', + 'function Bazz', + 'line 2: let var1 = 3 + a:var']) + s:RunDbgCmd(buf, 'step') + s:RunDbgCmd(buf, 'step') + s:RunDbgCmd(buf, 'breaka expr var3') + s:RunDbgCmd(buf, 'breakl', [' 3 func Bazz line 2', \ ' 4 expr var3']) - call RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 5', - \ 'Oldval = "''another var''"', - \ 'Newval = "''value2''"', - \ 'function Bazz', - \ 'line 5: catch']) + s:RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 5', + 'Oldval = "''another var''"', + 'Newval = "''value2''"', + 'function Bazz', + 'line 5: catch']) - call RunDbgCmd(buf, 'breakdel *') - call RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) + s:RunDbgCmd(buf, 'breakdel *') + s:RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) - " Check for error cases - call RunDbgCmd(buf, 'breakadd abcd', [ - \ 'Error detected while processing function Bazz:', - \ 'line 5:', - \ 'E475: Invalid argument: abcd']) - call RunDbgCmd(buf, 'breakadd func', ['E475: Invalid argument: func']) - call RunDbgCmd(buf, 'breakadd func 2', ['E475: Invalid argument: func 2']) - call RunDbgCmd(buf, 'breaka func a()', ['E475: Invalid argument: func a()']) - call RunDbgCmd(buf, 'breakd abcd', ['E475: Invalid argument: abcd']) - call RunDbgCmd(buf, 'breakd func', ['E475: Invalid argument: func']) - call RunDbgCmd(buf, 'breakd func a()', ['E475: Invalid argument: func a()']) - call RunDbgCmd(buf, 'breakd func a', ['E161: Breakpoint not found: func a']) - call RunDbgCmd(buf, 'breakd expr', ['E475: Invalid argument: expr']) - call RunDbgCmd(buf, 'breakd expr x', ['E161: Breakpoint not found: expr x']) + # Check for error cases + s:RunDbgCmd(buf, 'breakadd abcd', [ + 'Error detected while processing function Bazz:', + 'line 5:', + 'E475: Invalid argument: abcd']) + s:RunDbgCmd(buf, 'breakadd func', ['E475: Invalid argument: func']) + s:RunDbgCmd(buf, 'breakadd func 2', ['E475: Invalid argument: func 2']) + s:RunDbgCmd(buf, 'breaka func a()', ['E475: Invalid argument: func a()']) + s:RunDbgCmd(buf, 'breakd abcd', ['E475: Invalid argument: abcd']) + s:RunDbgCmd(buf, 'breakd func', ['E475: Invalid argument: func']) + s:RunDbgCmd(buf, 'breakd func a()', ['E475: Invalid argument: func a()']) + s:RunDbgCmd(buf, 'breakd func a', ['E161: Breakpoint not found: func a']) + s:RunDbgCmd(buf, 'breakd expr', ['E475: Invalid argument: expr']) + s:RunDbgCmd(buf, 'breakd expr x', ['E161: Breakpoint not found: expr x']) - " finish the current function - call RunDbgCmd(buf, 'finish', [ - \ 'function Bazz', - \ 'line 8: End of function']) - call RunDbgCmd(buf, 'cont') + # finish the current function + s:RunDbgCmd(buf, 'finish', [ + 'function Bazz', + 'line 8: End of function']) + s:RunDbgCmd(buf, 'cont') - " Test for :next - call RunDbgCmd(buf, ':debug echo Bar(1)') - call RunDbgCmd(buf, 'step') - call RunDbgCmd(buf, 'next') - call RunDbgCmd(buf, '', [ - \ 'function Bar', - \ 'line 3: return var2']) - call RunDbgCmd(buf, 'c') + # Test for :next + s:RunDbgCmd(buf, ':debug echo Bar(1)') + s:RunDbgCmd(buf, 'step') + s:RunDbgCmd(buf, 'next') + s:RunDbgCmd(buf, '', [ + 'function Bar', + 'line 3: return var2']) + s:RunDbgCmd(buf, 'c') - " Test for :interrupt - call RunDbgCmd(buf, ':debug echo Bazz(1)') - call RunDbgCmd(buf, 'step') - call RunDbgCmd(buf, 'step') - call RunDbgCmd(buf, 'interrupt', [ - \ 'Exception thrown: Vim:Interrupt', - \ 'function Bazz', - \ 'line 5: catch']) - call RunDbgCmd(buf, 'c') + # Test for :interrupt + s:RunDbgCmd(buf, ':debug echo Bazz(1)') + s:RunDbgCmd(buf, 'step') + s:RunDbgCmd(buf, 'step') + s:RunDbgCmd(buf, 'interrupt', [ + 'Exception thrown: Vim:Interrupt', + 'function Bazz', + 'line 5: catch']) + s:RunDbgCmd(buf, 'c') - " Test showing local variable in :def function - call RunDbgCmd(buf, ':breakadd func 2 Vim9Func') - call RunDbgCmd(buf, ':call Vim9Func()', ['line 2: for _ in [1, 2]']) - call RunDbgCmd(buf, 'next', ['line 2: for _ in [1, 2]']) - call RunDbgCmd(buf, 'echo cmd', ['confirm']) - call RunDbgCmd(buf, 'breakdel *') - call RunDbgCmd(buf, 'cont') + # Test showing local variable in :def function + s:RunDbgCmd(buf, ':breakadd func 2 Vim9Func') + s:RunDbgCmd(buf, ':call Vim9Func()', ['line 2: for _ in [1, 2]']) + s:RunDbgCmd(buf, 'next', ['line 2: for _ in [1, 2]']) + s:RunDbgCmd(buf, 'echo cmd', ['confirm']) + s:RunDbgCmd(buf, 'breakdel *') + s:RunDbgCmd(buf, 'cont') - " Test for :quit - call RunDbgCmd(buf, ':debug echo Foo()') - call RunDbgCmd(buf, 'breakdel *') - call RunDbgCmd(buf, 'breakadd func 3 Foo') - call RunDbgCmd(buf, 'breakadd func 3 Bazz') - call RunDbgCmd(buf, 'cont', [ - \ 'Breakpoint in "Bazz" line 3', - \ 'function Foo[2]..Bar[2]..Bazz', - \ 'line 3: let var3 = "another var"']) - call RunDbgCmd(buf, 'quit', [ - \ 'Breakpoint in "Foo" line 3', - \ 'function Foo', - \ 'line 3: return var2']) - call RunDbgCmd(buf, 'breakdel *') - call RunDbgCmd(buf, 'quit') - call RunDbgCmd(buf, 'enew! | only!') + # Test for :quit + s:RunDbgCmd(buf, ':debug echo Foo()') + s:RunDbgCmd(buf, 'breakdel *') + s:RunDbgCmd(buf, 'breakadd func 3 Foo') + s:RunDbgCmd(buf, 'breakadd func 3 Bazz') + s:RunDbgCmd(buf, 'cont', [ + 'Breakpoint in "Bazz" line 3', + 'function Foo[2]..Bar[2]..Bazz', + 'line 3: let var3 = "another var"']) + s:RunDbgCmd(buf, 'quit', [ + 'Breakpoint in "Foo" line 3', + 'function Foo', + 'line 3: return var2']) + s:RunDbgCmd(buf, 'breakdel *') + s:RunDbgCmd(buf, 'quit') + s:RunDbgCmd(buf, 'enew! | only!') - call StopVimInTerminal(buf) -endfunc + g:StopVimInTerminal(buf) +enddef func Test_Debugger_breakadd() " Tests for :breakadd file and :breakadd here @@ -347,11 +347,11 @@ func Test_Debugger_breakadd() " Start Vim in a terminal let buf = RunVimInTerminal('XdebugBreakadd.vim', {}) - call RunDbgCmd(buf, ':breakadd file 2 XdebugBreakadd.vim') - call RunDbgCmd(buf, ':4 | breakadd here') - call RunDbgCmd(buf, ':source XdebugBreakadd.vim', ['line 2: let var2 = 20']) - call RunDbgCmd(buf, 'cont', ['line 4: let var4 = 40']) - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, ':breakadd file 2 XdebugBreakadd.vim') + call s:RunDbgCmd(buf, ':4 | breakadd here') + call s:RunDbgCmd(buf, ':source XdebugBreakadd.vim', ['line 2: let var2 = 20']) + call s:RunDbgCmd(buf, 'cont', ['line 4: let var4 = 40']) + call s:RunDbgCmd(buf, 'cont') call StopVimInTerminal(buf) @@ -372,24 +372,24 @@ func Test_Debugger_breakadd_expr() " Start Vim in a terminal let buf = RunVimInTerminal('XdebugBreakExpr.vim', {}) - call RunDbgCmd(buf, ':let g:Xtest_var = 10') - call RunDbgCmd(buf, ':breakadd expr g:Xtest_var') - call RunDbgCmd(buf, ':source %') + call s:RunDbgCmd(buf, ':let g:Xtest_var = 10') + call s:RunDbgCmd(buf, ':breakadd expr g:Xtest_var') + call s:RunDbgCmd(buf, ':source %') let expected =<< trim eval END Oldval = "10" Newval = "11" {fnamemodify('XdebugBreakExpr.vim', ':p')} line 1: let g:Xtest_var += 1 END - call RunDbgCmd(buf, ':source %', expected) - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, ':source %', expected) + call s:RunDbgCmd(buf, 'cont') let expected =<< trim eval END Oldval = "11" Newval = "12" {fnamemodify('XdebugBreakExpr.vim', ':p')} line 1: let g:Xtest_var += 1 END - call RunDbgCmd(buf, ':source %', expected) + call s:RunDbgCmd(buf, ':source %', expected) call StopVimInTerminal(buf) endfunc @@ -411,9 +411,9 @@ def Test_Debugger_breakadd_vim9_expr() call g:TermWait(buf, g:RunningWithValgrind() ? 1000 : 50) # Despite the failure the functions are defined - g:RunDbgCmd(buf, ':function g:EarlyFunc', + s:RunDbgCmd(buf, ':function g:EarlyFunc', ['function EarlyFunc()', 'endfunction'], {match: 'pattern'}) - g:RunDbgCmd(buf, ':function g:LaterFunc', + s:RunDbgCmd(buf, ':function g:LaterFunc', ['function LaterFunc()', 'endfunction'], {match: 'pattern'}) call g:StopVimInTerminal(buf) @@ -435,7 +435,7 @@ def Test_Debugger_break_at_return() var buf = g:RunVimInTerminal('-S XdebugBreakRet.vim', {wait_for_ruler: 0}) call g:TermWait(buf, g:RunningWithValgrind() ? 1000 : 50) - g:RunDbgCmd(buf, ':call GetNum()', + s:RunDbgCmd(buf, ':call GetNum()', ['line 1: return 1 + 2 + 3'], {match: 'pattern'}) call g:StopVimInTerminal(buf) @@ -474,19 +474,19 @@ func Test_Backtrace_Through_Source() let buf = RunVimInTerminal('-S Xtest1.vim', {}) - call RunDbgCmd(buf, + call s:RunDbgCmd(buf, \ ':debug call GlobalFunction()', \ ['cmd: call GlobalFunction()']) - call RunDbgCmd(buf, 'step', ['line 1: call CallAFunction()']) + call s:RunDbgCmd(buf, 'step', ['line 1: call CallAFunction()']) - call RunDbgCmd(buf, 'backtrace', ['>backtrace', + call s:RunDbgCmd(buf, 'backtrace', ['>backtrace', \ '->0 function GlobalFunction', \ 'line 1: call CallAFunction()']) - call RunDbgCmd(buf, 'step', ['line 1: call SourceAnotherFile()']) - call RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim']) + call s:RunDbgCmd(buf, 'step', ['line 1: call SourceAnotherFile()']) + call s:RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim']) - call RunDbgCmd(buf, 'backtrace', ['>backtrace', + call s:RunDbgCmd(buf, 'backtrace', ['>backtrace', \ ' 2 function GlobalFunction[1]', \ ' 1 CallAFunction[1]', \ '->0 SourceAnotherFile', @@ -494,8 +494,8 @@ func Test_Backtrace_Through_Source() " Step into the 'source' command. Note that we print the full trace all the " way though the source command. - call RunDbgCmd(buf, 'step', ['line 1: func DoAThing()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: func DoAThing()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 3 function GlobalFunction[1]', \ ' 2 CallAFunction[1]', @@ -503,8 +503,8 @@ func Test_Backtrace_Through_Source() \ '->0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()']) - call RunDbgCmd( buf, 'up' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'up' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 3 function GlobalFunction[1]', \ ' 2 CallAFunction[1]', @@ -512,8 +512,8 @@ func Test_Backtrace_Through_Source() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'up' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'up' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 3 function GlobalFunction[1]', \ '->2 CallAFunction[1]', @@ -521,8 +521,8 @@ func Test_Backtrace_Through_Source() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'up' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'up' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ '->3 function GlobalFunction[1]', \ ' 2 CallAFunction[1]', @@ -530,8 +530,8 @@ func Test_Backtrace_Through_Source() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'up', [ 'frame at highest level: 3' ] ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'up', [ 'frame at highest level: 3' ] ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ '->3 function GlobalFunction[1]', \ ' 2 CallAFunction[1]', @@ -539,8 +539,8 @@ func Test_Backtrace_Through_Source() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'down' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'down' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 3 function GlobalFunction[1]', \ '->2 CallAFunction[1]', @@ -548,8 +548,8 @@ func Test_Backtrace_Through_Source() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'down' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'down' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 3 function GlobalFunction[1]', \ ' 2 CallAFunction[1]', @@ -557,8 +557,8 @@ func Test_Backtrace_Through_Source() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'down' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'down' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 3 function GlobalFunction[1]', \ ' 2 CallAFunction[1]', @@ -566,12 +566,12 @@ func Test_Backtrace_Through_Source() \ '->0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'down', [ 'frame is zero' ] ) + call s:RunDbgCmd( buf, 'down', [ 'frame is zero' ] ) " step until we have another meaningful trace - call RunDbgCmd(buf, 'step', ['line 5: func File2Function()']) - call RunDbgCmd(buf, 'step', ['line 9: call File2Function()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 5: func File2Function()']) + call s:RunDbgCmd(buf, 'step', ['line 9: call File2Function()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 3 function GlobalFunction[1]', \ ' 2 CallAFunction[1]', @@ -579,9 +579,9 @@ func Test_Backtrace_Through_Source() \ '->0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 9: call File2Function()']) - call RunDbgCmd(buf, 'step', ['line 1: call DoAThing()']) - call RunDbgCmd(buf, 'step', ['line 1: echo "DoAThing"']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: call DoAThing()']) + call s:RunDbgCmd(buf, 'step', ['line 1: echo "DoAThing"']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 5 function GlobalFunction[1]', \ ' 4 CallAFunction[1]', @@ -592,19 +592,19 @@ func Test_Backtrace_Through_Source() \ 'line 1: echo "DoAThing"']) " Now, step (back to Xfile1.vim), and call the function _in_ Xfile2.vim - call RunDbgCmd(buf, 'step', ['line 1: End of function']) - call RunDbgCmd(buf, 'step', ['line 1: End of function']) - call RunDbgCmd(buf, 'step', ['line 10: End of sourced file']) - call RunDbgCmd(buf, 'step', ['line 1: End of function']) - call RunDbgCmd(buf, 'step', ['line 2: call File2Function()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: End of function']) + call s:RunDbgCmd(buf, 'step', ['line 1: End of function']) + call s:RunDbgCmd(buf, 'step', ['line 10: End of sourced file']) + call s:RunDbgCmd(buf, 'step', ['line 1: End of function']) + call s:RunDbgCmd(buf, 'step', ['line 2: call File2Function()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 1 function GlobalFunction[1]', \ '->0 CallAFunction', \ 'line 2: call File2Function()']) - call RunDbgCmd(buf, 'step', ['line 1: call DoAThing()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: call DoAThing()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 2 function GlobalFunction[1]', \ ' 1 CallAFunction[2]', @@ -649,29 +649,29 @@ func Test_Backtrace_Autocmd() let buf = RunVimInTerminal('-S Xtest1.vim', {}) - call RunDbgCmd(buf, + call s:RunDbgCmd(buf, \ ':debug doautocmd User TestGlobalFunction', \ ['cmd: doautocmd User TestGlobalFunction']) - call RunDbgCmd(buf, 'step', ['cmd: call GlobalFunction() | echo "Done"']) + call s:RunDbgCmd(buf, 'step', ['cmd: call GlobalFunction() | echo "Done"']) " At this point the only thing in the stack is the autocommand - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ '->0 User Autocommands for "TestGlobalFunction"', \ 'cmd: call GlobalFunction() | echo "Done"']) " And now we're back into the call stack - call RunDbgCmd(buf, 'step', ['line 1: call CallAFunction()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: call CallAFunction()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 1 User Autocommands for "TestGlobalFunction"', \ '->0 function GlobalFunction', \ 'line 1: call CallAFunction()']) - call RunDbgCmd(buf, 'step', ['line 1: call SourceAnotherFile()']) - call RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim']) + call s:RunDbgCmd(buf, 'step', ['line 1: call SourceAnotherFile()']) + call s:RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 3 User Autocommands for "TestGlobalFunction"', \ ' 2 function GlobalFunction[1]', @@ -681,8 +681,8 @@ func Test_Backtrace_Autocmd() " Step into the 'source' command. Note that we print the full trace all the " way though the source command. - call RunDbgCmd(buf, 'step', ['line 1: func DoAThing()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: func DoAThing()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 4 User Autocommands for "TestGlobalFunction"', \ ' 3 function GlobalFunction[1]', @@ -691,8 +691,8 @@ func Test_Backtrace_Autocmd() \ '->0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()']) - call RunDbgCmd( buf, 'up' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'up' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 4 User Autocommands for "TestGlobalFunction"', \ ' 3 function GlobalFunction[1]', @@ -701,8 +701,8 @@ func Test_Backtrace_Autocmd() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'up' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'up' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 4 User Autocommands for "TestGlobalFunction"', \ ' 3 function GlobalFunction[1]', @@ -711,8 +711,8 @@ func Test_Backtrace_Autocmd() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'up' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'up' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 4 User Autocommands for "TestGlobalFunction"', \ '->3 function GlobalFunction[1]', @@ -721,8 +721,8 @@ func Test_Backtrace_Autocmd() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'up' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'up' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ '->4 User Autocommands for "TestGlobalFunction"', \ ' 3 function GlobalFunction[1]', @@ -731,8 +731,8 @@ func Test_Backtrace_Autocmd() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'up', [ 'frame at highest level: 4' ] ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'up', [ 'frame at highest level: 4' ] ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ '->4 User Autocommands for "TestGlobalFunction"', \ ' 3 function GlobalFunction[1]', @@ -741,8 +741,8 @@ func Test_Backtrace_Autocmd() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'down' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'down' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 4 User Autocommands for "TestGlobalFunction"', \ '->3 function GlobalFunction[1]', @@ -752,8 +752,8 @@ func Test_Backtrace_Autocmd() \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'down' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'down' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 4 User Autocommands for "TestGlobalFunction"', \ ' 3 function GlobalFunction[1]', @@ -762,8 +762,8 @@ func Test_Backtrace_Autocmd() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'down' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'down' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 4 User Autocommands for "TestGlobalFunction"', \ ' 3 function GlobalFunction[1]', @@ -772,8 +772,8 @@ func Test_Backtrace_Autocmd() \ ' 0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'down' ) - call RunDbgCmd( buf, 'backtrace', [ + call s:RunDbgCmd( buf, 'down' ) + call s:RunDbgCmd( buf, 'backtrace', [ \ '>backtrace', \ ' 4 User Autocommands for "TestGlobalFunction"', \ ' 3 function GlobalFunction[1]', @@ -782,12 +782,12 @@ func Test_Backtrace_Autocmd() \ '->0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 1: func DoAThing()' ] ) - call RunDbgCmd( buf, 'down', [ 'frame is zero' ] ) + call s:RunDbgCmd( buf, 'down', [ 'frame is zero' ] ) " step until we have another meaningful trace - call RunDbgCmd(buf, 'step', ['line 5: func File2Function()']) - call RunDbgCmd(buf, 'step', ['line 9: call File2Function()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 5: func File2Function()']) + call s:RunDbgCmd(buf, 'step', ['line 9: call File2Function()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 4 User Autocommands for "TestGlobalFunction"', \ ' 3 function GlobalFunction[1]', @@ -796,9 +796,9 @@ func Test_Backtrace_Autocmd() \ '->0 script ' .. getcwd() .. '/Xtest2.vim', \ 'line 9: call File2Function()']) - call RunDbgCmd(buf, 'step', ['line 1: call DoAThing()']) - call RunDbgCmd(buf, 'step', ['line 1: echo "DoAThing"']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: call DoAThing()']) + call s:RunDbgCmd(buf, 'step', ['line 1: echo "DoAThing"']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 6 User Autocommands for "TestGlobalFunction"', \ ' 5 function GlobalFunction[1]', @@ -810,20 +810,20 @@ func Test_Backtrace_Autocmd() \ 'line 1: echo "DoAThing"']) " Now, step (back to Xfile1.vim), and call the function _in_ Xfile2.vim - call RunDbgCmd(buf, 'step', ['line 1: End of function']) - call RunDbgCmd(buf, 'step', ['line 1: End of function']) - call RunDbgCmd(buf, 'step', ['line 10: End of sourced file']) - call RunDbgCmd(buf, 'step', ['line 1: End of function']) - call RunDbgCmd(buf, 'step', ['line 2: call File2Function()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: End of function']) + call s:RunDbgCmd(buf, 'step', ['line 1: End of function']) + call s:RunDbgCmd(buf, 'step', ['line 10: End of sourced file']) + call s:RunDbgCmd(buf, 'step', ['line 1: End of function']) + call s:RunDbgCmd(buf, 'step', ['line 2: call File2Function()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 2 User Autocommands for "TestGlobalFunction"', \ ' 1 function GlobalFunction[1]', \ '->0 CallAFunction', \ 'line 2: call File2Function()']) - call RunDbgCmd(buf, 'step', ['line 1: call DoAThing()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: call DoAThing()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 3 User Autocommands for "TestGlobalFunction"', \ ' 2 function GlobalFunction[1]', @@ -834,8 +834,8 @@ func Test_Backtrace_Autocmd() " Now unwind so that we get back to the original autocommand (and the second " cmd echo "Done") - call RunDbgCmd(buf, 'finish', ['line 1: End of function']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'finish', ['line 1: End of function']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 3 User Autocommands for "TestGlobalFunction"', \ ' 2 function GlobalFunction[1]', @@ -843,23 +843,23 @@ func Test_Backtrace_Autocmd() \ '->0 File2Function', \ 'line 1: End of function']) - call RunDbgCmd(buf, 'finish', ['line 2: End of function']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'finish', ['line 2: End of function']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 2 User Autocommands for "TestGlobalFunction"', \ ' 1 function GlobalFunction[1]', \ '->0 CallAFunction', \ 'line 2: End of function']) - call RunDbgCmd(buf, 'finish', ['line 1: End of function']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'finish', ['line 1: End of function']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 1 User Autocommands for "TestGlobalFunction"', \ '->0 function GlobalFunction', \ 'line 1: End of function']) - call RunDbgCmd(buf, 'step', ['cmd: echo "Done"']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['cmd: echo "Done"']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ '->0 User Autocommands for "TestGlobalFunction"', \ 'cmd: echo "Done"']) @@ -906,18 +906,18 @@ func Test_Backtrace_CmdLine() " Need to wait for the vim-in-terminal to be ready. " With valgrind this can take quite long. - call CheckDbgOutput(buf, ['command line', + call s:CheckDbgOutput(buf, ['command line', \ 'cmd: call GlobalFunction()'], #{msec: 5000}) " At this point the only thing in the stack is the cmdline - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ '->0 command line', \ 'cmd: call GlobalFunction()']) " And now we're back into the call stack - call RunDbgCmd(buf, 'step', ['line 1: call CallAFunction()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: call CallAFunction()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '>backtrace', \ ' 1 command line', \ '->0 function GlobalFunction', @@ -970,32 +970,32 @@ func Test_Backtrace_DefFunction() let buf = RunVimInTerminal('-S Xtest1.vim', {}) - call RunDbgCmd(buf, + call s:RunDbgCmd(buf, \ ':debug call GlobalFunction()', \ ['cmd: call GlobalFunction()']) - call RunDbgCmd(buf, 'step', ['line 1: var some = "some var"']) - call RunDbgCmd(buf, 'step', ['line 2: CallAFunction()']) - call RunDbgCmd(buf, 'echo some', ['some var']) + call s:RunDbgCmd(buf, 'step', ['line 1: var some = "some var"']) + call s:RunDbgCmd(buf, 'step', ['line 2: CallAFunction()']) + call s:RunDbgCmd(buf, 'echo some', ['some var']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'backtrace', [ \ '\V>backtrace', \ '\V->0 function GlobalFunction', \ '\Vline 2: CallAFunction()', \ ], \ #{match: 'pattern'}) - call RunDbgCmd(buf, 'step', ['line 1: SourceAnotherFile()']) - call RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim']) + call s:RunDbgCmd(buf, 'step', ['line 1: SourceAnotherFile()']) + call s:RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim']) " Repeated line, because we first are in the compiled function before the " EXEC and then in do_cmdline() before the :source command. - call RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim']) - call RunDbgCmd(buf, 'step', ['line 1: vim9script']) - call RunDbgCmd(buf, 'step', ['line 3: def DoAThing(): number']) - call RunDbgCmd(buf, 'step', ['line 9: export def File2Function()']) - call RunDbgCmd(buf, 'step', ['line 13: defcompile']) - call RunDbgCmd(buf, 'step', ['line 14: File2Function()']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim']) + call s:RunDbgCmd(buf, 'step', ['line 1: vim9script']) + call s:RunDbgCmd(buf, 'step', ['line 3: def DoAThing(): number']) + call s:RunDbgCmd(buf, 'step', ['line 9: export def File2Function()']) + call s:RunDbgCmd(buf, 'step', ['line 13: defcompile']) + call s:RunDbgCmd(buf, 'step', ['line 14: File2Function()']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '\V>backtrace', \ '\V 3 function GlobalFunction[2]', \ '\V 2 \.\*_CallAFunction[1]', @@ -1005,8 +1005,8 @@ func Test_Backtrace_DefFunction() \ #{match: 'pattern'}) " Don't step into compiled functions... - call RunDbgCmd(buf, 'next', ['line 15: End of sourced file']) - call RunDbgCmd(buf, 'backtrace', [ + call s:RunDbgCmd(buf, 'next', ['line 15: End of sourced file']) + call s:RunDbgCmd(buf, 'backtrace', [ \ '\V>backtrace', \ '\V 3 function GlobalFunction[2]', \ '\V 2 \.\*_CallAFunction[1]', @@ -1032,8 +1032,8 @@ func Test_DefFunction_expr() call writefile(file3, 'Xtest3.vim', 'D') let buf = RunVimInTerminal('-S Xtest3.vim', {}) - call RunDbgCmd(buf, ':breakadd expr g:someVar') - call RunDbgCmd(buf, ':call g:ChangeVar()', ['Oldval = "''foo''"', 'Newval = "''bar''"', 'function ChangeVar', 'line 2: echo "changed"']) + call s:RunDbgCmd(buf, ':breakadd expr g:someVar') + call s:RunDbgCmd(buf, ':call g:ChangeVar()', ['Oldval = "''foo''"', 'Newval = "''bar''"', 'function ChangeVar', 'line 2: echo "changed"']) call StopVimInTerminal(buf) endfunc @@ -1068,17 +1068,17 @@ func Test_debug_def_and_legacy_function( let buf = RunVimInTerminal('-S XtestDebug.vim', {}) - call RunDbgCmd(buf,':call SomeFunc()', ['line 2: echo "and"']) - call RunDbgCmd(buf,'next', ['line 3: echo "there"']) - call RunDbgCmd(buf,'next', ['line 4: breakadd func 2 LocalFunc']) + call s:RunDbgCmd(buf,':call SomeFunc()', ['line 2: echo "and"']) + call s:RunDbgCmd(buf,'next', ['line 3: echo "there"']) + call s:RunDbgCmd(buf,'next', ['line 4: breakadd func 2 LocalFunc']) " continue, next breakpoint is in LocalFunc() - call RunDbgCmd(buf,'cont', ['line 2: echo "second"']) + call s:RunDbgCmd(buf,'cont', ['line 2: echo "second"']) " continue, next breakpoint is in LegacyFunc() - call RunDbgCmd(buf,'cont', ['line 1: echo "legone"']) + call s:RunDbgCmd(buf,'cont', ['line 1: echo "legone"']) - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, 'cont') call StopVimInTerminal(buf) endfunc @@ -1140,68 +1140,68 @@ func Test_debug_def_function() let buf = RunVimInTerminal('-S Xtest.vim', {}) - call RunDbgCmd(buf, + call s:RunDbgCmd(buf, \ ':debug call Func()', \ ['cmd: call Func()']) - call RunDbgCmd(buf, 'next', ['result: 3']) + call s:RunDbgCmd(buf, 'next', ['result: 3']) call term_sendkeys(buf, "\r") - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, 'cont') - call RunDbgCmd(buf, + call s:RunDbgCmd(buf, \ ':debug call FuncWithArgs("asdf", 42, 1, 2, 3)', \ ['cmd: call FuncWithArgs("asdf", 42, 1, 2, 3)']) - call RunDbgCmd(buf, 'step', ['line 1: echo text .. nr']) - call RunDbgCmd(buf, 'echo text', ['asdf']) - call RunDbgCmd(buf, 'echo nr', ['42']) - call RunDbgCmd(buf, 'echo items', ['[1, 2, 3]']) - call RunDbgCmd(buf, 'step', ['asdf42', 'function FuncWithArgs', 'line 2: for it in items']) - call RunDbgCmd(buf, 'step', ['function FuncWithArgs', 'line 2: for it in items']) - call RunDbgCmd(buf, 'echo it', ['0']) - call RunDbgCmd(buf, 'step', ['line 3: echo it']) - call RunDbgCmd(buf, 'echo it', ['1']) - call RunDbgCmd(buf, 'step', ['1', 'function FuncWithArgs', 'line 4: endfor']) - call RunDbgCmd(buf, 'step', ['line 2: for it in items']) - call RunDbgCmd(buf, 'echo it', ['1']) - call RunDbgCmd(buf, 'step', ['line 3: echo it']) - call RunDbgCmd(buf, 'step', ['2', 'function FuncWithArgs', 'line 4: endfor']) - call RunDbgCmd(buf, 'step', ['line 2: for it in items']) - call RunDbgCmd(buf, 'echo it', ['2']) - call RunDbgCmd(buf, 'step', ['line 3: echo it']) - call RunDbgCmd(buf, 'step', ['3', 'function FuncWithArgs', 'line 4: endfor']) - call RunDbgCmd(buf, 'step', ['line 2: for it in items']) - call RunDbgCmd(buf, 'step', ['line 5: echo "done"']) - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, 'step', ['line 1: echo text .. nr']) + call s:RunDbgCmd(buf, 'echo text', ['asdf']) + call s:RunDbgCmd(buf, 'echo nr', ['42']) + call s:RunDbgCmd(buf, 'echo items', ['[1, 2, 3]']) + call s:RunDbgCmd(buf, 'step', ['asdf42', 'function FuncWithArgs', 'line 2: for it in items']) + call s:RunDbgCmd(buf, 'step', ['function FuncWithArgs', 'line 2: for it in items']) + call s:RunDbgCmd(buf, 'echo it', ['0']) + call s:RunDbgCmd(buf, 'step', ['line 3: echo it']) + call s:RunDbgCmd(buf, 'echo it', ['1']) + call s:RunDbgCmd(buf, 'step', ['1', 'function FuncWithArgs', 'line 4: endfor']) + call s:RunDbgCmd(buf, 'step', ['line 2: for it in items']) + call s:RunDbgCmd(buf, 'echo it', ['1']) + call s:RunDbgCmd(buf, 'step', ['line 3: echo it']) + call s:RunDbgCmd(buf, 'step', ['2', 'function FuncWithArgs', 'line 4: endfor']) + call s:RunDbgCmd(buf, 'step', ['line 2: for it in items']) + call s:RunDbgCmd(buf, 'echo it', ['2']) + call s:RunDbgCmd(buf, 'step', ['line 3: echo it']) + call s:RunDbgCmd(buf, 'step', ['3', 'function FuncWithArgs', 'line 4: endfor']) + call s:RunDbgCmd(buf, 'step', ['line 2: for it in items']) + call s:RunDbgCmd(buf, 'step', ['line 5: echo "done"']) + call s:RunDbgCmd(buf, 'cont') - call RunDbgCmd(buf, + call s:RunDbgCmd(buf, \ ':debug call FuncWithDict()', \ ['cmd: call FuncWithDict()']) - call RunDbgCmd(buf, 'step', ['line 1: var d = { a: 1, b: 2, }']) - call RunDbgCmd(buf, 'step', ['line 6: def Inner()']) - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, 'step', ['line 1: var d = { a: 1, b: 2, }']) + call s:RunDbgCmd(buf, 'step', ['line 6: def Inner()']) + call s:RunDbgCmd(buf, 'cont') - call RunDbgCmd(buf, ':breakadd func 1 FuncComment') - call RunDbgCmd(buf, ':call FuncComment()', ['function FuncComment', 'line 2: echo "first" .. "one"']) - call RunDbgCmd(buf, ':breakadd func 3 FuncComment') - call RunDbgCmd(buf, 'cont', ['function FuncComment', 'line 5: echo "second"']) - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, ':breakadd func 1 FuncComment') + call s:RunDbgCmd(buf, ':call FuncComment()', ['function FuncComment', 'line 2: echo "first" .. "one"']) + call s:RunDbgCmd(buf, ':breakadd func 3 FuncComment') + call s:RunDbgCmd(buf, 'cont', ['function FuncComment', 'line 5: echo "second"']) + call s:RunDbgCmd(buf, 'cont') - call RunDbgCmd(buf, ':breakadd func 2 FuncForLoop') - call RunDbgCmd(buf, ':call FuncForLoop()', ['function FuncForLoop', 'line 2: for i in [11, 22, 33]']) - call RunDbgCmd(buf, 'step', ['line 2: for i in [11, 22, 33]']) - call RunDbgCmd(buf, 'next', ['function FuncForLoop', 'line 3: eval i + 2']) - call RunDbgCmd(buf, 'echo i', ['11']) - call RunDbgCmd(buf, 'next', ['function FuncForLoop', 'line 4: endfor']) - call RunDbgCmd(buf, 'next', ['function FuncForLoop', 'line 2: for i in [11, 22, 33]']) - call RunDbgCmd(buf, 'next', ['line 3: eval i + 2']) - call RunDbgCmd(buf, 'echo i', ['22']) + call s:RunDbgCmd(buf, ':breakadd func 2 FuncForLoop') + call s:RunDbgCmd(buf, ':call FuncForLoop()', ['function FuncForLoop', 'line 2: for i in [11, 22, 33]']) + call s:RunDbgCmd(buf, 'step', ['line 2: for i in [11, 22, 33]']) + call s:RunDbgCmd(buf, 'next', ['function FuncForLoop', 'line 3: eval i + 2']) + call s:RunDbgCmd(buf, 'echo i', ['11']) + call s:RunDbgCmd(buf, 'next', ['function FuncForLoop', 'line 4: endfor']) + call s:RunDbgCmd(buf, 'next', ['function FuncForLoop', 'line 2: for i in [11, 22, 33]']) + call s:RunDbgCmd(buf, 'next', ['line 3: eval i + 2']) + call s:RunDbgCmd(buf, 'echo i', ['22']) - call RunDbgCmd(buf, 'breakdel *') - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, 'breakdel *') + call s:RunDbgCmd(buf, 'cont') - call RunDbgCmd(buf, ':breakadd func FuncWithSplitLine') - call RunDbgCmd(buf, ':call FuncWithSplitLine()', ['function FuncWithSplitLine', 'line 1: eval 1 + 2 | eval 2 + 3']) + call s:RunDbgCmd(buf, ':breakadd func FuncWithSplitLine') + call s:RunDbgCmd(buf, ':call FuncWithSplitLine()', ['function FuncWithSplitLine', 'line 1: eval 1 + 2 | eval 2 + 3']) - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, 'cont') call StopVimInTerminal(buf) endfunc @@ -1220,20 +1220,20 @@ func Test_debug_def_function_with_lambda let buf = RunVimInTerminal('-S XtestLambda.vim', {}) - call RunDbgCmd(buf, + call s:RunDbgCmd(buf, \ ':call g:Func()', \ ['function Func', 'line 2: [''b'']->map((_, v) => s)']) - call RunDbgCmd(buf, + call s:RunDbgCmd(buf, \ 'next', \ ['function Func', 'line 3: echo "done"']) - call RunDbgCmd(buf, 'cont') + call s:RunDbgCmd(buf, 'cont') call StopVimInTerminal(buf) endfunc -func Test_debug_backtrace_level() +def Test_debug_backtrace_level() CheckCWD - let lines =<< trim END + var lines =<< trim END let s:file1_var = 'file1' let g:global_var = 'global' @@ -1246,9 +1246,9 @@ func Test_debug_backtrace_level() call s:File1Func( 'arg1' ) END - call writefile(lines, 'Xtest1.vim', 'D') + writefile(lines, 'Xtest1.vim', 'D') - let lines =<< trim END + lines =<< trim END let s:file2_var = 'file2' func s:File2Func( arg ) @@ -1259,168 +1259,168 @@ func Test_debug_backtrace_level() call s:File2Func( 'arg2' ) END - call writefile(lines, 'Xtest2.vim', 'D') + writefile(lines, 'Xtest2.vim', 'D') - let file1 = getcwd() .. '/Xtest1.vim' - let file2 = getcwd() .. '/Xtest2.vim' + var file1 = getcwd() .. '/Xtest1.vim' + var file2 = getcwd() .. '/Xtest2.vim' - " set a breakpoint and source file1.vim - let buf = RunVimInTerminal( - \ '-c "breakadd file 1 Xtest1.vim" -S Xtest1.vim', - \ #{wait_for_ruler: 0}) + # set a breakpoint and source file1.vim + var buf = g:RunVimInTerminal( + '-c "breakadd file 1 Xtest1.vim" -S Xtest1.vim', + {wait_for_ruler: 0}) - call CheckDbgOutput(buf, [ - \ 'Breakpoint in "' .. file1 .. '" line 1', - \ 'Entering Debug mode. Type "cont" to continue.', - \ 'command line..script ' .. file1, - \ 'line 1: let s:file1_var = ''file1''' - \ ], #{msec: 5000}) + s:CheckDbgOutput(buf, [ + 'Breakpoint in "' .. file1 .. '" line 1', + 'Entering Debug mode. Type "cont" to continue.', + 'command line..script ' .. file1, + 'line 1: let s:file1_var = ''file1''' + ], {msec: 5000}) - " step through the initial declarations - call RunDbgCmd(buf, 'step', [ 'line 2: let g:global_var = ''global''' ] ) - call RunDbgCmd(buf, 'step', [ 'line 4: func s:File1Func( arg )' ] ) - call RunDbgCmd(buf, 'echo s:file1_var', [ 'file1' ] ) - call RunDbgCmd(buf, 'echo g:global_var', [ 'global' ] ) - call RunDbgCmd(buf, 'echo global_var', [ 'global' ] ) + # step through the initial declarations + s:RunDbgCmd(buf, 'step', [ 'line 2: let g:global_var = ''global''' ] ) + s:RunDbgCmd(buf, 'step', [ 'line 4: func s:File1Func( arg )' ] ) + s:RunDbgCmd(buf, 'echo s:file1_var', [ 'file1' ] ) + s:RunDbgCmd(buf, 'echo g:global_var', [ 'global' ] ) + s:RunDbgCmd(buf, 'echo global_var', [ 'global' ] ) - " step in to the first function - call RunDbgCmd(buf, 'step', [ 'line 11: call s:File1Func( ''arg1'' )' ] ) - call RunDbgCmd(buf, 'step', [ 'line 1: let s:file1_var .= a:arg' ] ) - call RunDbgCmd(buf, 'echo a:arg', [ 'arg1' ] ) - call RunDbgCmd(buf, 'echo s:file1_var', [ 'file1' ] ) - call RunDbgCmd(buf, 'echo g:global_var', [ 'global' ] ) - call RunDbgCmd(buf, - \'echo global_var', - \[ 'E121: Undefined variable: global_var' ] ) - call RunDbgCmd(buf, - \'echo local_var', - \[ 'E121: Undefined variable: local_var' ] ) - call RunDbgCmd(buf, - \'echo l:local_var', - \[ 'E121: Undefined variable: l:local_var' ] ) + # step in to the first function + s:RunDbgCmd(buf, 'step', [ 'line 11: call s:File1Func( ''arg1'' )' ] ) + s:RunDbgCmd(buf, 'step', [ 'line 1: let s:file1_var .= a:arg' ] ) + s:RunDbgCmd(buf, 'echo a:arg', [ 'arg1' ] ) + s:RunDbgCmd(buf, 'echo s:file1_var', [ 'file1' ] ) + s:RunDbgCmd(buf, 'echo g:global_var', [ 'global' ] ) + s:RunDbgCmd(buf, + 'echo global_var', + [ 'E121: Undefined variable: global_var' ] ) + s:RunDbgCmd(buf, + 'echo local_var', + [ 'E121: Undefined variable: local_var' ] ) + s:RunDbgCmd(buf, + 'echo l:local_var', + [ 'E121: Undefined variable: l:local_var' ] ) - " backtrace up - call RunDbgCmd(buf, 'backtrace', [ - \ '\V>backtrace', - \ '\V 2 command line', - \ '\V 1 script ' .. file1 .. '[11]', - \ '\V->0 function \.\*_File1Func', - \ '\Vline 1: let s:file1_var .= a:arg', - \ ], - \ #{ match: 'pattern' } ) - call RunDbgCmd(buf, 'up', [ '>up' ] ) + # backtrace up + s:RunDbgCmd(buf, 'backtrace', [ + '\V>backtrace', + '\V 2 command line', + '\V 1 script ' .. file1 .. '[11]', + '\V->0 function \.\*_File1Func', + '\Vline 1: let s:file1_var .= a:arg', + ], + { match: 'pattern' } ) + s:RunDbgCmd(buf, 'up', [ '>up' ] ) - call RunDbgCmd(buf, 'backtrace', [ - \ '\V>backtrace', - \ '\V 2 command line', - \ '\V->1 script ' .. file1 .. '[11]', - \ '\V 0 function \.\*_File1Func', - \ '\Vline 1: let s:file1_var .= a:arg', - \ ], - \ #{ match: 'pattern' } ) + s:RunDbgCmd(buf, 'backtrace', [ + '\V>backtrace', + '\V 2 command line', + '\V->1 script ' .. file1 .. '[11]', + '\V 0 function \.\*_File1Func', + '\Vline 1: let s:file1_var .= a:arg', + ], + { match: 'pattern' } ) - " Expression evaluation in the script frame (not the function frame) - " FIXME: Unexpected in this scope (a: should not be visible) - call RunDbgCmd(buf, 'echo a:arg', [ 'arg1' ] ) - call RunDbgCmd(buf, 'echo s:file1_var', [ 'file1' ] ) - call RunDbgCmd(buf, 'echo g:global_var', [ 'global' ] ) - " FIXME: Unexpected in this scope (global should be found) - call RunDbgCmd(buf, - \'echo global_var', - \[ 'E121: Undefined variable: global_var' ] ) - call RunDbgCmd(buf, - \'echo local_var', - \[ 'E121: Undefined variable: local_var' ] ) - call RunDbgCmd(buf, - \'echo l:local_var', - \[ 'E121: Undefined variable: l:local_var' ] ) + # Expression evaluation in the script frame (not the function frame) + # FIXME: Unexpected in this scope (a: should not be visible) + s:RunDbgCmd(buf, 'echo a:arg', [ 'arg1' ] ) + s:RunDbgCmd(buf, 'echo s:file1_var', [ 'file1' ] ) + s:RunDbgCmd(buf, 'echo g:global_var', [ 'global' ] ) + # FIXME: Unexpected in this scope (global should be found) + s:RunDbgCmd(buf, + 'echo global_var', + [ 'E121: Undefined variable: global_var' ] ) + s:RunDbgCmd(buf, + 'echo local_var', + [ 'E121: Undefined variable: local_var' ] ) + s:RunDbgCmd(buf, + 'echo l:local_var', + [ 'E121: Undefined variable: l:local_var' ] ) - " step while backtraced jumps to the latest frame - call RunDbgCmd(buf, 'step', [ - \ 'line 2: let local_var = s:file1_var .. '' test1''' ] ) - call RunDbgCmd(buf, 'backtrace', [ - \ '\V>backtrace', - \ '\V 2 command line', - \ '\V 1 script ' .. file1 .. '[11]', - \ '\V->0 function \.\*_File1Func', - \ '\Vline 2: let local_var = s:file1_var .. '' test1''', - \ ], - \ #{ match: 'pattern' } ) + # step while backtraced jumps to the latest frame + s:RunDbgCmd(buf, 'step', [ + 'line 2: let local_var = s:file1_var .. '' test1''' ] ) + s:RunDbgCmd(buf, 'backtrace', [ + '\V>backtrace', + '\V 2 command line', + '\V 1 script ' .. file1 .. '[11]', + '\V->0 function \.\*_File1Func', + '\Vline 2: let local_var = s:file1_var .. '' test1''', + ], + { match: 'pattern' } ) - call RunDbgCmd(buf, 'step', [ 'line 3: let g:global_var .= local_var' ] ) - call RunDbgCmd(buf, 'echo local_var', [ 'file1arg1 test1' ] ) - call RunDbgCmd(buf, 'echo l:local_var', [ 'file1arg1 test1' ] ) + s:RunDbgCmd(buf, 'step', [ 'line 3: let g:global_var .= local_var' ] ) + s:RunDbgCmd(buf, 'echo local_var', [ 'file1arg1 test1' ] ) + s:RunDbgCmd(buf, 'echo l:local_var', [ 'file1arg1 test1' ] ) - call RunDbgCmd(buf, 'step', [ 'line 4: source Xtest2.vim' ] ) - call RunDbgCmd(buf, 'step', [ 'line 1: let s:file2_var = ''file2''' ] ) - call RunDbgCmd(buf, 'backtrace', [ - \ '\V>backtrace', - \ '\V 3 command line', - \ '\V 2 script ' .. file1 .. '[11]', - \ '\V 1 function \.\*_File1Func[4]', - \ '\V->0 script ' .. file2, - \ '\Vline 1: let s:file2_var = ''file2''', - \ ], - \ #{ match: 'pattern' } ) + s:RunDbgCmd(buf, 'step', [ 'line 4: source Xtest2.vim' ] ) + s:RunDbgCmd(buf, 'step', [ 'line 1: let s:file2_var = ''file2''' ] ) + s:RunDbgCmd(buf, 'backtrace', [ + '\V>backtrace', + '\V 3 command line', + '\V 2 script ' .. file1 .. '[11]', + '\V 1 function \.\*_File1Func[4]', + '\V->0 script ' .. file2, + '\Vline 1: let s:file2_var = ''file2''', + ], + { match: 'pattern' } ) - " Expression evaluation in the script frame file2 (not the function frame) - call RunDbgCmd(buf, 'echo a:arg', [ 'E121: Undefined variable: a:arg' ] ) - call RunDbgCmd(buf, - \ 'echo s:file1_var', - \ [ 'E121: Undefined variable: s:file1_var' ] ) - call RunDbgCmd(buf, 'echo g:global_var', [ 'globalfile1arg1 test1' ] ) - call RunDbgCmd(buf, 'echo global_var', [ 'globalfile1arg1 test1' ] ) - call RunDbgCmd(buf, - \'echo local_var', - \[ 'E121: Undefined variable: local_var' ] ) - call RunDbgCmd(buf, - \'echo l:local_var', - \[ 'E121: Undefined variable: l:local_var' ] ) - call RunDbgCmd(buf, - \ 'echo s:file2_var', - \ [ 'E121: Undefined variable: s:file2_var' ] ) + # Expression evaluation in the script frame file2 (not the function frame) + s:RunDbgCmd(buf, 'echo a:arg', [ 'E121: Undefined variable: a:arg' ] ) + s:RunDbgCmd(buf, + 'echo s:file1_var', + [ 'E121: Undefined variable: s:file1_var' ] ) + s:RunDbgCmd(buf, 'echo g:global_var', [ 'globalfile1arg1 test1' ] ) + s:RunDbgCmd(buf, 'echo global_var', [ 'globalfile1arg1 test1' ] ) + s:RunDbgCmd(buf, + 'echo local_var', + [ 'E121: Undefined variable: local_var' ] ) + s:RunDbgCmd(buf, + 'echo l:local_var', + [ 'E121: Undefined variable: l:local_var' ] ) + s:RunDbgCmd(buf, + 'echo s:file2_var', + [ 'E121: Undefined variable: s:file2_var' ] ) - call RunDbgCmd(buf, 'step', [ 'line 3: func s:File2Func( arg )' ] ) - call RunDbgCmd(buf, 'echo s:file2_var', [ 'file2' ] ) + s:RunDbgCmd(buf, 'step', [ 'line 3: func s:File2Func( arg )' ] ) + s:RunDbgCmd(buf, 'echo s:file2_var', [ 'file2' ] ) - " Up the stack to the other script context - call RunDbgCmd(buf, 'up') - call RunDbgCmd(buf, 'backtrace', [ - \ '\V>backtrace', - \ '\V 3 command line', - \ '\V 2 script ' .. file1 .. '[11]', - \ '\V->1 function \.\*_File1Func[4]', - \ '\V 0 script ' .. file2, - \ '\Vline 3: func s:File2Func( arg )', - \ ], - \ #{ match: 'pattern' } ) - " FIXME: Unexpected. Should see the a: and l: dicts from File1Func - call RunDbgCmd(buf, 'echo a:arg', [ 'E121: Undefined variable: a:arg' ] ) - call RunDbgCmd(buf, - \ 'echo l:local_var', - \ [ 'E121: Undefined variable: l:local_var' ] ) + # Up the stack to the other script context + s:RunDbgCmd(buf, 'up') + s:RunDbgCmd(buf, 'backtrace', [ + '\V>backtrace', + '\V 3 command line', + '\V 2 script ' .. file1 .. '[11]', + '\V->1 function \.\*_File1Func[4]', + '\V 0 script ' .. file2, + '\Vline 3: func s:File2Func( arg )', + ], + { match: 'pattern' } ) + # FIXME: Unexpected. Should see the a: and l: dicts from File1Func + s:RunDbgCmd(buf, 'echo a:arg', [ 'E121: Undefined variable: a:arg' ] ) + s:RunDbgCmd(buf, + 'echo l:local_var', + [ 'E121: Undefined variable: l:local_var' ] ) - call RunDbgCmd(buf, 'up') - call RunDbgCmd(buf, 'backtrace', [ - \ '\V>backtrace', - \ '\V 3 command line', - \ '\V->2 script ' .. file1 .. '[11]', - \ '\V 1 function \.\*_File1Func[4]', - \ '\V 0 script ' .. file2, - \ '\Vline 3: func s:File2Func( arg )', - \ ], - \ #{ match: 'pattern' } ) + s:RunDbgCmd(buf, 'up') + s:RunDbgCmd(buf, 'backtrace', [ + '\V>backtrace', + '\V 3 command line', + '\V->2 script ' .. file1 .. '[11]', + '\V 1 function \.\*_File1Func[4]', + '\V 0 script ' .. file2, + '\Vline 3: func s:File2Func( arg )', + ], + { match: 'pattern' } ) - " FIXME: Unexpected (wrong script vars are used) - call RunDbgCmd(buf, - \ 'echo s:file1_var', - \ [ 'E121: Undefined variable: s:file1_var' ] ) - call RunDbgCmd(buf, 'echo s:file2_var', [ 'file2' ] ) + # FIXME: Unexpected (wrong script vars are used) + s:RunDbgCmd(buf, + 'echo s:file1_var', + [ 'E121: Undefined variable: s:file1_var' ] ) + s:RunDbgCmd(buf, 'echo s:file2_var', [ 'file2' ] ) - call RunDbgCmd(buf, 'cont') - call StopVimInTerminal(buf) -endfunc + s:RunDbgCmd(buf, 'cont') + g:StopVimInTerminal(buf) +enddef " Test for setting a breakpoint on a :endif where the :if condition is false " and then quit the script. This should generate an interrupt. diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -704,27 +704,29 @@ let s:filename_case_checks = { \ 'bzl': ['file.BUILD', 'BUILD'], \ } -func CheckItems(checks) +def CheckItems(checks: dict>) set noswapfile - for [ft, names] in items(a:checks) + + for [ft, names] in items(checks) for i in range(0, len(names) - 1) new try - exe 'edit ' . fnameescape(names[i]) + exe 'edit ' .. fnameescape(names[i]) catch - call assert_report('cannot edit "' . names[i] . '": ' . v:exception) + assert_report('cannot edit "' .. names[i] .. '": ' .. v:exception) endtry if &filetype == '' && &readonly - " File exists but not able to edit it (permission denied) + # File exists but not able to edit it (permission denied) else - let expected = ft == 'none' ? '' : ft - call assert_equal(expected, &filetype, 'with file name: ' . names[i]) + var expected = ft == 'none' ? '' : ft + assert_equal(expected, &filetype, 'with file name: ' .. names[i]) endif bwipe! endfor endfor + set swapfile& -endfunc +enddef func Test_filetype_detection() filetype on diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1570, +/**/ 1569, /**/ 1568,