]> git.lizzy.rs Git - rust.git/blob - src/test/ui/process/process-envs.rs
Auto merge of #93718 - thomcc:used-macho, r=pnkfelix
[rust.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 }