#!/usr/bin/env bash

cd "${0%/*}" || exit 1

# shellcheck disable=SC1091
. ./mo
PASS=0
FAIL=0

for TEST in tests/*.expected; do
    export BASE="${TEST%.expected}"
    export MO_FALSE_IS_EMPTY=

    echo -n "$BASE ... "

    (
        if [[ -f "${BASE}.sh" ]]; then
            # Run a shell script if one exists
            "${BASE}.sh"
        else
            # Fall back to using .env and .template
            # shellcheck disable=SC1090
            . "${BASE}.env"
            echo "Do not read this input" | mo "${BASE}.template"
        fi
    ) | diff -U5 - "${TEST}" > "${BASE}.diff"

    statusCode=$?

    if [[ $statusCode -ne 0 ]]; then
        echo "FAIL (status code $statusCode)"
        FAIL=$(( FAIL + 1 ))
    else
        echo "ok"
        PASS=$(( PASS + 1 ))
        rm "${BASE}.diff"
    fi
done

echo ""
echo "Pass:  $PASS"
echo "Fail: $FAIL"
if [[ $FAIL -gt 0 ]]; then
    exit 1
fi