echor/tests/cli.rs
minhtrannhat 0736d6e81a
Fix(test): Compare results to GNU echo
- Added new TestResult type
- Automated 5 testing cases with bash script
2023-07-21 20:17:11 -04:00

44 lines
982 B
Rust

use assert_cmd::Command;
use predicates::prelude::*;
use std::fs;
type TestResult = Result<(), Box<dyn std::error::Error>>;
#[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")
}