#[cfg(test)] mod tests{ use assert_cmd::Command; use predicates::prelude::*; use std::fs; type TestResult = Result<(), Box>; #[test] fn dies_no_args() -> TestResult { let mut cmd = Command::cargo_bin("xiuxiu-echor")?; cmd.assert().failure().stderr(predicate::str::contains("USAGE")); Ok(()) } fn run(args: &[&str], expected_file: &str) -> TestResult { let expected = fs::read_to_string(expected_file)?; Command::cargo_bin("xiuxiu-echor")? .args(args) .assert() .success() .stdout(expected); Ok(()) } #[test] fn runs(){ let mut cmd = Command::cargo_bin("xiuxiu-echor").unwrap(); cmd.arg("hello").assert().success(); } #[test] fn hello1() -> TestResult { run(&["Hello there"], "tests/expected/hello1.txt") } #[test] fn hello2() -> TestResult{ run(&["Hello", "there"], "tests/expected/hello2.txt") } #[test] fn hello1_no_newline() -> TestResult{ run(&["Hello there", "-n"], "tests/expected/hello1.n.txt") } #[test] fn hello2_no_newline() -> TestResult{ run(&["-n", "Hello", "there"], "tests/expected/hello2.n.txt") } }