//@ run-pass

//@ only-unix (this is a unix-specific test)
//@ needs-subprocess
//@ ignore-fuchsia no execvp syscall provided
//@ ignore-tvos execvp is prohibited
//@ ignore-watchos execvp is prohibited

use std::env;
use std::os::unix::process::CommandExt;
use std::process::Command;

fn main() {
    let mut args = env::args();
    let me = args.next().unwrap();

    if let Some(arg) = args.next() {
        match &arg[..] {
            "test1" => println!("passed"),

            "exec-test1" => {
                let err = Command::new(&me).arg("test1").exec();
                panic!("failed to spawn: {}", err);
            }

            "exec-test2" => {
                let _ = Command::new("/path/to/nowhere").exec();
                println!("passed");
            }

            "exec-test3" => {
                let _ = Command::new(&me).arg("bad\0").exec();
                println!("passed");
            }

            "exec-test4" => {
                let _ = Command::new(&me).current_dir("/path/to/nowhere").exec();
                println!("passed");
            }

            "exec-test5" => {
                env::set_var("VARIABLE", "ABC");
                let _ =  Command::new("definitely-not-a-real-binary").env("VARIABLE", "XYZ").exec();
                assert_eq!(env::var("VARIABLE").unwrap(), "ABC");
                println!("passed");
            }

            "exec-test6" => {
                let err = Command::new("echo").arg("passed").env_clear().exec();
                panic!("failed to spawn: {}", err);
            }

            "exec-test7" => {
                let err = Command::new("echo").arg("passed").env_remove("PATH").exec();
                panic!("failed to spawn: {}", err);
            }

            _ => panic!("unknown argument: {}", arg),
        }
        return
    }

    let output = Command::new(&me).arg("exec-test1").output().unwrap();
    assert!(output.status.success());
    assert!(output.stderr.is_empty());
    assert_eq!(output.stdout, b"passed\n");

    let output = Command::new(&me).arg("exec-test2").output().unwrap();
    assert!(output.status.success());
    assert!(output.stderr.is_empty());
    assert_eq!(output.stdout, b"passed\n");

    let output = Command::new(&me).arg("exec-test3").output().unwrap();
    assert!(output.status.success());
    assert!(output.stderr.is_empty());
    assert_eq!(output.stdout, b"passed\n");

    let output = Command::new(&me).arg("exec-test4").output().unwrap();
    assert!(output.status.success());
    assert!(output.stderr.is_empty());
    assert_eq!(output.stdout, b"passed\n");

    let output = Command::new(&me).arg("exec-test5").output().unwrap();
    assert!(output.status.success());
    assert!(output.stderr.is_empty());
    assert_eq!(output.stdout, b"passed\n");

    if cfg!(target_os = "linux") {
        let output = Command::new(&me).arg("exec-test6").output().unwrap();
        println!("{:?}", output);
        assert!(output.status.success());
        assert!(output.stderr.is_empty());
        assert_eq!(output.stdout, b"passed\n");

        let output = Command::new(&me).arg("exec-test7").output().unwrap();
        println!("{:?}", output);
        assert!(output.status.success());
        assert!(output.stderr.is_empty());
        assert_eq!(output.stdout, b"passed\n");
    }
}
