#!/usr/bin/env bash set -uo pipefail declare -i FAILED=0 declare -i SUCCEDED=0 declare -i RAN=0 NAME="" failed_report() { echo "++++++++++++++++++++++++++++++++++++++++++++++++++++" echo $NAME echo "++++++++++++++++++++++++++++++++++++++++++++++++++++" echo "++++ Failed test:" cat /tmp/input.minishell echo "++++ Got output:" cat /tmp/got.minishell echo "++++ But expected:" cat /tmp/expected.minishell echo "++++ Diff:" echo "(red is got, green is expected)" diff --color=always /tmp/got.minishell /tmp/expected.minishell echo "++++ Run this to debug:" echo "echo '$(cat /tmp/input.minishell)' | ./minishell" } failed() { failed_report >> report.txt echo -n "F" FAILED+=1 } succeded() { echo -n "." SUCCEDED+=1 } assert() { diff -q /tmp/got.minishell /tmp/expected.minishell > /dev/null && succeded || failed } when_run() { cat > /tmp/input.minishell ./minishell &> /tmp/got.minishell < /tmp/input.minishell RAN+=1 NAME=$1 } expecting() { cat > /tmp/expected.minishell assert } setup() { rm -f report.txt } finalize() { echo echo "$RAN tests ran. $SUCCEDED succeded, $FAILED failed." if [ $SUCCEDED -eq $RAN ]; then echo "All integration tests passed!" else echo "cat report.txt" echo "to see details of failed tests" fi } setup when_run < out EOF expecting <