]> git.lizzy.rs Git - rust.git/blob - src/libstd/tests/env.rs
Auto merge of #67731 - matthewjasper:drop-in-place-reclimit, r=eddyb
[rust.git] / src / libstd / tests / env.rs
1 use std::env::*;
2 use std::ffi::{OsStr, OsString};
3
4 use rand::distributions::Alphanumeric;
5 use rand::{thread_rng, Rng};
6
7 fn make_rand_name() -> OsString {
8     let rng = thread_rng();
9     let n = format!("TEST{}", rng.sample_iter(&Alphanumeric).take(10).collect::<String>());
10     let n = OsString::from(n);
11     assert!(var_os(&n).is_none());
12     n
13 }
14
15 fn eq(a: Option<OsString>, b: Option<&str>) {
16     assert_eq!(a.as_ref().map(|s| &**s), b.map(OsStr::new).map(|s| &*s));
17 }
18
19 #[test]
20 fn test_set_var() {
21     let n = make_rand_name();
22     set_var(&n, "VALUE");
23     eq(var_os(&n), Some("VALUE"));
24 }
25
26 #[test]
27 fn test_remove_var() {
28     let n = make_rand_name();
29     set_var(&n, "VALUE");
30     remove_var(&n);
31     eq(var_os(&n), None);
32 }
33
34 #[test]
35 fn test_set_var_overwrite() {
36     let n = make_rand_name();
37     set_var(&n, "1");
38     set_var(&n, "2");
39     eq(var_os(&n), Some("2"));
40     set_var(&n, "");
41     eq(var_os(&n), Some(""));
42 }
43
44 #[test]
45 #[cfg_attr(target_os = "emscripten", ignore)]
46 fn test_var_big() {
47     let mut s = "".to_string();
48     let mut i = 0;
49     while i < 100 {
50         s.push_str("aaaaaaaaaa");
51         i += 1;
52     }
53     let n = make_rand_name();
54     set_var(&n, &s);
55     eq(var_os(&n), Some(&s));
56 }
57
58 #[test]
59 #[cfg_attr(target_os = "emscripten", ignore)]
60 fn test_env_set_get_huge() {
61     let n = make_rand_name();
62     let s = "x".repeat(10000);
63     set_var(&n, &s);
64     eq(var_os(&n), Some(&s));
65     remove_var(&n);
66     eq(var_os(&n), None);
67 }
68
69 #[test]
70 fn test_env_set_var() {
71     let n = make_rand_name();
72
73     let mut e = vars_os();
74     set_var(&n, "VALUE");
75     assert!(!e.any(|(k, v)| { &*k == &*n && &*v == "VALUE" }));
76
77     assert!(vars_os().any(|(k, v)| { &*k == &*n && &*v == "VALUE" }));
78 }