blob: 638f9c7c3466d6171265318974702d1df54ddb1e [file] [log] [blame]
Bram Moolenaar58adb142016-01-16 21:50:51 +01001" Test for expanding file names
2
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +01003source shared.vim
Christian Brabandt8b8d8292021-11-19 12:37:36 +00004source check.vim
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +01005
Bram Moolenaar58adb142016-01-16 21:50:51 +01006func Test_with_directories()
7 call mkdir('Xdir1')
8 call mkdir('Xdir2')
9 call mkdir('Xdir3')
10 cd Xdir3
11 call mkdir('Xdir4')
12 cd ..
13
14 split Xdir1/file
15 call setline(1, ['a', 'b'])
16 w
17 w Xdir3/Xdir4/file
18 close
19
20 next Xdir?/*/file
21 call assert_equal('Xdir3/Xdir4/file', expand('%'))
Bram Moolenaarf60b7962016-01-16 22:47:23 +010022 if has('unix')
23 next! Xdir?/*/nofile
24 call assert_equal('Xdir?/*/nofile', expand('%'))
25 endif
Bram Moolenaar08b270a2016-01-17 18:34:19 +010026 " Edit another file, on MS-Windows the swap file would be in use and can't
27 " be deleted.
28 edit foo
Bram Moolenaar58adb142016-01-16 21:50:51 +010029
Bram Moolenaar08b270a2016-01-17 18:34:19 +010030 call assert_equal(0, delete('Xdir1', 'rf'))
31 call assert_equal(0, delete('Xdir2', 'rf'))
32 call assert_equal(0, delete('Xdir3', 'rf'))
Bram Moolenaar58adb142016-01-16 21:50:51 +010033endfunc
34
35func Test_with_tilde()
36 let dir = getcwd()
37 call mkdir('Xdir ~ dir')
38 call assert_true(isdirectory('Xdir ~ dir'))
39 cd Xdir\ ~\ dir
40 call assert_true(getcwd() =~ 'Xdir \~ dir')
Bram Moolenaar3503d7c2019-11-09 20:10:17 +010041 call chdir(dir)
Bram Moolenaar58adb142016-01-16 21:50:51 +010042 call delete('Xdir ~ dir', 'd')
43 call assert_false(isdirectory('Xdir ~ dir'))
44endfunc
Bram Moolenaar00136dc2018-07-25 21:19:13 +020045
46func Test_expand_tilde_filename()
47 split ~
48 call assert_equal('~', expand('%'))
49 call assert_notequal(expand('%:p'), expand('~/'))
50 call assert_match('\~', expand('%:p'))
51 bwipe!
52endfunc
Bram Moolenaar80dad482019-06-09 17:22:31 +020053
54func Test_expandcmd()
55 let $FOO = 'Test'
56 call assert_equal('e x/Test/y', expandcmd('e x/$FOO/y'))
57 unlet $FOO
58
59 new
60 edit Xfile1
61 call assert_equal('e Xfile1', expandcmd('e %'))
62 edit Xfile2
63 edit Xfile1
Bram Moolenaara4208962019-08-24 20:50:19 +020064 call assert_equal('e Xfile2', 'e #'->expandcmd())
Bram Moolenaar80dad482019-06-09 17:22:31 +020065 edit Xfile2
66 edit Xfile3
67 edit Xfile4
68 let bnum = bufnr('Xfile2')
69 call assert_equal('e Xfile2', expandcmd('e #' . bnum))
70 call setline('.', 'Vim!@#')
71 call assert_equal('e Vim', expandcmd('e <cword>'))
72 call assert_equal('e Vim!@#', expandcmd('e <cWORD>'))
73 enew!
74 edit Xfile.java
75 call assert_equal('e Xfile.py', expandcmd('e %:r.py'))
76 call assert_equal('make abc.java', expandcmd('make abc.%:e'))
77 call assert_equal('make Xabc.java', expandcmd('make %:s?file?abc?'))
78 edit a1a2a3.rb
79 call assert_equal('make b1b2b3.rb a1a2a3 Xfile.o', expandcmd('make %:gs?a?b? %< #<.o'))
80
Yegappan Lakshmanan5018a832022-04-02 21:12:21 +010081 call assert_equal('make <afile>', expandcmd("make <afile>"))
82 call assert_equal('make <amatch>', expandcmd("make <amatch>"))
83 call assert_equal('make <abuf>', expandcmd("make <abuf>"))
Bram Moolenaar80dad482019-06-09 17:22:31 +020084 enew
Yegappan Lakshmanan5018a832022-04-02 21:12:21 +010085 call assert_equal('make %', expandcmd("make %"))
Bram Moolenaar818fc9a2020-02-21 17:54:45 +010086 let $FOO="blue\tsky"
87 call setline(1, "$FOO")
88 call assert_equal("grep pat blue\tsky", expandcmd('grep pat <cfile>'))
Bram Moolenaarcde0ff32020-04-04 14:00:39 +020089
90 " Test for expression expansion `=
91 let $FOO= "blue"
92 call assert_equal("blue sky", expandcmd("`=$FOO .. ' sky'`"))
Yegappan Lakshmanan2b74b682022-04-03 21:30:32 +010093 let x = expandcmd("`=axbycz`")
94 call assert_equal('`=axbycz`', x)
95 call assert_fails('let x = expandcmd("`=axbycz`", #{errmsg: 1})', 'E121:')
96 let x = expandcmd("`=axbycz`", #{abc: []})
97 call assert_equal('`=axbycz`', x)
Bram Moolenaarcde0ff32020-04-04 14:00:39 +020098
99 " Test for env variable with spaces
100 let $FOO= "foo bar baz"
101 call assert_equal("e foo bar baz", expandcmd("e $FOO"))
102
Yegappan Lakshmanan2b74b682022-04-03 21:30:32 +0100103 if has('unix') && executable('bash')
104 " test for using the shell to expand a command argument.
105 " only bash supports the {..} syntax
106 set shell=bash
107 let x = expandcmd('{1..4}')
108 call assert_equal('{1..4}', x)
109 call assert_fails("let x = expandcmd('{1..4}', #{errmsg: v:true})", 'E77:')
110 let x = expandcmd('{1..4}', #{error: v:true})
111 call assert_equal('{1..4}', x)
112 set shell&
Yegappan Lakshmanan5018a832022-04-02 21:12:21 +0100113 endif
114
Bram Moolenaar818fc9a2020-02-21 17:54:45 +0100115 unlet $FOO
116 close!
Bram Moolenaar80dad482019-06-09 17:22:31 +0200117endfunc
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100118
119" Test for expanding <sfile>, <slnum> and <sflnum> outside of sourcing a script
120func Test_source_sfile()
121 let lines =<< trim [SCRIPT]
Yegappan Lakshmanan5018a832022-04-02 21:12:21 +0100122 :call assert_equal('<sfile>', expandcmd("<sfile>"))
123 :call assert_equal('<slnum>', expandcmd("<slnum>"))
124 :call assert_equal('<sflnum>', expandcmd("<sflnum>"))
125 :call assert_equal('edit <cfile>', expandcmd("edit <cfile>"))
126 :call assert_equal('edit #', expandcmd("edit #"))
127 :call assert_equal('edit #<2', expandcmd("edit #<2"))
128 :call assert_equal('edit <cword>', expandcmd("edit <cword>"))
129 :call assert_equal('edit <cexpr>', expandcmd("edit <cexpr>"))
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100130 :call assert_fails('autocmd User MyCmd echo "<sfile>"', 'E498:')
131 :call writefile(v:errors, 'Xresult')
132 :qall!
133
134 [SCRIPT]
135 call writefile(lines, 'Xscript')
136 if RunVim([], [], '--clean -s Xscript')
137 call assert_equal([], readfile('Xresult'))
138 endif
139 call delete('Xscript')
140 call delete('Xresult')
141endfunc
142
Bram Moolenaar818fc9a2020-02-21 17:54:45 +0100143" Test for expanding filenames multiple times in a command line
144func Test_expand_filename_multicmd()
145 edit foo
146 call setline(1, 'foo!')
147 new
148 call setline(1, 'foo!')
149 new <cword> | new <cWORD>
150 call assert_equal(4, winnr('$'))
151 call assert_equal('foo!', bufname(winbufnr(1)))
152 call assert_equal('foo', bufname(winbufnr(2)))
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200153 call assert_fails('e %:s/.*//', 'E500:')
Bram Moolenaar818fc9a2020-02-21 17:54:45 +0100154 %bwipe!
155endfunc
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100156
Christian Brabandt8b8d8292021-11-19 12:37:36 +0000157func Test_expandcmd_shell_nonomatch()
158 CheckNotMSWindows
159 call assert_equal('$*', expandcmd('$*'))
160endfunc
161
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100162" vim: shiftwidth=2 sts=2 expandtab