diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-04-26 22:38:15 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-04-26 23:40:29 -0400 |
commit | 2e339807ac4f936876195f350c8e5055e55fa94e (patch) | |
tree | 25fd82c32ec10f1f6c3ccf172ab0885b84474e6e | |
parent | ebd251cdf0d74e43c38f728d89a79e94e9e0f081 (diff) | |
download | rneovim-2e339807ac4f936876195f350c8e5055e55fa94e.tar.gz rneovim-2e339807ac4f936876195f350c8e5055e55fa94e.tar.bz2 rneovim-2e339807ac4f936876195f350c8e5055e55fa94e.zip |
vim-patch:8.1.1180: Vim script debugger tests are old style
Problem: Vim script debugger tests are old style.
Solution: Turn into new style tests. (Yegappan Lakshmanan, closes vim/vim#4259)
https://github.com/vim/vim/commit/113bf0672b114af5800fa642bcd09f674758e5d5
-rw-r--r-- | src/nvim/testdir/test_debugger.vim | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/src/nvim/testdir/test_debugger.vim b/src/nvim/testdir/test_debugger.vim new file mode 100644 index 0000000000..db18f7695d --- /dev/null +++ b/src/nvim/testdir/test_debugger.vim @@ -0,0 +1,232 @@ +" Tests for the Vim script debug commands + +source shared.vim +" source screendump.vim + +" 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 term_wait(a:buf) + + if a:0 != 0 + " Verify the expected output + let lnum = 20 - len(a:1) + for l in a:1 + call WaitForAssert({-> assert_equal(l, term_getline(a:buf, lnum))}) + let lnum += 1 + endfor + endif +endfunc + +" Debugger tests +func Test_Debugger() + if !CanRunVimInTerminal() + return + endif + + " Create a Vim script with some functions + call writefile([ + \ 'func Foo()', + \ ' let var1 = 1', + \ ' let var2 = Bar(var1) + 9', + \ ' return var2', + \ 'endfunc', + \ 'func Bar(var)', + \ ' let var1 = 2 + a:var', + \ ' let var2 = Bazz(var1) + 4', + \ ' return var2', + \ 'endfunc', + \ 'func Bazz(var)', + \ ' let var1 = 3 + a:var', + \ ' let var3 = "another var"', + \ ' let var3 = "value2"', + \ ' let var3 = "value3"', + \ ' return var1', + \ 'endfunc'], 'Xtest.vim') + + " Start Vim in a terminal + let buf = RunVimInTerminal('-S Xtest.vim', {}) + + " Start the Vim debugger + call RunDbgCmd(buf, ':debug echo Foo()') + + " Create a few stack frames by stepping through functions + call RunDbgCmd(buf, 'step') + call RunDbgCmd(buf, 'step') + call RunDbgCmd(buf, 'step') + call RunDbgCmd(buf, 'step') + call RunDbgCmd(buf, 'step') + call RunDbgCmd(buf, 'step') + + " check backtrace + call RunDbgCmd(buf, 'backtrace', [ + \ ' 2 function Foo[2]', + \ ' 1 Bar[2]', + \ '->0 Bazz', + \ 'line 2: 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 2: 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 2: 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 3:', + \ '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, 'step') + call RunDbgCmd(buf, 'step') + call RunDbgCmd(buf, 'step') + 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()') + + " 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 = "value2"']) + + " 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)') + call RunDbgCmd(buf, 'step') + call RunDbgCmd(buf, 'breaka expr var3') + call RunDbgCmd(buf, 'breakl', [' 4 expr var3']) + call RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 4', + \ 'Oldval = "''another var''"', + \ 'Newval = "''value2''"', + \ 'function Bazz', + \ 'line 4: let var3 = "value3"']) + + call RunDbgCmd(buf, 'breakdel *') + call RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) + + " finish the current function + call RunDbgCmd(buf, 'finish', [ + \ 'function Bazz', + \ 'line 5: End of function']) + call RunDbgCmd(buf, 'cont') + + call StopVimInTerminal(buf) + + call delete('Xtest.vim') +endfunc |