]> git.proxmox.com Git - rustc.git/blob - src/test/ui/process/process-envs.rs
New upstream version 1.50.0+dfsg1
[rustc.git] / src / test / ui / process / process-envs.rs
1 // run-pass
2 // ignore-emscripten no processes
3 // ignore-sgx no processes
4 // ignore-vxworks no 'env'
5
6 use std::process::Command;
7 use std::env;
8 use std::collections::HashMap;
9
10 #[cfg(all(unix, not(target_os="android")))]
11 pub fn env_cmd() -> Command {
12 Command::new("env")
13 }
14 #[cfg(target_os="android")]
15 pub fn env_cmd() -> Command {
16 let mut cmd = Command::new("/system/bin/sh");
17 cmd.arg("-c").arg("set");
18 cmd
19 }
20
21 #[cfg(windows)]
22 pub fn env_cmd() -> Command {
23 let mut cmd = Command::new("cmd");
24 cmd.arg("/c").arg("set");
25 cmd
26 }
27
28 fn main() {
29 // save original environment
30 let old_env = env::var_os("RUN_TEST_NEW_ENV");
31
32 env::set_var("RUN_TEST_NEW_ENV", "123");
33
34 // create filtered environment vector
35 let filtered_env : HashMap<String, String> =
36 env::vars().filter(|&(ref k, _)| k == "PATH").collect();
37
38 let mut cmd = env_cmd();
39 cmd.env_clear();
40 cmd.envs(&filtered_env);
41
42 // restore original environment
43 match old_env {
44 None => env::remove_var("RUN_TEST_NEW_ENV"),
45 Some(val) => env::set_var("RUN_TEST_NEW_ENV", &val)
46 }
47
48 let result = cmd.output().unwrap();
49 let output = String::from_utf8_lossy(&result.stdout);
50
51 assert!(!output.contains("RUN_TEST_NEW_ENV"),
52 "found RUN_TEST_NEW_ENV inside of:\n\n{}", output);
53 }