neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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)