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