Patch 9.0.1570
Problem: Some tests are slow.
Solution: Make a few test cases faster.
Files: src/testdir/test_cmdline.vim, src/testdir/test_codestyle.vim,
src/testdir/test_debugger.vim, src/testdir/test_filetype.vim
*** ../vim-9.0.1569/src/testdir/test_cmdline.vim 2023-04-17 16:40:54.724586083 +0100
--- src/testdir/test_cmdline.vim 2023-05-19 20:24:12.757768306 +0100
***************
*** 791,800 ****
endfunc
func Test_expand_star_star()
! call mkdir('a/b', 'pR')
! call writefile(['asdfasdf'], 'a/b/fileXname')
! call feedkeys(":find **/fileXname\<Tab>\<CR>", 'xt')
! call assert_equal('find a/b/fileXname', @:)
bwipe!
endfunc
--- 791,800 ----
endfunc
func Test_expand_star_star()
! call mkdir('a/b/c', 'pR')
! call writefile(['asdfasdf'], 'a/b/c/fileXname')
! call feedkeys(":find a/**/fileXname\<Tab>\<CR>", 'xt')
! call assert_equal('find a/b/c/fileXname', @:)
bwipe!
endfunc
*** ../vim-9.0.1569/src/testdir/test_codestyle.vim 2023-05-09 14:59:55.960088968 +0100
--- src/testdir/test_codestyle.vim 2023-05-19 20:41:15.034933084 +0100
***************
*** 2,7 ****
--- 2,8 ----
def Test_source_files()
for fname in glob('../*.[ch]', 0, 1)
+ bwipe!
exe 'edit ' .. fname
cursor(1, 1)
***************
*** 26,36 ****
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)
assert_equal(0, lnum, fname .. ': curly before "else"')
cursor(1, 1)
--- 27,37 ----
lnum = search(')\s*{', '', 0, 0, skip)
assert_equal(0, lnum, fname .. ': curly after closing paren')
# Examples in comments use double quotes.
skip = "getline('.') =~ '\"'"
!
! cursor(1, 1)
! lnum = search('}\s*else', '', 0, 0, skip)
assert_equal(0, lnum, fname .. ': curly before "else"')
cursor(1, 1)
*** ../vim-9.0.1569/src/testdir/test_debugger.vim 2022-10-07 18:51:20.139679475 +0100
--- src/testdir/test_debugger.vim 2023-05-19 21:30:09.125965047 +0100
***************
*** 20,58 ****
" "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)
else
! call WaitForAssert({-> assert_equal(l, term_getline(a:buf, lnum))}, msec)
endif
! let lnum += 1
endfor
! endfunc
" 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)
!
! if a:0 != 0
! let options = #{match: 'equal'}
! if a:0 > 1
! call extend(options, a:2)
endif
! call CheckDbgOutput(a:buf, a:1, options)
endif
! endfunc
" Debugger tests
! func Test_Debugger()
! " Create a Vim script with some functions
! let lines =<< trim END
func Foo()
let var1 = 1
let var2 = Bar(var1) + 9
--- 20,58 ----
" "options" argument can contain:
" 'msec' - time to wait for a match
" 'match' - "pattern" to use "lines" as pattern instead of text
! def s:CheckDbgOutput(buf: number, lines: list<string>, 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
! g:WaitForAssert(() => assert_equal(l, term_getline(buf, lnum)), msec)
endif
! lnum += 1
endfor
! enddef
" Run a Vim debugger command
" If the expected output argument is supplied, then check for it.
! def s:RunDbgCmd(buf: number, cmd: string, ...extra: list<any>)
! term_sendkeys(buf, cmd .. "\r")
! g:TermWait(buf)
!
! if len(extra) > 0
! var options = {match: 'equal'}
! if len(extra) > 1
! extend(options, extra[1])
endif
! s:CheckDbgOutput(buf, extra[0], options)
endif
! enddef
" Debugger tests
! 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,337 ****
endfor
enddef
END
! call writefile(lines, 'XtestDebug.vim', 'D')
! " Start Vim in a terminal
! let buf = RunVimInTerminal('-S XtestDebug.vim', {})
! " Start the Vim debugger
! call 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"'])
!
! " check backtrace
! call 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'])
!
! 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'])
!
! 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'])
!
! " 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'])
!
! " var3 is defined in this level with some other value
! call RunDbgCmd(buf, 'fr 0')
! call 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')
!
! " Undefined var2
! call 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'])
!
! " Backtrace movements
! call 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 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'])
!
! " fil is not frame or finish, it is file
! call 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'])
!
! call RunDbgCmd(buf, 'fr +1')
! call 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'])
!
! call RunDbgCmd(buf, 'frame -40', ['frame is zero'])
! call RunDbgCmd(buf, 'fram', [
! \ ' 1 function Foo[2]',
! \ '->0 Bar',
! \ 'line 3: End of function'])
!
! " final result 19
! call RunDbgCmd(buf, 'cont', ['19'])
!
! " 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()'])
!
! " No breakpoints
! call 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'])
!
! " 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"'])
!
! " 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'])
!
! call RunDbgCmd(buf, 'cont')
!
! " Make sure the breakpoints are removed
! call RunDbgCmd(buf, ':echo Foo()', ['19'])
!
! " Delete a non-existing breakpoint
! call 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',
\ ' 4 expr var3'])
! call 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'])
!
! " 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'])
!
! " finish the current function
! call RunDbgCmd(buf, 'finish', [
! \ 'function Bazz',
! \ 'line 8: End of function'])
! call 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 :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 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 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!')
! call StopVimInTerminal(buf)
! endfunc
func Test_Debugger_breakadd()
" Tests for :breakadd file and :breakadd here
--- 81,337 ----
endfor
enddef
END
! writefile(lines, 'XtestDebug.vim', 'D')
! # Start Vim in a terminal
! var buf = g:RunVimInTerminal('-S XtestDebug.vim', {})
! # Start the Vim debugger
! s:RunDbgCmd(buf, ':debug echo Foo()', ['cmd: echo Foo()'])
! # 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
! 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
! s:RunDbgCmd(buf, 'echo var1', ['6'])
!
! 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'])
!
! 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
! 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
! s:RunDbgCmd(buf, 'fr 0')
! s:RunDbgCmd(buf, 'echo var3', ['another var'])
!
! 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
! s:RunDbgCmd(buf, 'echo var2', [
! 'Error detected while processing function Foo[2]..Bar:',
! 'line 3:',
! 'E121: Undefined variable: var2'])
!
! # Var2 is defined with 10
! s:RunDbgCmd(buf, 'down')
! s:RunDbgCmd(buf, 'echo var2', ['10'])
!
! # 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
! s:RunDbgCmd(buf, 'down', ['frame is zero'])
! s:RunDbgCmd(buf, 'up')
!
! # 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
! s:RunDbgCmd(buf, 'fil', ['"[No Name]" --No lines in buffer--'])
!
! # relative backtrace movement
! s:RunDbgCmd(buf, 'fr -1')
! s:RunDbgCmd(buf, 'frame', [
! ' 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
! 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'])
!
! 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
! s:RunDbgCmd(buf, 'cont', ['19'])
!
! # breakpoints tests
!
! # 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
! s:RunDbgCmd(buf, 'breakl', ['No breakpoints defined'])
!
! # 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
! 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
! 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'])
!
! s:RunDbgCmd(buf, 'cont')
!
! # Make sure the breakpoints are removed
! s:RunDbgCmd(buf, ':echo Foo()', ['19'])
!
! # Delete a non-existing breakpoint
! s:RunDbgCmd(buf, ':breakdel 2', ['E161: Breakpoint not found: 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'])
! s:RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 5',
! 'Oldval = "''another var''"',
! 'Newval = "''value2''"',
! 'function Bazz',
! 'line 5: catch'])
!
! s:RunDbgCmd(buf, 'breakdel *')
! s:RunDbgCmd(buf, 'breakl', ['No breakpoints defined'])
!
! # 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
! s:RunDbgCmd(buf, 'finish', [
! 'function Bazz',
! 'line 8: End of function'])
! s:RunDbgCmd(buf, 'cont')
!
! # 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
! 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
! 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
! 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!')
! g:StopVimInTerminal(buf)
! enddef
func Test_Debugger_breakadd()
" Tests for :breakadd file and :breakadd here
***************
*** 347,357 ****
" 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 StopVimInTerminal(buf)
--- 347,357 ----
" Start Vim in a terminal
let buf = RunVimInTerminal('XdebugBreakadd.vim', {})
! 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,395 ****
" 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 %')
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')
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 StopVimInTerminal(buf)
endfunc
--- 372,395 ----
" Start Vim in a terminal
let buf = RunVimInTerminal('XdebugBreakExpr.vim', {})
! 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 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 s:RunDbgCmd(buf, ':source %', expected)
call StopVimInTerminal(buf)
endfunc
***************
*** 411,419 ****
call g:TermWait(buf, g:RunningWithValgrind() ? 1000 : 50)
# Despite the failure the functions are defined
! g:RunDbgCmd(buf, ':function g:EarlyFunc',
['function EarlyFunc()', 'endfunction'], {match: 'pattern'})
! g:RunDbgCmd(buf, ':function g:LaterFunc',
['function LaterFunc()', 'endfunction'], {match: 'pattern'})
call g:StopVimInTerminal(buf)
--- 411,419 ----
call g:TermWait(buf, g:RunningWithValgrind() ? 1000 : 50)
# Despite the failure the functions are defined
! s:RunDbgCmd(buf, ':function g:EarlyFunc',
['function EarlyFunc()', 'endfunction'], {match: 'pattern'})
! s:RunDbgCmd(buf, ':function g:LaterFunc',
['function LaterFunc()', 'endfunction'], {match: 'pattern'})
call g:StopVimInTerminal(buf)
***************
*** 435,441 ****
var buf = g:RunVimInTerminal('-S XdebugBreakRet.vim', {wait_for_ruler: 0})
call g:TermWait(buf, g:RunningWithValgrind() ? 1000 : 50)
! g:RunDbgCmd(buf, ':call GetNum()',
['line 1: return 1 + 2 + 3'], {match: 'pattern'})
call g:StopVimInTerminal(buf)
--- 435,441 ----
var buf = g:RunVimInTerminal('-S XdebugBreakRet.vim', {wait_for_ruler: 0})
call g:TermWait(buf, g:RunningWithValgrind() ? 1000 : 50)
! s:RunDbgCmd(buf, ':call GetNum()',
['line 1: return 1 + 2 + 3'], {match: 'pattern'})
call g:StopVimInTerminal(buf)
***************
*** 474,492 ****
let buf = RunVimInTerminal('-S Xtest1.vim', {})
! call RunDbgCmd(buf,
\ ':debug call GlobalFunction()',
\ ['cmd: call GlobalFunction()'])
! call RunDbgCmd(buf, 'step', ['line 1: call CallAFunction()'])
! call 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 RunDbgCmd(buf, 'backtrace', ['>backtrace',
\ ' 2 function GlobalFunction[1]',
\ ' 1 CallAFunction[1]',
\ '->0 SourceAnotherFile',
--- 474,492 ----
let buf = RunVimInTerminal('-S Xtest1.vim', {})
! call s:RunDbgCmd(buf,
\ ':debug call GlobalFunction()',
\ ['cmd: call GlobalFunction()'])
! call s:RunDbgCmd(buf, 'step', ['line 1: call CallAFunction()'])
! call s:RunDbgCmd(buf, 'backtrace', ['>backtrace',
\ '->0 function GlobalFunction',
\ 'line 1: call CallAFunction()'])
! call s:RunDbgCmd(buf, 'step', ['line 1: call SourceAnotherFile()'])
! call s:RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim'])
! call s:RunDbgCmd(buf, 'backtrace', ['>backtrace',
\ ' 2 function GlobalFunction[1]',
\ ' 1 CallAFunction[1]',
\ '->0 SourceAnotherFile',
***************
*** 494,501 ****
" 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', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
--- 494,501 ----
" Step into the 'source' command. Note that we print the full trace all the
" way though the source command.
! call s:RunDbgCmd(buf, 'step', ['line 1: func DoAThing()'])
! call s:RunDbgCmd(buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
***************
*** 503,510 ****
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()'])
! call RunDbgCmd( buf, 'up' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
--- 503,510 ----
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()'])
! call s:RunDbgCmd( buf, 'up' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
***************
*** 512,519 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'up' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ '->2 CallAFunction[1]',
--- 512,519 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'up' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ '->2 CallAFunction[1]',
***************
*** 521,528 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'up' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ '->3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
--- 521,528 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'up' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ '->3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
***************
*** 530,537 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'up', [ 'frame at highest level: 3' ] )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ '->3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
--- 530,537 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'up', [ 'frame at highest level: 3' ] )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ '->3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
***************
*** 539,546 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'down' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ '->2 CallAFunction[1]',
--- 539,546 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'down' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ '->2 CallAFunction[1]',
***************
*** 548,555 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'down' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
--- 548,555 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'down' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
***************
*** 557,564 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'down' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
--- 557,564 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'down' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
***************
*** 566,577 ****
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call 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', [
\ '>backtrace',
\ ' 3 function GlobalFunction[1]',
\ ' 2 CallAFunction[1]',
--- 566,577 ----
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'down', [ 'frame is zero' ] )
" step until we have another meaningful trace
! 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,587 ****
\ '->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', [
\ '>backtrace',
\ ' 5 function GlobalFunction[1]',
\ ' 4 CallAFunction[1]',
--- 579,587 ----
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 9: call File2Function()'])
! 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,610 ****
\ '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', [
\ '>backtrace',
\ ' 1 function GlobalFunction[1]',
\ '->0 CallAFunction',
\ 'line 2: call File2Function()'])
! call RunDbgCmd(buf, 'step', ['line 1: call DoAThing()'])
! call RunDbgCmd(buf, 'backtrace', [
\ '>backtrace',
\ ' 2 function GlobalFunction[1]',
\ ' 1 CallAFunction[2]',
--- 592,610 ----
\ 'line 1: echo "DoAThing"'])
" Now, step (back to Xfile1.vim), and call the function _in_ Xfile2.vim
! 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 s:RunDbgCmd(buf, 'step', ['line 1: call DoAThing()'])
! call s:RunDbgCmd(buf, 'backtrace', [
\ '>backtrace',
\ ' 2 function GlobalFunction[1]',
\ ' 1 CallAFunction[2]',
***************
*** 649,677 ****
let buf = RunVimInTerminal('-S Xtest1.vim', {})
! call RunDbgCmd(buf,
\ ':debug doautocmd User TestGlobalFunction',
\ ['cmd: doautocmd User TestGlobalFunction'])
! call RunDbgCmd(buf, 'step', ['cmd: call GlobalFunction() | echo "Done"'])
" At this point the only thing in the stack is the autocommand
! call 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', [
\ '>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 RunDbgCmd(buf, 'backtrace', [
\ '>backtrace',
\ ' 3 User Autocommands for "TestGlobalFunction"',
\ ' 2 function GlobalFunction[1]',
--- 649,677 ----
let buf = RunVimInTerminal('-S Xtest1.vim', {})
! call s:RunDbgCmd(buf,
\ ':debug doautocmd User TestGlobalFunction',
\ ['cmd: doautocmd User TestGlobalFunction'])
! call s:RunDbgCmd(buf, 'step', ['cmd: call GlobalFunction() | echo "Done"'])
" At this point the only thing in the stack is the autocommand
! 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 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 s:RunDbgCmd(buf, 'step', ['line 1: call SourceAnotherFile()'])
! call s:RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim'])
! call s:RunDbgCmd(buf, 'backtrace', [
\ '>backtrace',
\ ' 3 User Autocommands for "TestGlobalFunction"',
\ ' 2 function GlobalFunction[1]',
***************
*** 681,688 ****
" 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', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
--- 681,688 ----
" Step into the 'source' command. Note that we print the full trace all the
" way though the source command.
! 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,698 ****
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()'])
! call RunDbgCmd( buf, 'up' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
--- 691,698 ----
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()'])
! call s:RunDbgCmd( buf, 'up' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
***************
*** 701,708 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'up' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
--- 701,708 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'up' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
***************
*** 711,718 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'up' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ '->3 function GlobalFunction[1]',
--- 711,718 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'up' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ '->3 function GlobalFunction[1]',
***************
*** 721,728 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'up' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ '->4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
--- 721,728 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'up' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ '->4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
***************
*** 731,738 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'up', [ 'frame at highest level: 4' ] )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ '->4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
--- 731,738 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! 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,748 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'down' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ '->3 function GlobalFunction[1]',
--- 741,748 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'down' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ '->3 function GlobalFunction[1]',
***************
*** 752,759 ****
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'down' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
--- 752,759 ----
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'down' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
***************
*** 762,769 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'down' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
--- 762,769 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'down' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
***************
*** 772,779 ****
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call RunDbgCmd( buf, 'down' )
! call RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
--- 772,779 ----
\ ' 0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'down' )
! call s:RunDbgCmd( buf, 'backtrace', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
***************
*** 782,793 ****
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call 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', [
\ '>backtrace',
\ ' 4 User Autocommands for "TestGlobalFunction"',
\ ' 3 function GlobalFunction[1]',
--- 782,793 ----
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 1: func DoAThing()' ] )
! call s:RunDbgCmd( buf, 'down', [ 'frame is zero' ] )
" step until we have another meaningful trace
! 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,804 ****
\ '->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', [
\ '>backtrace',
\ ' 6 User Autocommands for "TestGlobalFunction"',
\ ' 5 function GlobalFunction[1]',
--- 796,804 ----
\ '->0 script ' .. getcwd() .. '/Xtest2.vim',
\ 'line 9: call File2Function()'])
! 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,829 ****
\ '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', [
\ '>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', [
\ '>backtrace',
\ ' 3 User Autocommands for "TestGlobalFunction"',
\ ' 2 function GlobalFunction[1]',
--- 810,829 ----
\ 'line 1: echo "DoAThing"'])
" Now, step (back to Xfile1.vim), and call the function _in_ Xfile2.vim
! 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 s:RunDbgCmd(buf, 'step', ['line 1: call DoAThing()'])
! call s:RunDbgCmd(buf, 'backtrace', [
\ '>backtrace',
\ ' 3 User Autocommands for "TestGlobalFunction"',
\ ' 2 function GlobalFunction[1]',
***************
*** 834,841 ****
" 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', [
\ '>backtrace',
\ ' 3 User Autocommands for "TestGlobalFunction"',
\ ' 2 function GlobalFunction[1]',
--- 834,841 ----
" Now unwind so that we get back to the original autocommand (and the second
" cmd echo "Done")
! 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,865 ****
\ '->0 File2Function',
\ 'line 1: End of function'])
! call RunDbgCmd(buf, 'finish', ['line 2: End of function'])
! call 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', [
\ '>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', [
\ '>backtrace',
\ '->0 User Autocommands for "TestGlobalFunction"',
\ 'cmd: echo "Done"'])
--- 843,865 ----
\ '->0 File2Function',
\ 'line 1: End of function'])
! 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 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 s:RunDbgCmd(buf, 'step', ['cmd: echo "Done"'])
! call s:RunDbgCmd(buf, 'backtrace', [
\ '>backtrace',
\ '->0 User Autocommands for "TestGlobalFunction"',
\ 'cmd: echo "Done"'])
***************
*** 906,923 ****
" Need to wait for the vim-in-terminal to be ready.
" With valgrind this can take quite long.
! call 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', [
\ '>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', [
\ '>backtrace',
\ ' 1 command line',
\ '->0 function GlobalFunction',
--- 906,923 ----
" Need to wait for the vim-in-terminal to be ready.
" With valgrind this can take quite long.
! call s:CheckDbgOutput(buf, ['command line',
\ 'cmd: call GlobalFunction()'], #{msec: 5000})
" At this point the only thing in the stack is the cmdline
! call s:RunDbgCmd(buf, 'backtrace', [
\ '>backtrace',
\ '->0 command line',
\ 'cmd: call GlobalFunction()'])
" And now we're back into the call stack
! call s:RunDbgCmd(buf, 'step', ['line 1: call CallAFunction()'])
! call s:RunDbgCmd(buf, 'backtrace', [
\ '>backtrace',
\ ' 1 command line',
\ '->0 function GlobalFunction',
***************
*** 970,1001 ****
let buf = RunVimInTerminal('-S Xtest1.vim', {})
! call 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 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'])
" 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', [
\ '\V>backtrace',
\ '\V 3 function GlobalFunction[2]',
\ '\V 2 <SNR>\.\*_CallAFunction[1]',
--- 970,1001 ----
let buf = RunVimInTerminal('-S Xtest1.vim', {})
! call s:RunDbgCmd(buf,
\ ':debug call GlobalFunction()',
\ ['cmd: call GlobalFunction()'])
! 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 s:RunDbgCmd(buf, 'backtrace', [
\ '\V>backtrace',
\ '\V->0 function GlobalFunction',
\ '\Vline 2: CallAFunction()',
\ ],
\ #{match: 'pattern'})
! 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 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 <SNR>\.\*_CallAFunction[1]',
***************
*** 1005,1012 ****
\ #{match: 'pattern'})
" Don't step into compiled functions...
! call RunDbgCmd(buf, 'next', ['line 15: End of sourced file'])
! call RunDbgCmd(buf, 'backtrace', [
\ '\V>backtrace',
\ '\V 3 function GlobalFunction[2]',
\ '\V 2 <SNR>\.\*_CallAFunction[1]',
--- 1005,1012 ----
\ #{match: 'pattern'})
" Don't step into compiled functions...
! 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 <SNR>\.\*_CallAFunction[1]',
***************
*** 1032,1039 ****
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 StopVimInTerminal(buf)
endfunc
--- 1032,1039 ----
call writefile(file3, 'Xtest3.vim', 'D')
let buf = RunVimInTerminal('-S Xtest3.vim', {})
! 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,1084 ****
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'])
" continue, next breakpoint is in LocalFunc()
! call RunDbgCmd(buf,'cont', ['line 2: echo "second"'])
" continue, next breakpoint is in LegacyFunc()
! call RunDbgCmd(buf,'cont', ['line 1: echo "legone"'])
! call RunDbgCmd(buf, 'cont')
call StopVimInTerminal(buf)
endfunc
--- 1068,1084 ----
let buf = RunVimInTerminal('-S XtestDebug.vim', {})
! 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 s:RunDbgCmd(buf,'cont', ['line 2: echo "second"'])
" continue, next breakpoint is in LegacyFunc()
! call s:RunDbgCmd(buf,'cont', ['line 1: echo "legone"'])
! call s:RunDbgCmd(buf, 'cont')
call StopVimInTerminal(buf)
endfunc
***************
*** 1140,1207 ****
let buf = RunVimInTerminal('-S Xtest.vim', {})
! call RunDbgCmd(buf,
\ ':debug call Func()',
\ ['cmd: call Func()'])
! call RunDbgCmd(buf, 'next', ['result: 3'])
call term_sendkeys(buf, "\r")
! call RunDbgCmd(buf, 'cont')
! call 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 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 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 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 RunDbgCmd(buf, 'breakdel *')
! call 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 RunDbgCmd(buf, 'cont')
call StopVimInTerminal(buf)
endfunc
--- 1140,1207 ----
let buf = RunVimInTerminal('-S Xtest.vim', {})
! call s:RunDbgCmd(buf,
\ ':debug call Func()',
\ ['cmd: call Func()'])
! call s:RunDbgCmd(buf, 'next', ['result: 3'])
call term_sendkeys(buf, "\r")
! call s:RunDbgCmd(buf, 'cont')
! call s:RunDbgCmd(buf,
\ ':debug call FuncWithArgs("asdf", 42, 1, 2, 3)',
\ ['cmd: call FuncWithArgs("asdf", 42, 1, 2, 3)'])
! 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 s:RunDbgCmd(buf,
\ ':debug call FuncWithDict()',
\ ['cmd: call FuncWithDict()'])
! 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 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 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 s:RunDbgCmd(buf, 'breakdel *')
! call s:RunDbgCmd(buf, 'cont')
! call s:RunDbgCmd(buf, ':breakadd func FuncWithSplitLine')
! call s:RunDbgCmd(buf, ':call FuncWithSplitLine()', ['function FuncWithSplitLine', 'line 1: eval 1 + 2 | eval 2 + 3'])
! call s:RunDbgCmd(buf, 'cont')
call StopVimInTerminal(buf)
endfunc
***************
*** 1220,1239 ****
let buf = RunVimInTerminal('-S XtestLambda.vim', {})
! call RunDbgCmd(buf,
\ ':call g:Func()',
\ ['function Func', 'line 2: [''b'']->map((_, v) => s)'])
! call RunDbgCmd(buf,
\ 'next',
\ ['function Func', 'line 3: echo "done"'])
! call RunDbgCmd(buf, 'cont')
call StopVimInTerminal(buf)
endfunc
! func Test_debug_backtrace_level()
CheckCWD
! let lines =<< trim END
let s:file1_var = 'file1'
let g:global_var = 'global'
--- 1220,1239 ----
let buf = RunVimInTerminal('-S XtestLambda.vim', {})
! call s:RunDbgCmd(buf,
\ ':call g:Func()',
\ ['function Func', 'line 2: [''b'']->map((_, v) => s)'])
! call s:RunDbgCmd(buf,
\ 'next',
\ ['function Func', 'line 3: echo "done"'])
! call s:RunDbgCmd(buf, 'cont')
call StopVimInTerminal(buf)
endfunc
! def Test_debug_backtrace_level()
CheckCWD
! var lines =<< trim END
let s:file1_var = 'file1'
let g:global_var = 'global'
***************
*** 1246,1254 ****
call s:File1Func( 'arg1' )
END
! call writefile(lines, 'Xtest1.vim', 'D')
! let lines =<< trim END
let s:file2_var = 'file2'
func s:File2Func( arg )
--- 1246,1254 ----
call s:File1Func( 'arg1' )
END
! writefile(lines, 'Xtest1.vim', 'D')
! lines =<< trim END
let s:file2_var = 'file2'
func s:File2Func( arg )
***************
*** 1259,1426 ****
call s:File2Func( 'arg2' )
END
! call writefile(lines, 'Xtest2.vim', 'D')
! let file1 = getcwd() .. '/Xtest1.vim'
! let 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})
!
! 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})
!
! " 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 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' ] )
!
! " backtrace up
! call RunDbgCmd(buf, 'backtrace', [
! \ '\V>backtrace',
! \ '\V 2 command line',
! \ '\V 1 script ' .. file1 .. '[11]',
! \ '\V->0 function <SNR>\.\*_File1Func',
! \ '\Vline 1: let s:file1_var .= a:arg',
! \ ],
! \ #{ match: 'pattern' } )
! call RunDbgCmd(buf, 'up', [ '>up' ] )
! call RunDbgCmd(buf, 'backtrace', [
! \ '\V>backtrace',
! \ '\V 2 command line',
! \ '\V->1 script ' .. file1 .. '[11]',
! \ '\V 0 function <SNR>\.\*_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' ] )
!
!
! " 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 <SNR>\.\*_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' ] )
!
! 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 <SNR>\.\*_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' ] )
!
! call RunDbgCmd(buf, 'step', [ 'line 3: func s:File2Func( arg )' ] )
! call 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 <SNR>\.\*_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' ] )
!
! call RunDbgCmd(buf, 'up')
! call RunDbgCmd(buf, 'backtrace', [
! \ '\V>backtrace',
! \ '\V 3 command line',
! \ '\V->2 script ' .. file1 .. '[11]',
! \ '\V 1 function <SNR>\.\*_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' ] )
!
! call RunDbgCmd(buf, 'cont')
! call StopVimInTerminal(buf)
! endfunc
" Test for setting a breakpoint on a :endif where the :if condition is false
" and then quit the script. This should generate an interrupt.
--- 1259,1426 ----
call s:File2Func( 'arg2' )
END
! writefile(lines, 'Xtest2.vim', 'D')
! var file1 = getcwd() .. '/Xtest1.vim'
! var file2 = getcwd() .. '/Xtest2.vim'
! # set a breakpoint and source file1.vim
! var buf = g:RunVimInTerminal(
! '-c "breakadd file 1 Xtest1.vim" -S Xtest1.vim',
! {wait_for_ruler: 0})
!
! 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
! 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
! 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
! s:RunDbgCmd(buf, 'backtrace', [
! '\V>backtrace',
! '\V 2 command line',
! '\V 1 script ' .. file1 .. '[11]',
! '\V->0 function <SNR>\.\*_File1Func',
! '\Vline 1: let s:file1_var .= a:arg',
! ],
! { match: 'pattern' } )
! s:RunDbgCmd(buf, 'up', [ '>up' ] )
!
! s:RunDbgCmd(buf, 'backtrace', [
! '\V>backtrace',
! '\V 2 command line',
! '\V->1 script ' .. file1 .. '[11]',
! '\V 0 function <SNR>\.\*_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)
! 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
! 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 <SNR>\.\*_File1Func',
! '\Vline 2: let local_var = s:file1_var .. '' test1''',
! ],
! { match: 'pattern' } )
!
! 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' ] )
!
! 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 <SNR>\.\*_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)
! 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' ] )
!
! 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
! s:RunDbgCmd(buf, 'up')
! s:RunDbgCmd(buf, 'backtrace', [
! '\V>backtrace',
! '\V 3 command line',
! '\V 2 script ' .. file1 .. '[11]',
! '\V->1 function <SNR>\.\*_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' ] )
!
! s:RunDbgCmd(buf, 'up')
! s:RunDbgCmd(buf, 'backtrace', [
! '\V>backtrace',
! '\V 3 command line',
! '\V->2 script ' .. file1 .. '[11]',
! '\V 1 function <SNR>\.\*_File1Func[4]',
! '\V 0 script ' .. file2,
! '\Vline 3: func s:File2Func( arg )',
! ],
! { match: 'pattern' } )
!
! # 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' ] )
! 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.
*** ../vim-9.0.1569/src/testdir/test_filetype.vim 2023-05-18 16:42:13.663307704 +0100
--- src/testdir/test_filetype.vim 2023-05-19 21:39:42.698191105 +0100
***************
*** 704,730 ****
\ 'bzl': ['file.BUILD', 'BUILD'],
\ }
! func CheckItems(checks)
set noswapfile
! for [ft, names] in items(a:checks)
for i in range(0, len(names) - 1)
new
try
! exe 'edit ' . fnameescape(names[i])
catch
! call assert_report('cannot edit "' . names[i] . '": ' . v:exception)
endtry
if &filetype == '' && &readonly
! " 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])
endif
bwipe!
endfor
endfor
set swapfile&
! endfunc
func Test_filetype_detection()
filetype on
--- 704,732 ----
\ 'bzl': ['file.BUILD', 'BUILD'],
\ }
! def CheckItems(checks: dict<list<string>>)
set noswapfile
!
! for [ft, names] in items(checks)
for i in range(0, len(names) - 1)
new
try
! exe 'edit ' .. fnameescape(names[i])
catch
! assert_report('cannot edit "' .. names[i] .. '": ' .. v:exception)
endtry
if &filetype == '' && &readonly
! # File exists but not able to edit it (permission denied)
else
! var expected = ft == 'none' ? '' : ft
! assert_equal(expected, &filetype, 'with file name: ' .. names[i])
endif
bwipe!
endfor
endfor
+
set swapfile&
! enddef
func Test_filetype_detection()
filetype on
*** ../vim-9.0.1569/src/version.c 2023-05-19 19:01:13.292413300 +0100
--- src/version.c 2023-05-19 20:25:29.017771323 +0100
***************
*** 697,698 ****
--- 697,700 ----
{ /* Add new patch number below this line */
+ /**/
+ 1570,
/**/
--
hundred-and-one symptoms of being an internet addict:
44. Your friends no longer send you e-mail...they just log on to your IRC
channel.
/// Bram Moolenaar -- Br...@Moolenaar.net --
http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims --
http://ICCF-Holland.org ///