neovim

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

test_expand_func.vim (4455B)


      1 " Tests for expand()
      2 
      3 source shared.vim
      4 
      5 let s:sfile = expand('<sfile>')
      6 let s:slnum = str2nr(expand('<slnum>'))
      7 let s:sflnum = str2nr(expand('<sflnum>'))
      8 
      9 func s:expand_sfile()
     10  return expand('<sfile>')
     11 endfunc
     12 
     13 func s:expand_slnum()
     14  return str2nr(expand('<slnum>'))
     15 endfunc
     16 
     17 func s:expand_sflnum()
     18  return str2nr(expand('<sflnum>'))
     19 endfunc
     20 
     21 " This test depends on the location in the test file, put it first.
     22 func Test_expand_sflnum()
     23  call assert_equal(7, s:sflnum)
     24  call assert_equal(24, str2nr(expand('<sflnum>')))
     25 
     26  " Line-continuation
     27  call assert_equal(
     28        \ 27,
     29        \ str2nr(expand('<sflnum>')))
     30 
     31  " Call in script-local function
     32  call assert_equal(18, s:expand_sflnum())
     33 
     34  " Call in command
     35  command Flnum echo expand('<sflnum>')
     36  call assert_equal(36, str2nr(trim(execute('Flnum'))))
     37  delcommand Flnum
     38 endfunc
     39 
     40 func Test_expand_sfile_and_stack()
     41  call assert_match('test_expand_func\.vim$', s:sfile)
     42  let expected = 'script .*testdir/runtest.vim\[\d\+\]\.\.function RunTheTest\[\d\+\]\.\.Test_expand_sfile_and_stack'
     43  call assert_match(expected .. '$', expand('<sfile>'))
     44  call assert_match(expected .. '\[4\]$' , expand('<stack>'))
     45 
     46  " Call in script-local function
     47  call assert_match('script .*testdir/runtest.vim\[\d\+\]\.\.function RunTheTest\[\d\+\]\.\.Test_expand_sfile_and_stack\[7\]\.\.<SNR>\d\+_expand_sfile$', s:expand_sfile())
     48 
     49  " Call in command
     50  command Sfile echo expand('<sfile>')
     51  call assert_match('script .*testdir/runtest.vim\[\d\+\]\.\.function RunTheTest\[\d\+\]\.\.Test_expand_sfile_and_stack$', trim(execute('Sfile')))
     52  delcommand Sfile
     53 
     54  " Use <stack> from sourced script.
     55  let lines =<< trim END
     56    " comment here
     57    let g:stack_value = expand('<stack>')
     58  END
     59  call writefile(lines, 'Xstack')
     60  source Xstack
     61  call assert_match('\<Xstack\[2\]$', g:stack_value)
     62  unlet g:stack_value
     63  call delete('Xstack')
     64 
     65  if exists('+shellslash')
     66    call mkdir('Xshellslash')
     67    let lines =<< trim END
     68      let g:stack1 = expand('<stack>')
     69      set noshellslash
     70      let g:stack2 = expand('<stack>')
     71      set shellslash
     72      let g:stack3 = expand('<stack>')
     73    END
     74    call writefile(lines, 'Xshellslash/Xstack')
     75    " Test that changing 'shellslash' always affects the result of expand()
     76    " when sourcing a script multiple times.
     77    for i in range(2)
     78      source Xshellslash/Xstack
     79      call assert_match('\<Xshellslash/Xstack\[1\]$', g:stack1)
     80      call assert_match('\<Xshellslash\\Xstack\[3\]$', g:stack2)
     81      call assert_match('\<Xshellslash/Xstack\[5\]$', g:stack3)
     82      unlet g:stack1
     83      unlet g:stack2
     84      unlet g:stack3
     85    endfor
     86    call delete('Xshellslash', 'rf')
     87  endif
     88 endfunc
     89 
     90 func Test_expand_slnum()
     91  call assert_equal(6, s:slnum)
     92  call assert_equal(2, str2nr(expand('<slnum>')))
     93 
     94  " Line-continuation
     95  call assert_equal(
     96        \ 5,
     97        \ str2nr(expand('<slnum>')))
     98 
     99  " Call in script-local function
    100  call assert_equal(1, s:expand_slnum())
    101 
    102  " Call in command
    103  command Slnum echo expand('<slnum>')
    104  call assert_equal(14, str2nr(trim(execute('Slnum'))))
    105  delcommand Slnum
    106 endfunc
    107 
    108 func Test_expand()
    109  new
    110  call assert_equal("", expand('%:S'))
    111  call assert_equal('3', '<slnum>'->expand())
    112  call assert_equal(['4'], expand('<slnum>', v:false, v:true))
    113  " Don't add any line above this, otherwise <slnum> will change.
    114  call assert_equal("", expand('%'))
    115  set verbose=1
    116  call assert_equal("", expand('%'))
    117  set verbose=0
    118  call assert_equal("", expand('%:p'))
    119  quit
    120 endfunc
    121 
    122 func s:sid_test()
    123  return 'works'
    124 endfunc
    125 
    126 func Test_expand_SID()
    127  let sid = expand('<SID>')
    128  execute 'let g:sid_result = ' .. sid .. 'sid_test()'
    129  call assert_equal('works', g:sid_result)
    130 endfunc
    131 
    132 
    133 " Test for 'wildignore' with expand()
    134 func Test_expand_wildignore()
    135  set wildignore=*.vim
    136  call assert_equal('', expand('test_expand_func.vim'))
    137  call assert_equal('', expand('test_expand_func.vim', 0))
    138  call assert_equal([], expand('test_expand_func.vim', 0, 1))
    139  call assert_equal('test_expand_func.vim', expand('test_expand_func.vim', 1))
    140  call assert_equal(['test_expand_func.vim'],
    141        \ expand('test_expand_func.vim', 1, 1))
    142  call assert_fails("call expand('*', [])", 'E745:')
    143  set wildignore&
    144 endfunc
    145 
    146 " Passing a long string to expand with 'wildignorecase' should not crash Vim.
    147 func Test_expand_long_str()
    148  set wildignorecase
    149  call expand('a'->repeat(99999))
    150  set wildignorecase&
    151 endfunc
    152 
    153 " vim: shiftwidth=2 sts=2 expandtab