Skip to content

Commit 5c49ce1

Browse files
committed
feat: restore environment variable
1 parent d216cbf commit 5c49ce1

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

src/testkit.rs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,21 @@ use std::ffi::{OsStr, OsString};
33

44
pub struct EnvironmentTestGuard {
55
key: OsString,
6+
value: Option<OsString>,
67
}
78

89
pub fn set_env<V: AsRef<OsStr>>(key: OsString, value: V) -> EnvironmentTestGuard {
10+
let prev_value = env::var_os(&key);
911
env::set_var(&key, value);
10-
EnvironmentTestGuard { key }
12+
EnvironmentTestGuard { key, value: prev_value }
1113
}
1214

1315
impl Drop for EnvironmentTestGuard {
1416
fn drop(&mut self) {
15-
env::remove_var(&self.key)
17+
match &self.value {
18+
Some(value) => env::set_var(&self.key, value),
19+
None => env::remove_var(&self.key)
20+
}
1621
}
1722
}
1823

@@ -23,11 +28,15 @@ mod test {
2328
use fake::Fake;
2429
use serial_test::serial;
2530

31+
fn gen_key() -> OsString {
32+
OsString::from(Word().fake::<String>())
33+
}
34+
fn gen_value() -> OsString {
35+
OsString::from(Sentence(1..10).fake::<String>())
36+
}
37+
2638
fn gen_pair() -> (OsString, OsString) {
27-
(
28-
OsString::from(Word().fake::<String>()),
29-
OsString::from(Sentence(1..10).fake::<String>()),
30-
)
39+
(gen_key(), gen_value())
3140
}
3241

3342
#[test]
@@ -47,4 +56,15 @@ mod test {
4756
}
4857
assert_eq!(env::var_os(key), None)
4958
}
59+
60+
#[test]
61+
#[serial]
62+
fn set_env_restore() {
63+
let (key, value) = gen_pair();
64+
env::set_var(&key, &value);
65+
{
66+
let _e = set_env(key.clone(), gen_value());
67+
}
68+
assert_eq!(env::var_os(key).unwrap(), value)
69+
}
5070
}

0 commit comments

Comments
 (0)