neovim

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

command_count_spec.lua (6804B)


      1 -- Test for user command counts
      2 
      3 local n = require('test.functional.testnvim')()
      4 
      5 local clear, source, expect = n.clear, n.source, n.expect
      6 local feed_command = n.feed_command
      7 
      8 -- luacheck: ignore 613 (Trailing whitespace in a string)
      9 describe('command_count', function()
     10  it('is working', function()
     11    -- It is relevant for the test to load a file initially.  If this is
     12    -- emulated with :arg the buffer count is wrong as nvim creates an empty
     13    -- buffer if it was started without a filename.
     14    clear('test_command_count.in')
     15 
     16    source([[
     17      let g:tmpname = tempname()
     18      call mkdir(g:tmpname)
     19      execute "cd ".g:tmpname
     20      lang C
     21      let g:lines = []
     22      com -range=% RangeLines
     23        \ :call add(g:lines, 'RangeLines '.<line1>.' '.<line2>)
     24      com -range -addr=arguments RangeArguments
     25        \ :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
     26      com -range=% -addr=arguments RangeArgumentsAll
     27        \ :call add(g:lines, 'RangeArgumentsAll '.<line1>.' '.<line2>)
     28      com -range -addr=loaded_buffers RangeLoadedBuffers
     29        \ :call add(g:lines, 'RangeLoadedBuffers '.<line1>.' '.<line2>)
     30      com -range=% -addr=loaded_buffers RangeLoadedBuffersAll
     31        \ :call add(g:lines, 'RangeLoadedBuffersAll '.<line1>.' '.<line2>)
     32      com -range -addr=buffers RangeBuffers
     33        \ :call add(g:lines, 'RangeBuffers '.<line1>.' '.<line2>)
     34      com -range=% -addr=buffers RangeBuffersAll
     35        \ :call add(g:lines, 'RangeBuffersAll '.<line1>.' '.<line2>)
     36      com -range -addr=windows RangeWindows
     37        \ :call add(g:lines, 'RangeWindows '.<line1>.' '.<line2>)
     38      com -range=% -addr=windows RangeWindowsAll
     39        \ :call add(g:lines, 'RangeWindowsAll '.<line1>.' '.<line2>)
     40      com -range -addr=tabs RangeTabs
     41        \ :call add(g:lines, 'RangeTabs '.<line1>.' '.<line2>)
     42      com -range=% -addr=tabs RangeTabsAll
     43        \ :call add(g:lines, 'RangeTabsAll '.<line1>.' '.<line2>)
     44      set hidden
     45      arga a b c d
     46      argdo echo "loading buffers"
     47      argu 3
     48      .-,$-RangeArguments
     49      %RangeArguments
     50      RangeArgumentsAll
     51      N
     52      .RangeArguments
     53      split
     54      split
     55      split
     56      split
     57      3wincmd w
     58      .,$RangeWindows
     59      %RangeWindows
     60      RangeWindowsAll
     61      only
     62      blast
     63      bd
     64      .,$RangeLoadedBuffers
     65      %RangeLoadedBuffers
     66      RangeLoadedBuffersAll
     67      .,$RangeBuffers
     68      %RangeBuffers
     69      RangeBuffersAll
     70      tabe
     71      tabe
     72      tabe
     73      tabe
     74      normal 2gt
     75      .,$RangeTabs
     76      %RangeTabs
     77      RangeTabsAll
     78      1tabonly
     79      s/\n/\r\r\r\r\r/
     80      2ma<
     81      $-ma>
     82      '<,'>RangeLines
     83      com -range=% -buffer LocalRangeLines
     84        \ :call add(g:lines, 'LocalRangeLines '.<line1>.' '.<line2>)
     85      '<,'>LocalRangeLines
     86      b1
     87      call add(g:lines, '')
     88      %argd
     89      arga a b c d
     90      ]])
     91    -- This can not be in the source() call as it will produce errors.
     92    feed_command([[let v:errmsg = '']])
     93    feed_command('5argu')
     94    feed_command([[call add(g:lines, '5argu ' . v:errmsg)]])
     95    feed_command('$argu')
     96    feed_command([[call add(g:lines, '4argu ' . expand('%:t'))]])
     97    feed_command([[let v:errmsg = '']])
     98    feed_command('1argu')
     99    feed_command([[call add(g:lines, '1argu ' . expand('%:t'))]])
    100    feed_command([[let v:errmsg = '']])
    101    feed_command('100b')
    102    feed_command([[call add(g:lines, '100b ' . v:errmsg)]])
    103    feed_command('split')
    104    feed_command('split')
    105    feed_command('split')
    106    feed_command('split')
    107    feed_command([[let v:errmsg = '']])
    108    feed_command('0close')
    109    feed_command([[call add(g:lines, '0close ' . v:errmsg)]])
    110    feed_command('$wincmd w')
    111    feed_command('$close')
    112    feed_command([[call add(g:lines, '$close ' . winnr())]])
    113    feed_command([[let v:errmsg = '']])
    114    feed_command('$+close')
    115    feed_command([[call add(g:lines, '$+close ' . v:errmsg)]])
    116    feed_command('$tabe')
    117    feed_command([[call add(g:lines, '$tabe ' . tabpagenr())]])
    118    feed_command([[let v:errmsg = '']])
    119    feed_command('$+tabe')
    120    feed_command([[call add(g:lines, '$+tabe ' . v:errmsg)]])
    121    source([[
    122      only!
    123      e x
    124      0tabm
    125      normal 1gt
    126      call add(g:lines, '0tabm ' . expand('%:t'))
    127      tabonly!
    128      only!
    129      e! test.out
    130      call append(0, g:lines)
    131      unlet g:lines
    132      w
    133      bd
    134      b1
    135      let g:lines = []
    136      func BufStatus()
    137        call add(g:lines,
    138   \  'aaa: ' . buflisted(g:buf_aaa) .
    139   \ ' bbb: ' . buflisted(g:buf_bbb) .
    140   \ ' ccc: ' . buflisted(g:buf_ccc))
    141      endfunc
    142      se nohidden
    143      e aaa
    144      let buf_aaa = bufnr('%')
    145      e bbb
    146      let buf_bbb = bufnr('%')
    147      e ccc
    148      let buf_ccc = bufnr('%')
    149      b1
    150      call BufStatus()
    151      exe buf_bbb . "," . buf_ccc . "bdelete"
    152      call BufStatus()
    153      exe buf_aaa . "bdelete"
    154      call BufStatus()
    155      e! test.out
    156      call append('$', g:lines)
    157      unlet g:lines
    158      delfunc BufStatus
    159      w
    160      bd
    161      b1
    162      se hidden
    163      only!
    164      let g:lines = []
    165      %argd
    166      arga a b c d e f
    167      3argu
    168      let args = ''
    169      .,$-argdo let args .= ' '.expand('%')
    170      call add(g:lines, 'argdo:' . args)
    171      split
    172      split
    173      split
    174      split
    175      2wincmd w
    176      let windows = ''
    177      .,$-windo let windows .= ' '.winnr()
    178      call add(g:lines, 'windo:'. windows)
    179      b2
    180      let buffers = ''
    181      .,$-bufdo let buffers .= ' '.bufnr('%')
    182      call add(g:lines, 'bufdo:' . buffers)
    183      3bd
    184      let buffers = ''
    185      3,7bufdo let buffers .= ' '.bufnr('%')
    186      call add(g:lines, 'bufdo:' . buffers)
    187      tabe
    188      tabe
    189      tabe
    190      tabe
    191      normal! 2gt
    192      let tabpages = ''
    193      .,$-tabdo let tabpages .= ' '.tabpagenr()
    194      call add(g:lines, 'tabdo:' . tabpages)
    195      e! test.out
    196      call append('$', g:lines)
    197    ]])
    198 
    199    -- Assert buffer contents.
    200    expect([[
    201      RangeArguments 2 4
    202      RangeArguments 1 5
    203      RangeArgumentsAll 1 5
    204      RangeArguments 2 2
    205      RangeWindows 3 5
    206      RangeWindows 1 5
    207      RangeWindowsAll 1 5
    208      RangeLoadedBuffers 2 4
    209      RangeLoadedBuffers 1 4
    210      RangeLoadedBuffersAll 1 4
    211      RangeBuffers 2 5
    212      RangeBuffers 1 5
    213      RangeBuffersAll 1 5
    214      RangeTabs 2 5
    215      RangeTabs 1 5
    216      RangeTabsAll 1 5
    217      RangeLines 2 5
    218      LocalRangeLines 2 5
    219 
    220      5argu E16: Invalid range
    221      4argu d
    222      1argu a
    223      100b E16: Invalid range
    224      0close 
    225      $close 3
    226      $+close E16: Invalid range
    227      $tabe 2
    228      $+tabe E16: Invalid range
    229      0tabm x
    230 
    231      aaa: 1 bbb: 1 ccc: 1
    232      aaa: 1 bbb: 0 ccc: 0
    233      aaa: 0 bbb: 0 ccc: 0
    234      argdo: c d e
    235      windo: 2 3 4
    236      bufdo: 2 3 4 5 6 7 8 9 10 15
    237      bufdo: 4 5 6 7
    238      tabdo: 2 3 4]])
    239 
    240    source([[
    241      cd ..
    242      call delete(g:tmpname, 'rf')
    243    ]])
    244  end)
    245 end)