Fix(test): Compare results to GNU echo

- Added new TestResult type
- Automated 5 testing cases with bash script
This commit is contained in:
minhtrannhat 2023-07-21 20:17:11 -04:00
parent 9f673b28b4
commit 0736d6e81a
Signed by: minhtrannhat
GPG Key ID: E13CFA85C53F8062
6 changed files with 44 additions and 6 deletions

9
mk-outs.sh Executable file
View File

@ -0,0 +1,9 @@
#!/usr/bin/env bash
OUTDIR="tests/expected"
[[ ! -d "$OUTDIR" ]] && mkdir -p "$OUTDIR"
echo "Hello there" > $OUTDIR/hello1.txt
echo "Hello" "there" > $OUTDIR/hello2.txt
echo -n "Hello there" > $OUTDIR/hello1.n.txt
echo -n "Hello" "there" > $OUTDIR/hello2.n.txt

View File

@ -1,18 +1,43 @@
use assert_cmd::Command;
use predicates::prelude::*;
use std::fs;
type TestResult = Result<(), Box<dyn std::error::Error>>;
#[test]
fn dies_no_args() {
let mut cmd = Command::cargo_bin("echor").expect("cargo binary error");
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 runs() {
let mut cmd = Command::cargo_bin("echor").expect("cargo binary error");
cmd.arg("hello").assert().success();
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")
}

View File

@ -0,0 +1 @@
Hello there

View File

@ -0,0 +1 @@
Hello there

View File

@ -0,0 +1 @@
Hello there

View File

@ -0,0 +1 @@
Hello there