Skip to content

Commit 94fe501

Browse files
cpetersomarijnh
authored andcommitted
std: Add some env() and getenv() tests
1 parent aec76d2 commit 94fe501

File tree

1 file changed

+46
-9
lines changed

1 file changed

+46
-9
lines changed

src/libstd/generic_os.rs

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -99,21 +99,31 @@ fn setenv(n: str, v: str) {
9999
#[cfg(test)]
100100
mod tests {
101101

102+
fn make_rand_name() -> str {
103+
import rand;
104+
let rng: rand::rng = rand::mk_rng();
105+
let n = "TEST" + rng.gen_str(10u);
106+
assert option::is_none(getenv(n));
107+
n
108+
}
109+
102110
#[test]
103111
#[ignore(reason = "fails periodically on mac")]
104112
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");
109116
}
110117

111118
#[test]
112119
#[ignore(reason = "fails periodically on mac")]
113120
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("");
117127
}
118128

119129
// Windows GetEnvironmentVariable requires some extra work to make sure
@@ -124,9 +134,10 @@ mod tests {
124134
let s = "";
125135
let i = 0;
126136
while i < 100 { s += "aaaaaaaaaa"; i += 1; }
127-
setenv("test_getenv_big", s);
137+
let n = make_rand_name();
138+
setenv(n, s);
128139
log(debug, s);
129-
assert (getenv("test_getenv_big") == option::some(s));
140+
assert getenv(n) == option::some(s);
130141
}
131142

132143
#[test]
@@ -143,6 +154,32 @@ mod tests {
143154
assert path[1] == ':' as u8;
144155
}
145156
}
157+
158+
#[test]
159+
fn test_env_getenv() {
160+
let e = env();
161+
assert vec::len(e) > 0u;
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+
}
146183
}
147184

148185
// Local Variables:

0 commit comments

Comments
 (0)