108_backtrace_debug_commands_spec.lua (4590B)
1 -- Tests for backtrace debug commands. 2 3 local n = require('test.functional.testnvim')() 4 5 local command = n.command 6 local feed, clear = n.feed, n.clear 7 local feed_command, expect = n.feed_command, n.expect 8 9 describe('108', function() 10 before_each(clear) 11 12 it('is working', function() 13 command('set shortmess-=F') 14 feed_command('lang mess C') 15 feed_command('function! Foo()') 16 feed_command(' let var1 = 1') 17 feed_command(' let var2 = Bar(var1) + 9') 18 feed_command(' return var2') 19 feed_command('endfunction') 20 feed_command('function! Bar(var)') 21 feed_command(' let var1 = 2 + a:var') 22 feed_command(' let var2 = Bazz(var1) + 4') 23 feed_command(' return var2') 24 feed_command('endfunction') 25 feed_command('function! Bazz(var)') 26 feed_command(' let var1 = 3 + a:var') 27 feed_command(' let var3 = "another var"') 28 feed_command(' return var1') 29 feed_command('endfunction') 30 feed_command('new') 31 feed_command('debuggreedy') 32 feed_command('redir => out') 33 feed_command('debug echo Foo()') 34 feed('step<cr>') 35 feed('step<cr>') 36 feed('step<cr>') 37 feed('step<cr>') 38 feed('step<cr>') 39 feed('step<cr>') 40 feed([[echo "- show backtrace:\n"<cr>]]) 41 feed('backtrace<cr>') 42 feed([[echo "\nshow variables on different levels:\n"<cr>]]) 43 feed('echo var1<cr>') 44 feed('up<cr>') 45 feed('back<cr>') 46 feed('echo var1<cr>') 47 feed('u<cr>') 48 feed('bt<cr>') 49 feed('echo var1<cr>') 50 feed([[echo "\n- undefined vars:\n"<cr>]]) 51 feed('step<cr>') 52 feed('frame 2<cr>') 53 feed('echo "undefined var3 on former level:"<cr>') 54 feed('echo var3<cr>') 55 feed('fr 0<cr>') 56 feed([[echo "here var3 is defined with \"another var\":"<cr>]]) 57 feed('echo var3<cr>') 58 feed('step<cr>') 59 feed('step<cr>') 60 feed('step<cr>') 61 feed('up<cr>') 62 feed([[echo "\nundefined var2 on former level"<cr>]]) 63 feed('echo var2<cr>') 64 feed('down<cr>') 65 feed('echo "here var2 is defined with 10:"<cr>') 66 feed('echo var2<cr>') 67 feed([[echo "\n- backtrace movements:\n"<cr>]]) 68 feed('b<cr>') 69 feed([[echo "\nnext command cannot go down, we are on bottom\n"<cr>]]) 70 feed('down<cr>') 71 feed('up<cr>') 72 feed([[echo "\nnext command cannot go up, we are on top\n"<cr>]]) 73 feed('up<cr>') 74 feed('b<cr>') 75 feed('echo "fil is not frame or finish, it is file"<cr>') 76 feed('fil<cr>') 77 feed([[echo "\n- relative backtrace movement\n"<cr>]]) 78 feed('fr -1<cr>') 79 feed('frame<cr>') 80 feed('fra +1<cr>') 81 feed('fram<cr>') 82 feed([[echo "\n- go beyond limits does not crash\n"<cr>]]) 83 feed('fr 100<cr>') 84 feed('fra<cr>') 85 feed('frame -40<cr>') 86 feed('fram<cr>') 87 feed([[echo "\n- final result 19:"<cr>]]) 88 feed('cont<cr>') 89 feed_command('0debuggreedy') 90 feed_command('redir END') 91 feed_command('$put =out') 92 93 -- Assert buffer contents. 94 expect([=[ 95 96 97 98 - show backtrace: 99 100 2 function Foo[2] 101 1 Bar[2] 102 ->0 Bazz 103 line 2: let var3 = "another var" 104 105 show variables on different levels: 106 107 6 108 2 function Foo[2] 109 ->1 Bar[2] 110 0 Bazz 111 line 2: let var3 = "another var" 112 3 113 ->2 function Foo[2] 114 1 Bar[2] 115 0 Bazz 116 line 2: let var3 = "another var" 117 1 118 119 - undefined vars: 120 121 undefined var3 on former level: 122 Error in function Foo[2]..Bar[2]..Bazz: 123 line 3: 124 E121: Undefined variable: var3 125 here var3 is defined with "another var": 126 another var 127 128 undefined var2 on former level 129 Error in function Foo[2]..Bar: 130 line 3: 131 E121: Undefined variable: var2 132 here var2 is defined with 10: 133 10 134 135 - backtrace movements: 136 137 1 function Foo[2] 138 ->0 Bar 139 line 3: End of function 140 141 next command cannot go down, we are on bottom 142 143 frame is zero 144 145 next command cannot go up, we are on top 146 147 frame at highest level: 1 148 ->1 function Foo[2] 149 0 Bar 150 line 3: End of function 151 fil is not frame or finish, it is file 152 "[No Name]" --No lines in buffer-- 153 154 - relative backtrace movement 155 156 1 function Foo[2] 157 ->0 Bar 158 line 3: End of function 159 ->1 function Foo[2] 160 0 Bar 161 line 3: End of function 162 163 - go beyond limits does not crash 164 165 frame at highest level: 1 166 ->1 function Foo[2] 167 0 Bar 168 line 3: End of function 169 frame is zero 170 1 function Foo[2] 171 ->0 Bar 172 line 3: End of function 173 174 - final result 19: 175 19 176 ]=]) 177 end) 178 end)