use crate::cmd;
#[test]
fn test_no_echo_mode() {
let result = cmd!("echo", "test").no_echo().run();
assert!(result.is_ok());
let result = cmd!("echo", "test").no_echo().output();
assert!(result.is_ok());
let result = cmd!("nonexistent_command").no_echo().run();
assert!(result.is_err());
}
#[test]
fn test_pipeline_no_echo_propagation() {
let pipeline_no_echo = cmd!("echo", "test")
.pipe(cmd!("tr", "[:lower:]", "[:upper:]"))
.no_echo();
let pipeline_normal = cmd!("echo", "test").pipe(cmd!("tr", "[:lower:]", "[:upper:]"));
assert!(pipeline_no_echo.suppress_echo);
assert!(!pipeline_normal.suppress_echo);
let output_no_echo = pipeline_no_echo.output().unwrap();
let output_normal = pipeline_normal.output().unwrap();
assert_eq!(output_no_echo.trim(), "TEST");
assert_eq!(output_normal.trim(), "TEST");
}
#[test]
fn test_no_echo_mode_inheritance() {
let no_echo_cmd = cmd!("echo", "hello").no_echo();
let pipeline = no_echo_cmd.pipe(cmd!("cat"));
assert!(pipeline.suppress_echo);
let normal_cmd = cmd!("echo", "hello");
let pipeline2 = normal_cmd.pipe(cmd!("cat"));
assert!(!pipeline2.suppress_echo);
}
#[test]
fn test_no_echo_mode_execution_methods() {
let result = cmd!("echo", "run_test").no_echo().run();
assert!(result.is_ok());
let output = cmd!("echo", "output_test").no_echo().output().unwrap();
assert_eq!(output.trim(), "output_test");
let output = cmd!("cat").input("input_test").no_echo().output().unwrap();
assert_eq!(output.trim(), "input_test");
}
#[test]
fn test_no_echo_mode_with_env_and_dir() {
use std::env;
let temp_dir = env::temp_dir();
let output = cmd!("printenv", "NO_ECHO_TEST_VAR")
.env("NO_ECHO_TEST_VAR", "no_echo_value")
.current_dir(&temp_dir)
.no_echo()
.output()
.unwrap();
assert_eq!(output.trim(), "no_echo_value");
}
#[test]
fn test_no_echo_mode_error_handling() {
let result = cmd!("command_that_does_not_exist_xyz").no_echo().run();
assert!(result.is_err());
let result = cmd!("sh", "-c", "exit 42").no_echo().run();
assert!(result.is_err());
let result = cmd!("echo", "test")
.current_dir("/path/that/does/not/exist/xyz")
.no_echo()
.run();
assert!(result.is_err());
}
#[test]
fn test_no_echo_mode_consistency() {
for i in 0..5 {
let output = cmd!("echo", &format!("test_{}", i))
.no_echo()
.output()
.unwrap();
assert_eq!(output.trim(), format!("test_{}", i));
}
}
#[test]
fn test_no_echo_mode_complex_pipelines() {
let output = cmd!("sh", "-c", "echo 'error_msg' >&2")
.pipe_err(cmd!("tr", "[:lower:]", "[:upper:]"))
.no_echo()
.output()
.unwrap();
assert_eq!(output.trim(), "ERROR_MSG");
let output = cmd!("sh", "-c", "echo 'out'; echo 'err' >&2")
.pipe_out_err(cmd!("sort"))
.no_echo()
.output()
.unwrap();
let lines: Vec<&str> = output.trim().lines().collect();
assert_eq!(lines.len(), 2);
assert!(lines.contains(&"err"));
assert!(lines.contains(&"out"));
}
#[test]
fn test_no_echo_mode_builder_propagation() {
let cmd = cmd!("echo", "test")
.arg("extra")
.env("TEST_VAR", "value")
.no_echo()
.arg("more");
assert!(cmd.suppress_echo);
let pipeline = cmd.pipe(cmd!("cat"));
assert!(pipeline.suppress_echo);
}