#!/bin/sh

set +x

export JEST_TIMEOUT=30000

GREEN="\033[32m"
RED="\033[31m"
RESET="\033[0m"
GRAY="\033[90m"
ORANGE="\033[38;2;255;165;0m"

OK="✔"      # U+2714
FAIL="✘"    # U+2718
SKIP="⏭"
IGNORE="∅"

PRINTOK="${GREEN}${OK} OK${RESET}"
PRINTFAIL="${RED}${FAIL} FAIL${RESET}"
PRINTSKIP="${GRAY}${SKIP} SKIP${RESET}"
PRINTIGNORE="${ORANGE}${IGNORE} IGNORE${RESET}"

TMPDIRTEST=$(mktemp -d)
SUCCESS_FILE="$TMPDIRTEST/success"
FAIL_FILE="$TMPDIRTEST/fail"
IGNORE_FILE="$TMPDIRTEST/ignore"
SKIP_FILE="$TMPDIRTEST/skip"

trap 'rm -rf "$TMPDIRTEST"' EXIT INT TERM HUP QUIT

#for dir in $(egrep -v '^[[:space:]]*$|^#' debian/nodejs/testable | sort -u); do
egrep -v '^[[:space:]]*$|^#' debian/nodejs/testable | sort -u |
while IFS= read -r dir; do
        printf "Readline ${dir}\n"
        p=${dir%% *}
        option=${dir#* }
        [ "$p" = "$option" ] && option=""
        echo "Test $p";
        (
                set -e
                cd $p
                SKIPPED=1
                if [ "$option" = skip ] ; then
                        SKIPPED=0
                elif ! jq -e '.scripts.test | select(. != "")' package.json >/dev/null; then
                        SKIPPED=0
                fi
                if [ $SKIPPED -ne 0 ] ; then
                        if pkgjs-run test; then
                                printf "${PRINTOK}: ${p}\n"
                                echo "$p" >> "$SUCCESS_FILE"
                        else
                                if [ "$option" = "ignore" ]; then
                                        printf "${PRINTIGNORE}: ${p}\n"
                                        echo "$p" >> "$IGNORE_FILE"
                                else
                                        printf "${PRINTFAIL}: ${p}\n"
                                        echo "$p" >> "$FAIL_FILE"
                                fi
                        fi
                else
                        printf "${PRINTSKIP}: ${p}\n"
                        echo "$p" >> "$SKIP_FILE"
                fi
        )
        echo done;
done

# Print summary
if [ -f "$SUCCESS_FILE" ]; then
    printf "${GREEN}Successful tests:${RESET}\n"
    printf "${GREEN}"
    sed 's/^/  /' "$SUCCESS_FILE"
    printf "${RESET}"
fi

if [ -f "$SKIP_FILE" ]; then
    printf "${GRAY}Skip tests:${RESET}\n"
    printf "${GRAY}"
    sed 's/^/  /' "$SKIP_FILE"
    printf "${RESET}"
fi

if [ -f "$IGNORE_FILE" ]; then
    printf "${ORANGE}Ignore tests:${RESET}\n"
    printf "${ORANGE}"
    sed 's/^/  /' "$IGNORE_FILE"
    printf "${RESET}"
fi


if [ -f "$FAIL_FILE" ]; then
    printf "${RED}Failed tests:${RESET}\n"
    printf "${RED}"
    sed 's/^/  /' "$FAIL_FILE"
    printf "${RESET}"
    exit 1
fi
