1" Tests for expand()
2
3source shared.vim
4
5let s:sfile = expand('<sfile>')
6let s:slnum = str2nr(expand('<slnum>'))
7let s:sflnum = str2nr(expand('<sflnum>'))
8
9func s:expand_sfile()
10  return expand('<sfile>')
11endfunc
12
13func s:expand_slnum()
14  return str2nr(expand('<slnum>'))
15endfunc
16
17func s:expand_sflnum()
18  return str2nr(expand('<sflnum>'))
19endfunc
20
21" This test depends on the location in the test file, put it first.
22func 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
38endfunc
39
40func 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 , 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    let g:stack_value = expand('<stack>')
57  END
58  call writefile(lines, 'Xstack')
59  source Xstack
60  call assert_match('\<Xstack$', g:stack_value)
61  call delete('Xstack')
62endfunc
63
64func Test_expand_slnum()
65  call assert_equal(6, s:slnum)
66  call assert_equal(2, str2nr(expand('<slnum>')))
67
68  " Line-continuation
69  call assert_equal(
70        \ 5,
71        \ str2nr(expand('<slnum>')))
72
73  " Call in script-local function
74  call assert_equal(1, s:expand_slnum())
75
76  " Call in command
77  command Slnum echo expand('<slnum>')
78  call assert_equal(14, str2nr(trim(execute('Slnum'))))
79  delcommand Slnum
80endfunc
81
82func Test_expand()
83  new
84  call assert_equal("",  expand('%:S'))
85  call assert_equal('3', '<slnum>'->expand())
86  call assert_equal(['4'], expand('<slnum>', v:false, v:true))
87  " Don't add any line above this, otherwise <slnum> will change.
88  quit
89endfunc
90
91func s:sid_test()
92  return 'works'
93endfunc
94
95func Test_expand_SID()
96  let sid = expand('<SID>')
97  execute 'let g:sid_result = ' .. sid .. 'sid_test()'
98  call assert_equal('works', g:sid_result)
99endfunc
100
101
102" Test for 'wildignore' with expand()
103func Test_expand_wildignore()
104  set wildignore=*.vim
105  call assert_equal('', expand('test_expand_func.vim'))
106  call assert_equal('', expand('test_expand_func.vim', 0))
107  call assert_equal([], expand('test_expand_func.vim', 0, 1))
108  call assert_equal('test_expand_func.vim', expand('test_expand_func.vim', 1))
109  call assert_equal(['test_expand_func.vim'],
110        \ expand('test_expand_func.vim', 1, 1))
111  call assert_fails("call expand('*', [])", 'E745:')
112  set wildignore&
113endfunc
114
115" vim: shiftwidth=2 sts=2 expandtab
116