forked from aniani/vim
patch 8.1.0894: MS-Windows: resolve() does not return a reparse point
Problem: MS-Windows: resolve() does not return a reparse point. Solution: Improve resolve(). (Yasuhiro Matsumoto, closes #3896)
This commit is contained in:
@@ -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('/'))
|
||||
|
Reference in New Issue
Block a user