@@ -99,21 +99,31 @@ fn setenv(n: str, v: str) {
99
99
#[ cfg( test) ]
100
100
mod tests {
101
101
102
+ fn make_rand_name ( ) -> str {
103
+ import rand;
104
+ let rng: rand:: rng = rand:: mk_rng ( ) ;
105
+ let n = "TEST" + rng. gen_str ( 10 u) ;
106
+ assert option:: is_none ( getenv ( n) ) ;
107
+ n
108
+ }
109
+
102
110
#[ test]
103
111
#[ ignore( reason = "fails periodically on mac" ) ]
104
112
fn test_setenv ( ) {
105
- // NB: Each test of setenv needs to use different variable names or
106
- // the tests will not be threadsafe
107
- setenv ( "NAME1" , "VALUE" ) ;
108
- assert ( getenv ( "NAME1" ) == option:: some ( "VALUE" ) ) ;
113
+ let n = make_rand_name ( ) ;
114
+ setenv ( n, "VALUE" ) ;
115
+ assert getenv( n) == option:: some ( "VALUE" ) ;
109
116
}
110
117
111
118
#[ test]
112
119
#[ ignore( reason = "fails periodically on mac" ) ]
113
120
fn test_setenv_overwrite ( ) {
114
- setenv ( "NAME2" , "1" ) ;
115
- setenv ( "NAME2" , "2" ) ;
116
- assert ( getenv ( "NAME2" ) == option:: some ( "2" ) ) ;
121
+ let n = make_rand_name ( ) ;
122
+ setenv ( n, "1" ) ;
123
+ setenv ( n, "2" ) ;
124
+ assert getenv( n) == option:: some ( "2" ) ;
125
+ setenv ( n, "" ) ;
126
+ assert getenv( n) == option:: some ( "" ) ;
117
127
}
118
128
119
129
// Windows GetEnvironmentVariable requires some extra work to make sure
@@ -124,9 +134,10 @@ mod tests {
124
134
let s = "" ;
125
135
let i = 0 ;
126
136
while i < 100 { s += "aaaaaaaaaa" ; i += 1 ; }
127
- setenv ( "test_getenv_big" , s) ;
137
+ let n = make_rand_name ( ) ;
138
+ setenv ( n, s) ;
128
139
log ( debug, s) ;
129
- assert ( getenv ( "test_getenv_big" ) == option:: some ( s) ) ;
140
+ assert getenv( n ) == option:: some ( s) ;
130
141
}
131
142
132
143
#[ test]
@@ -143,6 +154,32 @@ mod tests {
143
154
assert path[ 1 ] == ':' as u8 ;
144
155
}
145
156
}
157
+
158
+ #[ test]
159
+ fn test_env_getenv ( ) {
160
+ let e = env ( ) ;
161
+ assert vec:: len ( e) > 0 u;
162
+ for ( n, v) in e {
163
+ log ( debug, n) ;
164
+ let v2 = getenv ( n) ;
165
+ // MingW seems to set some funky environment variables like
166
+ // "=C:=C:\MinGW\msys\1.0\bin" and "!::=::\" that are returned
167
+ // from env() but not visible from getenv().
168
+ assert option:: is_none ( v2) || v2 == option:: some ( v) ;
169
+ }
170
+ }
171
+
172
+ #[ test]
173
+ fn test_env_setenv ( ) {
174
+ let n = make_rand_name ( ) ;
175
+
176
+ let e = env ( ) ;
177
+ setenv ( n, "VALUE" ) ;
178
+ assert !vec:: contains ( e, ( n, "VALUE" ) ) ;
179
+
180
+ e = env ( ) ;
181
+ assert vec:: contains ( e, ( n, "VALUE" ) ) ;
182
+ }
146
183
}
147
184
148
185
// Local Variables:
0 commit comments