diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-02-10 23:18:53 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-02-10 23:18:53 +0100 |
commit | dce1e89be4675bcdbc9785584d3da25295481e63 (patch) | |
tree | bf5df09169e99ed6f60d67e2da4c4d29569d18a2 /src/testdir/test_functions.vim | |
parent | 3615abb693ab2d9374ae72f0993128e32ffa3e1c (diff) | |
download | vim-git-dce1e89be4675bcdbc9785584d3da25295481e63.tar.gz |
patch 8.1.0894: MS-Windows: resolve() does not return a reparse pointv8.1.0894
Problem: MS-Windows: resolve() does not return a reparse point.
Solution: Improve resolve(). (Yasuhiro Matsumoto, closes #3896)
Diffstat (limited to 'src/testdir/test_functions.vim')
-rw-r--r-- | src/testdir/test_functions.vim | 99 |
1 files changed, 98 insertions, 1 deletions
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index 69e6ce0f8..a7caf2240 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -188,7 +188,7 @@ func Test_strftime() call assert_fails('call strftime("%Y", [])', 'E745:') endfunc -func Test_resolve() +func Test_resolve_unix() if !has('unix') return endif @@ -234,6 +234,103 @@ func Test_resolve() call delete('Xlink1') endfunc +func s:normalize_fname(fname) + let ret = substitute(a:fname, '\', '/', 'g') + let ret = substitute(ret, '//', '/', 'g') + let ret = tolower(ret) +endfunc + +func Test_resolve_win32() + if !has('win32') + return + endif + + " test for shortcut file + if executable('cscript') + new Xfile + wq + call writefile([ + \ 'Set fs = CreateObject("Scripting.FileSystemObject")', + \ 'Set ws = WScript.CreateObject("WScript.Shell")', + \ 'Set shortcut = ws.CreateShortcut("Xlink.lnk")', + \ 'shortcut.TargetPath = fs.BuildPath(ws.CurrentDirectory, "Xfile")', + \ 'shortcut.Save' + \], 'link.vbs') + silent !cscript link.vbs + call delete('link.vbs') + call assert_equal(s:normalize_fname(getcwd() . '\Xfile'), s:normalize_fname(resolve('./Xlink.lnk'))) + call delete('Xfile') + + call assert_equal(s:normalize_fname(getcwd() . '\Xfile'), s:normalize_fname(resolve('./Xlink.lnk'))) + call delete('Xlink.lnk') + else + echomsg 'skipped test for shortcut file' + endif + + " remove files + call delete('Xlink') + call delete('Xdir', 'd') + call delete('Xfile') + + " test for symbolic link to a file + new Xfile + wq + silent !mklink Xlink Xfile + if !v:shell_error + call assert_equal(s:normalize_fname(getcwd() . '\Xfile'), s:normalize_fname(resolve('./Xlink'))) + call delete('Xlink') + else + echomsg 'skipped test for symbolic link to a file' + endif + call delete('Xfile') + + " test for junction to a directory + call mkdir('Xdir') + silent !mklink /J Xlink Xdir + if !v:shell_error + call assert_equal(s:normalize_fname(getcwd() . '\Xdir'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) + + call delete('Xdir', 'd') + + " test for junction already removed + call assert_equal(s:normalize_fname(getcwd() . '\Xlink'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) + call delete('Xlink') + else + echomsg 'skipped test for junction to a directory' + call delete('Xdir', 'd') + endif + + " test for symbolic link to a directory + call mkdir('Xdir') + silent !mklink /D Xlink Xdir + if !v:shell_error + call assert_equal(s:normalize_fname(getcwd() . '\Xdir'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) + + call delete('Xdir', 'd') + + " test for symbolic link already removed + call assert_equal(s:normalize_fname(getcwd() . '\Xlink'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) + call delete('Xlink') + else + echomsg 'skipped test for symbolic link to a directory' + call delete('Xdir', 'd') + endif + + " test for buffer name + new Xfile + wq + silent !mklink Xlink Xfile + if !v:shell_error + edit Xlink + call assert_equal('Xlink', bufname('%')) + call delete('Xlink') + bw! + else + echomsg 'skipped test for buffer name' + endif + call delete('Xfile') +endfunc + func Test_simplify() call assert_equal('', simplify('')) call assert_equal('/', simplify('/')) |