blob: 082f217e1193d16b7af1f5fefeff8b1ec9b27dbd [file] [log] [blame]
Bram Moolenaar48340b62017-08-29 22:08:53 +02001" Test for $HOME on Windows.
2
3if !has('win32')
4 finish
5endif
6
7let s:env = {}
8
9func s:restore_env()
10 for i in keys(s:env)
11 exe 'let ' . i . '=s:env["' . i . '"]'
12 endfor
13endfunc
14
15func s:save_env(...)
16 for i in a:000
17 exe 'let s:env["' . i . '"]=' . i
18 endfor
19endfunc
20
21func s:unlet_env(...)
22 for i in a:000
23 exe 'let ' . i . '=""'
24 endfor
25endfunc
26
27func CheckHomeIsMissingFromSubprocessEnvironment()
28 silent! let out = system('set')
29 let env = filter(split(out, "\n"), 'v:val=~"^HOME="')
30 call assert_equal(0, len(env))
31endfunc
32
33func CheckHomeIsInSubprocessEnvironment(exp)
34 silent! let out = system('set')
35 let env = filter(split(out, "\n"), 'v:val=~"^HOME="')
36 let home = len(env) == 0 ? "" : substitute(env[0], '[^=]\+=', '', '')
37 call assert_equal(a:exp, home)
38endfunc
39
40func CheckHome(exp, ...)
41 "call assert_equal(a:exp, $HOME)
42 "call assert_equal(a:exp, expand('~', ':p'))
43 if !a:0
44 call CheckHomeIsMissingFromSubprocessEnvironment()
45 else
46 call CheckHomeIsInSubprocessEnvironment(a:exp)
47 endif
48endfunc
49
50func TestWindowsHome()
51 command! -nargs=* SaveEnv call <SID>save_env(<f-args>)
52 command! -nargs=* RestoreEnv call <SID>restore_env()
53 command! -nargs=* UnletEnv call <SID>unlet_env(<f-args>)
54
55 SaveEnv $HOME $USERPROFILE $HOMEDRIVE $HOMEPATH
56 try
57 RestoreEnv
58 UnletEnv $HOME $USERPROFILE $HOMEPATH
59 let $HOMEDRIVE = 'C:'
60 call CheckHome('C:\')
61
62 RestoreEnv
63 UnletEnv $HOME $USERPROFILE
64 let $HOMEDRIVE = 'C:'
65 let $HOMEPATH = '\foobar'
66 call CheckHome('C:\foobar')
67
68 RestoreEnv
69 UnletEnv $HOME $HOMEDRIVE $HOMEPATH
70 let $USERPROFILE = 'C:\foo'
71 call CheckHome('C:\foo')
72
73 RestoreEnv
74 UnletEnv $HOME
75 let $USERPROFILE = 'C:\foo'
76 let $HOMEDRIVE = 'C:'
77 let $HOMEPATH = '\baz'
78 call CheckHome('C:\foo')
79
80 RestoreEnv
81 let $HOME = 'C:\bar'
82 let $USERPROFILE = 'C:\foo'
83 let $HOMEDRIVE = 'C:'
84 let $HOMEPATH = '\baz'
85 call CheckHome('C:\bar', 1)
86
87 RestoreEnv
88 let $HOME = '%USERPROFILE%\bar'
89 let $USERPROFILE = 'C:\foo'
90 let $HOMEDRIVE = 'C:'
91 let $HOMEPATH = '\baz'
92 call CheckHome('%USERPROFILE%\bar', 1)
93
94 RestoreEnv
95 let $HOME = '%USERPROFILE'
96 let $USERPROFILE = 'C:\foo'
97 let $HOMEDRIVE = 'C:'
98 let $HOMEPATH = '\baz'
99 call CheckHome('%USERPROFILE', 1)
100
101 RestoreEnv
102 let $HOME = 'C:\%USERPROFILE%'
103 let $USERPROFILE = 'C:\foo'
104 let $HOMEDRIVE = 'C:'
105 let $HOMEPATH = '\baz'
106 call CheckHome('C:\%USERPROFILE%', 1)
107
108 if has('channel')
109 RestoreEnv
110 UnletEnv $HOME
111 let env = ''
112 let job = job_start('cmd /c set', {'out_cb': {ch,x->[env,execute('let env=x')]}})
113 sleep 1
114 let env = filter(split(env, "\n"), 'v:val=="HOME"')
115 let home = len(env) == 0 ? "" : env[0]
116 call assert_equal('', home)
117 endif
118 finally
119 RestoreEnv
120 delcommand SaveEnv
121 delcommand RestoreEnv
122 delcommand UnletEnv
123 endtry
124endfunc