Skip to content

Commit d216cbf

Browse files
committed
feat: clean environment variable
1 parent 289b2c7 commit d216cbf

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ edition = "2018"
88

99
[dev-dependencies]
1010
fake = "2.2.3"
11+
serial_test = "0.4.0"

src/testkit.rs

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,50 @@
11
use std::env;
22
use std::ffi::{OsStr, OsString};
33

4-
pub struct EnvironmentTestGuard {}
4+
pub struct EnvironmentTestGuard {
5+
key: OsString,
6+
}
57

6-
pub fn set_env<V: AsRef<OsStr>>(key: OsString, value: V) {
7-
env::set_var(key, value)
8+
pub fn set_env<V: AsRef<OsStr>>(key: OsString, value: V) -> EnvironmentTestGuard {
9+
env::set_var(&key, value);
10+
EnvironmentTestGuard { key }
11+
}
12+
13+
impl Drop for EnvironmentTestGuard {
14+
fn drop(&mut self) {
15+
env::remove_var(&self.key)
16+
}
817
}
918

1019
#[cfg(test)]
1120
mod test {
1221
use super::*;
1322
use fake::faker::lorem::en::*;
1423
use fake::Fake;
24+
use serial_test::serial;
25+
26+
fn gen_pair() -> (OsString, OsString) {
27+
(
28+
OsString::from(Word().fake::<String>()),
29+
OsString::from(Sentence(1..10).fake::<String>()),
30+
)
31+
}
1532

1633
#[test]
34+
#[serial]
1735
fn set_env_ok() {
18-
let key = OsString::from(Word().fake::<String>());
19-
let value = OsString::from(Sentence(1..10).fake::<String>());
20-
21-
set_env(key.clone(), &value);
36+
let (key, value) = gen_pair();
37+
let _e = set_env(key.clone(), &value);
2238
assert_eq!(env::var_os(key).unwrap(), value)
2339
}
40+
41+
#[test]
42+
#[serial]
43+
fn set_env_clean_up() {
44+
let (key, value) = gen_pair();
45+
{
46+
let _e = set_env(key.clone(), &value);
47+
}
48+
assert_eq!(env::var_os(key), None)
49+
}
2450
}

0 commit comments

Comments
 (0)