xref: /vim-8.2.3635/src/testdir/test_expand.vim (revision 8b8d829f)
158adb147SBram Moolenaar" Test for expanding file names
258adb147SBram Moolenaar
3bc2b71d4SBram Moolenaarsource shared.vim
4*8b8d829fSChristian Brabandtsource check.vim
5bc2b71d4SBram Moolenaar
658adb147SBram Moolenaarfunc Test_with_directories()
758adb147SBram Moolenaar  call mkdir('Xdir1')
858adb147SBram Moolenaar  call mkdir('Xdir2')
958adb147SBram Moolenaar  call mkdir('Xdir3')
1058adb147SBram Moolenaar  cd Xdir3
1158adb147SBram Moolenaar  call mkdir('Xdir4')
1258adb147SBram Moolenaar  cd ..
1358adb147SBram Moolenaar
1458adb147SBram Moolenaar  split Xdir1/file
1558adb147SBram Moolenaar  call setline(1, ['a', 'b'])
1658adb147SBram Moolenaar  w
1758adb147SBram Moolenaar  w Xdir3/Xdir4/file
1858adb147SBram Moolenaar  close
1958adb147SBram Moolenaar
2058adb147SBram Moolenaar  next Xdir?/*/file
2158adb147SBram Moolenaar  call assert_equal('Xdir3/Xdir4/file', expand('%'))
22f60b796fSBram Moolenaar  if has('unix')
2358adb147SBram Moolenaar    next! Xdir?/*/nofile
2458adb147SBram Moolenaar    call assert_equal('Xdir?/*/nofile', expand('%'))
25f60b796fSBram Moolenaar  endif
2608b270a8SBram Moolenaar  " Edit another file, on MS-Windows the swap file would be in use and can't
2708b270a8SBram Moolenaar  " be deleted.
2808b270a8SBram Moolenaar  edit foo
2958adb147SBram Moolenaar
3008b270a8SBram Moolenaar  call assert_equal(0, delete('Xdir1', 'rf'))
3108b270a8SBram Moolenaar  call assert_equal(0, delete('Xdir2', 'rf'))
3208b270a8SBram Moolenaar  call assert_equal(0, delete('Xdir3', 'rf'))
3358adb147SBram Moolenaarendfunc
3458adb147SBram Moolenaar
3558adb147SBram Moolenaarfunc Test_with_tilde()
3658adb147SBram Moolenaar  let dir = getcwd()
3758adb147SBram Moolenaar  call mkdir('Xdir ~ dir')
3858adb147SBram Moolenaar  call assert_true(isdirectory('Xdir ~ dir'))
3958adb147SBram Moolenaar  cd Xdir\ ~\ dir
4058adb147SBram Moolenaar  call assert_true(getcwd() =~ 'Xdir \~ dir')
413503d7c9SBram Moolenaar  call chdir(dir)
4258adb147SBram Moolenaar  call delete('Xdir ~ dir', 'd')
4358adb147SBram Moolenaar  call assert_false(isdirectory('Xdir ~ dir'))
4458adb147SBram Moolenaarendfunc
4500136dc3SBram Moolenaar
4600136dc3SBram Moolenaarfunc Test_expand_tilde_filename()
4700136dc3SBram Moolenaar  split ~
4800136dc3SBram Moolenaar  call assert_equal('~', expand('%'))
4900136dc3SBram Moolenaar  call assert_notequal(expand('%:p'), expand('~/'))
5000136dc3SBram Moolenaar  call assert_match('\~', expand('%:p'))
5100136dc3SBram Moolenaar  bwipe!
5200136dc3SBram Moolenaarendfunc
5380dad48cSBram Moolenaar
5480dad48cSBram Moolenaarfunc Test_expandcmd()
5580dad48cSBram Moolenaar  let $FOO = 'Test'
5680dad48cSBram Moolenaar  call assert_equal('e x/Test/y', expandcmd('e x/$FOO/y'))
5780dad48cSBram Moolenaar  unlet $FOO
5880dad48cSBram Moolenaar
5980dad48cSBram Moolenaar  new
6080dad48cSBram Moolenaar  edit Xfile1
6180dad48cSBram Moolenaar  call assert_equal('e Xfile1', expandcmd('e %'))
6280dad48cSBram Moolenaar  edit Xfile2
6380dad48cSBram Moolenaar  edit Xfile1
64a4208966SBram Moolenaar  call assert_equal('e Xfile2', 'e #'->expandcmd())
6580dad48cSBram Moolenaar  edit Xfile2
6680dad48cSBram Moolenaar  edit Xfile3
6780dad48cSBram Moolenaar  edit Xfile4
6880dad48cSBram Moolenaar  let bnum = bufnr('Xfile2')
6980dad48cSBram Moolenaar  call assert_equal('e Xfile2', expandcmd('e #' . bnum))
7080dad48cSBram Moolenaar  call setline('.', 'Vim!@#')
7180dad48cSBram Moolenaar  call assert_equal('e Vim', expandcmd('e <cword>'))
7280dad48cSBram Moolenaar  call assert_equal('e Vim!@#', expandcmd('e <cWORD>'))
7380dad48cSBram Moolenaar  enew!
7480dad48cSBram Moolenaar  edit Xfile.java
7580dad48cSBram Moolenaar  call assert_equal('e Xfile.py', expandcmd('e %:r.py'))
7680dad48cSBram Moolenaar  call assert_equal('make abc.java', expandcmd('make abc.%:e'))
7780dad48cSBram Moolenaar  call assert_equal('make Xabc.java', expandcmd('make %:s?file?abc?'))
7880dad48cSBram Moolenaar  edit a1a2a3.rb
7980dad48cSBram Moolenaar  call assert_equal('make b1b2b3.rb a1a2a3 Xfile.o', expandcmd('make %:gs?a?b? %< #<.o'))
8080dad48cSBram Moolenaar
8180dad48cSBram Moolenaar  call assert_fails('call expandcmd("make <afile>")', 'E495:')
8280dad48cSBram Moolenaar  call assert_fails('call expandcmd("make <afile>")', 'E495:')
8380dad48cSBram Moolenaar  enew
8480dad48cSBram Moolenaar  call assert_fails('call expandcmd("make %")', 'E499:')
85818fc9adSBram Moolenaar  let $FOO="blue\tsky"
86818fc9adSBram Moolenaar  call setline(1, "$FOO")
87818fc9adSBram Moolenaar  call assert_equal("grep pat blue\tsky", expandcmd('grep pat <cfile>'))
88cde0ff39SBram Moolenaar
89cde0ff39SBram Moolenaar  " Test for expression expansion `=
90cde0ff39SBram Moolenaar  let $FOO= "blue"
91cde0ff39SBram Moolenaar  call assert_equal("blue sky", expandcmd("`=$FOO .. ' sky'`"))
92cde0ff39SBram Moolenaar
93cde0ff39SBram Moolenaar  " Test for env variable with spaces
94cde0ff39SBram Moolenaar  let $FOO= "foo bar baz"
95cde0ff39SBram Moolenaar  call assert_equal("e foo bar baz", expandcmd("e $FOO"))
96cde0ff39SBram Moolenaar
97818fc9adSBram Moolenaar  unlet $FOO
98818fc9adSBram Moolenaar  close!
9980dad48cSBram Moolenaarendfunc
100bc2b71d4SBram Moolenaar
101bc2b71d4SBram Moolenaar" Test for expanding <sfile>, <slnum> and <sflnum> outside of sourcing a script
102bc2b71d4SBram Moolenaarfunc Test_source_sfile()
103bc2b71d4SBram Moolenaar  let lines =<< trim [SCRIPT]
104bc2b71d4SBram Moolenaar    :call assert_fails('echo expandcmd("<sfile>")', 'E498:')
105bc2b71d4SBram Moolenaar    :call assert_fails('echo expandcmd("<slnum>")', 'E842:')
106bc2b71d4SBram Moolenaar    :call assert_fails('echo expandcmd("<sflnum>")', 'E961:')
107bc2b71d4SBram Moolenaar    :call assert_fails('call expandcmd("edit <cfile>")', 'E446:')
108bc2b71d4SBram Moolenaar    :call assert_fails('call expandcmd("edit #")', 'E194:')
109bc2b71d4SBram Moolenaar    :call assert_fails('call expandcmd("edit #<2")', 'E684:')
110bc2b71d4SBram Moolenaar    :call assert_fails('call expandcmd("edit <cword>")', 'E348:')
111bc2b71d4SBram Moolenaar    :call assert_fails('call expandcmd("edit <cexpr>")', 'E348:')
112bc2b71d4SBram Moolenaar    :call assert_fails('autocmd User MyCmd echo "<sfile>"', 'E498:')
113bc2b71d4SBram Moolenaar    :call writefile(v:errors, 'Xresult')
114bc2b71d4SBram Moolenaar    :qall!
115bc2b71d4SBram Moolenaar
116bc2b71d4SBram Moolenaar  [SCRIPT]
117bc2b71d4SBram Moolenaar  call writefile(lines, 'Xscript')
118bc2b71d4SBram Moolenaar  if RunVim([], [], '--clean -s Xscript')
119bc2b71d4SBram Moolenaar    call assert_equal([], readfile('Xresult'))
120bc2b71d4SBram Moolenaar  endif
121bc2b71d4SBram Moolenaar  call delete('Xscript')
122bc2b71d4SBram Moolenaar  call delete('Xresult')
123bc2b71d4SBram Moolenaarendfunc
124bc2b71d4SBram Moolenaar
125818fc9adSBram Moolenaar" Test for expanding filenames multiple times in a command line
126818fc9adSBram Moolenaarfunc Test_expand_filename_multicmd()
127818fc9adSBram Moolenaar  edit foo
128818fc9adSBram Moolenaar  call setline(1, 'foo!')
129818fc9adSBram Moolenaar  new
130818fc9adSBram Moolenaar  call setline(1, 'foo!')
131818fc9adSBram Moolenaar  new <cword> | new <cWORD>
132818fc9adSBram Moolenaar  call assert_equal(4, winnr('$'))
133818fc9adSBram Moolenaar  call assert_equal('foo!', bufname(winbufnr(1)))
134818fc9adSBram Moolenaar  call assert_equal('foo', bufname(winbufnr(2)))
135ee4e0c1eSBram Moolenaar  call assert_fails('e %:s/.*//', 'E500:')
136818fc9adSBram Moolenaar  %bwipe!
137818fc9adSBram Moolenaarendfunc
138bc2b71d4SBram Moolenaar
139*8b8d829fSChristian Brabandtfunc Test_expandcmd_shell_nonomatch()
140*8b8d829fSChristian Brabandt  CheckNotMSWindows
141*8b8d829fSChristian Brabandt  call assert_equal('$*', expandcmd('$*'))
142*8b8d829fSChristian Brabandtendfunc
143*8b8d829fSChristian Brabandt
144bc2b71d4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
145