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("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("echor")? .args(args) .assert() .success() .stdout(expected); Ok(()) } #[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") }