#! /bin/sh

usage() {
    echo "Usage: $(basename "$0") <test-file>"
}

[ "$1" = "-h" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ] && {
    usage
    exit 0
}

[ -z "$1" ] && {
    usage >&2
    exit 2
}

if [ -n "$TICK_TEST_DEBUG" ]; then
    csi_args=-sx
    set -x
else
    csi_args=-s
fi

test_file=$1

[ -z "$TICK_TEST_WORK_DIR" ] && TICK_TEST_WORK_DIR=$(mktemp -d)
export TICK_TEST_WORK_DIR

cleanup() {
    if [ -n "$TICK_TEST_KEEP_WORK_DIR" ]; then
        echo "Not removing $TICK_TEST_WORK_DIR"
    else
        echo "Removing $TICK_TEST_WORK_DIR"
        rm -rf "$TICK_TEST_WORK_DIR"
    fi
}

trap cleanup EXIT

TICK_SERVER_GIT_REPO_DIR=$TICK_TEST_WORK_DIR/server-git-repo
export TICK_SERVER_GIT_REPO_DIR

TICK_SERVER_URL=file://$TICK_SERVER_GIT_REPO_DIR
export TICK_SERVER_URL

TICK_CONF_DIR=$TICK_TEST_WORK_DIR/conf
export TICK_CONF_DIR

TICK_CACHE_DIR=$TICK_TEST_WORK_DIR
export TICK_CACHE_DIR

csi $csi_args run-tests.scm "$test_file"
ret=$?

shell_banner() {
    error_msg=$1
    set +x
    echo "======================================================="
    if [ -n "$error_msg" ]; then
        echo "$error_msg"
    fi
    echo " Dropping into a shell with the environment set up for "
    echo " tick tests.  Exit the shell when finished.            "
    echo "======================================================="
}

if [ "$ret" -eq 0 ]; then
    if [ -n "$TICK_TEST_SPAWN_SHELL" ]; then
        shell=$TICK_TEST_SPAWN_SHELL
        unset TICK_TEST_SPAWN_SHELL
        shell_banner
        "$shell"
        exit
    fi
else
    if [ -n "$TICK_TEST_SHELL_ON_ERROR" ]; then
        shell=$TICK_TEST_SHELL_ON_ERROR
        unset TICK_TEST_SHELL_ON_ERROR
        shell_banner " **** Error running $test_file **** "
        "$shell"
    fi
    exit "$ret"
fi
