Mercurial > vim
view src/testdir/test_expand.vim @ 31063:d9265bf1d327 v9.0.0866
patch 9.0.0866: no test for what patch 8.2.2207 fixes
Commit: https://github.com/vim/vim/commit/f7570f2107d91f35dc67dd0e400fc638585b226c
Author: zeertzjq <zeertzjq@outlook.com>
Date: Sat Nov 12 17:30:25 2022 +0000
patch 9.0.0866: no test for what patch 8.2.2207 fixes
Problem: No test for what patch 8.2.2207 fixes.
Solution: Add a test case. (closes https://github.com/vim/vim/issues/11531)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 12 Nov 2022 18:45:03 +0100 |
parents | ea38db8639eb |
children | dbec60b8c253 |
line wrap: on
line source
" Test for expanding file names source shared.vim source check.vim func Test_with_directories() call mkdir('Xdir1') call mkdir('Xdir2') call mkdir('Xdir3') cd Xdir3 call mkdir('Xdir4') cd .. split Xdir1/file call setline(1, ['a', 'b']) w w Xdir3/Xdir4/file close next Xdir?/*/file call assert_equal('Xdir3/Xdir4/file', expand('%')) if has('unix') next! Xdir?/*/nofile call assert_equal('Xdir?/*/nofile', expand('%')) endif " Edit another file, on MS-Windows the swap file would be in use and can't " be deleted. edit foo call assert_equal(0, delete('Xdir1', 'rf')) call assert_equal(0, delete('Xdir2', 'rf')) call assert_equal(0, delete('Xdir3', 'rf')) endfunc func Test_with_tilde() let dir = getcwd() call mkdir('Xdir ~ dir') call assert_true(isdirectory('Xdir ~ dir')) cd Xdir\ ~\ dir call assert_true(getcwd() =~ 'Xdir \~ dir') call chdir(dir) call delete('Xdir ~ dir', 'd') call assert_false(isdirectory('Xdir ~ dir')) endfunc func Test_expand_tilde_filename() split ~ call assert_equal('~', expand('%')) call assert_notequal(expand('%:p'), expand('~/')) call assert_match('\~', expand('%:p')) bwipe! endfunc func Test_expandcmd() let $FOO = 'Test' call assert_equal('e x/Test/y', expandcmd('e x/$FOO/y')) unlet $FOO new edit Xpandfile1 call assert_equal('e Xpandfile1', expandcmd('e %')) edit Xpandfile2 edit Xpandfile1 call assert_equal('e Xpandfile2', 'e #'->expandcmd()) edit Xpandfile2 edit Xpandfile3 edit Xpandfile4 let bnum = bufnr('Xpandfile2') call assert_equal('e Xpandfile2', expandcmd('e #' . bnum)) call setline('.', 'Vim!@#') call assert_equal('e Vim', expandcmd('e <cword>')) call assert_equal('e Vim!@#', expandcmd('e <cWORD>')) enew! edit Xpandfile.java call assert_equal('e Xpandfile.py', expandcmd('e %:r.py')) call assert_equal('make abc.java', expandcmd('make abc.%:e')) call assert_equal('make Xabc.java', expandcmd('make %:s?pandfile?abc?')) edit a1a2a3.rb call assert_equal('make b1b2b3.rb a1a2a3 Xpandfile.o', expandcmd('make %:gs?a?b? %< #<.o')) call assert_equal('make <afile>', expandcmd("make <afile>")) call assert_equal('make <amatch>', expandcmd("make <amatch>")) call assert_equal('make <abuf>', expandcmd("make <abuf>")) enew call assert_equal('make %', expandcmd("make %")) let $FOO="blue\tsky" call setline(1, "$FOO") call assert_equal("grep pat blue\tsky", expandcmd('grep pat <cfile>')) " Test for expression expansion `= let $FOO= "blue" call assert_equal("blue sky", expandcmd("`=$FOO .. ' sky'`")) let x = expandcmd("`=axbycz`") call assert_equal('`=axbycz`', x) call assert_fails('let x = expandcmd("`=axbycz`", #{errmsg: 1})', 'E121:') let x = expandcmd("`=axbycz`", #{abc: []}) call assert_equal('`=axbycz`', x) " Test for env variable with spaces let $FOO= "foo bar baz" call assert_equal("e foo bar baz", expandcmd("e $FOO")) if has('unix') && executable('bash') " test for using the shell to expand a command argument. " only bash supports the {..} syntax set shell=bash let x = expandcmd('{1..4}') call assert_equal('{1..4}', x) call assert_fails("let x = expandcmd('{1..4}', #{errmsg: v:true})", 'E77:') let x = expandcmd('{1..4}', #{error: v:true}) call assert_equal('{1..4}', x) set shell& endif unlet $FOO close! endfunc " Test for expanding <sfile>, <slnum> and <sflnum> outside of sourcing a script func Test_source_sfile() let lines =<< trim [SCRIPT] :call assert_equal('<sfile>', expandcmd("<sfile>")) :call assert_equal('<slnum>', expandcmd("<slnum>")) :call assert_equal('<sflnum>', expandcmd("<sflnum>")) :call assert_equal('edit <cfile>', expandcmd("edit <cfile>")) :call assert_equal('edit #', expandcmd("edit #")) :call assert_equal('edit #<2', expandcmd("edit #<2")) :call assert_equal('edit <cword>', expandcmd("edit <cword>")) :call assert_equal('edit <cexpr>', expandcmd("edit <cexpr>")) :call assert_fails('autocmd User MyCmd echo "<sfile>"', 'E498:') : :call assert_equal('', expand('<script>')) :verbose echo expand('<script>') :call add(v:errors, v:errmsg) :verbose echo expand('<sfile>') :call add(v:errors, v:errmsg) :call writefile(v:errors, 'Xresult') :qall! [SCRIPT] call writefile(lines, 'Xscript', 'D') if RunVim([], [], '--clean -s Xscript') call assert_equal([ \ 'E1274: No script file name to substitute for "<script>"', \ 'E498: No :source file name to substitute for "<sfile>"'], \ readfile('Xresult')) endif call delete('Xresult') endfunc " Test for expanding filenames multiple times in a command line func Test_expand_filename_multicmd() edit foo call setline(1, 'foo!') new call setline(1, 'foo!') new <cword> | new <cWORD> call assert_equal(4, winnr('$')) call assert_equal('foo!', bufname(winbufnr(1))) call assert_equal('foo', bufname(winbufnr(2))) call assert_fails('e %:s/.*//', 'E500:') %bwipe! endfunc func Test_expandcmd_shell_nonomatch() CheckNotMSWindows call assert_equal('$*', expandcmd('$*')) endfunc func Test_expand_script_source() let lines0 =<< trim [SCRIPT] call extend(g:script_level, [expand('<script>:t')]) so Xscript1 func F0() call extend(g:func_level, [expand('<script>:t')]) endfunc au User * call extend(g:au_level, [expand('<script>:t')]) [SCRIPT] let lines1 =<< trim [SCRIPT] call extend(g:script_level, [expand('<script>:t')]) so Xscript2 func F1() call extend(g:func_level, [expand('<script>:t')]) endfunc au User * call extend(g:au_level, [expand('<script>:t')]) [SCRIPT] let lines2 =<< trim [SCRIPT] call extend(g:script_level, [expand('<script>:t')]) func F2() call extend(g:func_level, [expand('<script>:t')]) endfunc au User * call extend(g:au_level, [expand('<script>:t')]) [SCRIPT] call writefile(lines0, 'Xscript0', 'D') call writefile(lines1, 'Xscript1', 'D') call writefile(lines2, 'Xscript2', 'D') " Check the expansion of <script> at different levels. let g:script_level = [] let g:func_level = [] let g:au_level = [] so Xscript0 call F0() call F1() call F2() doautocmd User call assert_equal(['Xscript0', 'Xscript1', 'Xscript2'], g:script_level) call assert_equal(['Xscript0', 'Xscript1', 'Xscript2'], g:func_level) call assert_equal(['Xscript2', 'Xscript1', 'Xscript0'], g:au_level) unlet g:script_level g:func_level delfunc F0 delfunc F1 delfunc F2 endfunc " vim: shiftwidth=2 sts=2 expandtab