]> git.lizzy.rs Git - rust.git/blob - src/libstd/tests/env.rs
Omit 'missing IndexMut impl' suggestion when IndexMut is implemented.
[rust.git] / src / libstd / tests / env.rs
1 // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 extern crate rand;
12
13 use std::env::*;
14 use std::ffi::{OsString, OsStr};
15
16 use rand::Rng;
17
18 fn make_rand_name() -> OsString {
19     let mut rng = rand::thread_rng();
20     let n = format!("TEST{}", rng.gen_ascii_chars().take(10)
21                                  .collect::<String>());
22     let n = OsString::from(n);
23     assert!(var_os(&n).is_none());
24     n
25 }
26
27 fn eq(a: Option<OsString>, b: Option<&str>) {
28     assert_eq!(a.as_ref().map(|s| &**s), b.map(OsStr::new).map(|s| &*s));
29 }
30
31 #[test]
32 fn test_set_var() {
33     let n = make_rand_name();
34     set_var(&n, "VALUE");
35     eq(var_os(&n), Some("VALUE"));
36 }
37
38 #[test]
39 fn test_remove_var() {
40     let n = make_rand_name();
41     set_var(&n, "VALUE");
42     remove_var(&n);
43     eq(var_os(&n), None);
44 }
45
46 #[test]
47 fn test_set_var_overwrite() {
48     let n = make_rand_name();
49     set_var(&n, "1");
50     set_var(&n, "2");
51     eq(var_os(&n), Some("2"));
52     set_var(&n, "");
53     eq(var_os(&n), Some(""));
54 }
55
56 #[test]
57 #[cfg_attr(target_os = "emscripten", ignore)]
58 fn test_var_big() {
59     let mut s = "".to_string();
60     let mut i = 0;
61     while i < 100 {
62         s.push_str("aaaaaaaaaa");
63         i += 1;
64     }
65     let n = make_rand_name();
66     set_var(&n, &s);
67     eq(var_os(&n), Some(&s));
68 }
69
70 #[test]
71 #[cfg_attr(target_os = "emscripten", ignore)]
72 fn test_env_set_get_huge() {
73     let n = make_rand_name();
74     let s = "x".repeat(10000);
75     set_var(&n, &s);
76     eq(var_os(&n), Some(&s));
77     remove_var(&n);
78     eq(var_os(&n), None);
79 }
80
81 #[test]
82 fn test_env_set_var() {
83     let n = make_rand_name();
84
85     let mut e = vars_os();
86     set_var(&n, "VALUE");
87     assert!(!e.any(|(k, v)| {
88         &*k == &*n && &*v == "VALUE"
89     }));
90
91     assert!(vars_os().any(|(k, v)| {
92         &*k == &*n && &*v == "VALUE"
93     }));
94 }