| " 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 |
| |
| " vim: shiftwidth=2 sts=2 expandtab |