mirror of
https://github.com/neovim/neovim.git
synced 2024-12-25 13:45:15 -07:00
af23d17388
The new oldtest directory is in test/old/testdir. The reason for this is that many tests have hardcoded the parent directory name to be 'testdir'.
121 lines
3.2 KiB
VimL
121 lines
3.2 KiB
VimL
" Test for $HOME on Windows.
|
|
|
|
source check.vim
|
|
CheckMSWindows
|
|
|
|
let s:env = {}
|
|
|
|
func s:restore_env()
|
|
for i in keys(s:env)
|
|
exe 'let ' . i . '=s:env["' . i . '"]'
|
|
endfor
|
|
endfunc
|
|
|
|
func s:save_env(...)
|
|
for i in a:000
|
|
exe 'let s:env["' . i . '"]=' . i
|
|
endfor
|
|
endfunc
|
|
|
|
func s:unlet_env(...)
|
|
for i in a:000
|
|
exe 'let ' . i . '=""'
|
|
endfor
|
|
endfunc
|
|
|
|
func CheckHomeIsMissingFromSubprocessEnvironment()
|
|
silent! let out = system('set')
|
|
let env = filter(split(out, "\n"), 'v:val=~"^HOME="')
|
|
call assert_equal(0, len(env))
|
|
endfunc
|
|
|
|
func CheckHomeIsInSubprocessEnvironment(exp)
|
|
silent! let out = system('set')
|
|
let env = filter(split(out, "\n"), 'v:val=~"^HOME="')
|
|
let home = len(env) == 0 ? "" : substitute(env[0], '[^=]\+=', '', '')
|
|
call assert_equal(a:exp, home)
|
|
endfunc
|
|
|
|
func CheckHome(exp, ...)
|
|
call assert_equal(a:exp, $HOME)
|
|
call assert_equal(a:exp, expand('~', ':p'))
|
|
if !a:0
|
|
call CheckHomeIsMissingFromSubprocessEnvironment()
|
|
else
|
|
call CheckHomeIsInSubprocessEnvironment(a:1)
|
|
endif
|
|
endfunc
|
|
|
|
func Test_WindowsHome()
|
|
command! -nargs=* SaveEnv call <SID>save_env(<f-args>)
|
|
command! -nargs=* RestoreEnv call <SID>restore_env()
|
|
command! -nargs=* UnletEnv call <SID>unlet_env(<f-args>)
|
|
set noshellslash
|
|
|
|
let save_home = $HOME
|
|
SaveEnv $USERPROFILE $HOMEDRIVE $HOMEPATH
|
|
try
|
|
" Normal behavior: use $HOMEDRIVE and $HOMEPATH, ignore $USERPROFILE
|
|
let $USERPROFILE = 'unused'
|
|
let $HOMEDRIVE = 'C:'
|
|
let $HOMEPATH = '\foobar'
|
|
let $HOME = '' " Force recomputing "homedir"
|
|
call CheckHome('C:\foobar')
|
|
|
|
" Same, but with $HOMEPATH not set
|
|
UnletEnv $HOMEPATH
|
|
let $HOME = '' " Force recomputing "homedir"
|
|
call CheckHome('C:\')
|
|
|
|
" Use $USERPROFILE if $HOMEPATH and $HOMEDRIVE are empty
|
|
UnletEnv $HOMEDRIVE $HOMEPATH
|
|
let $USERPROFILE = 'C:\foo'
|
|
let $HOME = '' " Force recomputing "homedir"
|
|
call CheckHome('C:\foo')
|
|
|
|
" If $HOME is set the others don't matter
|
|
let $HOME = 'C:\bar'
|
|
let $USERPROFILE = 'unused'
|
|
let $HOMEDRIVE = 'unused'
|
|
let $HOMEPATH = 'unused'
|
|
call CheckHome('C:\bar', 'C:\bar')
|
|
|
|
" If $HOME contains %USERPROFILE% it is expanded
|
|
let $USERPROFILE = 'C:\foo'
|
|
let $HOME = '%USERPROFILE%\bar'
|
|
let $HOMEDRIVE = 'unused'
|
|
let $HOMEPATH = 'unused'
|
|
call CheckHome('C:\foo\bar', '%USERPROFILE%\bar')
|
|
|
|
" Invalid $HOME is kept
|
|
let $USERPROFILE = 'C:\foo'
|
|
let $HOME = '%USERPROFILE'
|
|
let $HOMEDRIVE = 'unused'
|
|
let $HOMEPATH = 'unused'
|
|
call CheckHome('%USERPROFILE', '%USERPROFILE')
|
|
|
|
" %USERPROFILE% not at start of $HOME is not expanded
|
|
let $USERPROFILE = 'unused'
|
|
let $HOME = 'C:\%USERPROFILE%'
|
|
let $HOMEDRIVE = 'unused'
|
|
let $HOMEPATH = 'unused'
|
|
call CheckHome('C:\%USERPROFILE%', 'C:\%USERPROFILE%')
|
|
|
|
if has('channel')
|
|
RestoreEnv
|
|
let $HOME = save_home
|
|
let env = ''
|
|
let job = job_start('cmd /c set', {'out_cb': {ch,x->[env,execute('let env=x')]}})
|
|
sleep 1
|
|
let env = filter(split(env, "\n"), 'v:val=="HOME"')
|
|
let home = len(env) == 0 ? "" : env[0]
|
|
call assert_equal('', home)
|
|
endif
|
|
finally
|
|
RestoreEnv
|
|
delcommand SaveEnv
|
|
delcommand RestoreEnv
|
|
delcommand UnletEnv
|
|
endtry
|
|
endfunc
|