use std::ffi::OsStr; use std::process::Stdio; #[yare::parameterized( letter = { OsStr::new("a") }, empty = { OsStr::new("") }, to_large = { OsStr::new("2147483648") }, to_small = { OsStr::new("-2147483649") }, )] fn exit_undefined_argument_invalid(arg: &OsStr) { let child = std::process::Command::new(env!("CARGO_BIN_EXE_ewc")) .arg(arg) .stderr(Stdio::piped()) .spawn() .unwrap(); let output = child.wait_with_output().unwrap(); let success = output.status.success(); let stderr = String::from_utf8(output.stderr).unwrap(); let expected = format!( "Argument '{:?}' could not be parsed as a valid integer (i32)", arg ) .replace("\"", ""); assert!(!stderr.is_empty()); assert!(stderr.starts_with(&expected)); assert!(!success); } #[test] fn exit_undefined_no_args() { let child = std::process::Command::new(env!("CARGO_BIN_EXE_ewc")) .stderr(Stdio::piped()) .spawn() .unwrap(); let output = child.wait_with_output().unwrap(); let success = output.status.success(); let stderr = String::from_utf8(output.stderr).unwrap(); let expected = "Expected 1 argument (the exit code), but 0 were given"; assert!(!stderr.is_empty()); assert!(stderr.starts_with(&expected)); assert!(!success); } #[test] fn exit_undefined_too_many_args() { let child = std::process::Command::new(env!("CARGO_BIN_EXE_ewc")) .stderr(Stdio::piped()) .args(&["1", "2"]) .spawn() .unwrap(); let output = child.wait_with_output().unwrap(); let success = output.status.success(); let stderr = String::from_utf8(output.stderr).unwrap(); let expected = "Expected 1 argument (the exit code), but 2 were given"; assert!(!stderr.is_empty()); assert!(stderr.starts_with(&expected)); assert!(!success); }