#!/bin/bash

set -u

GREEN="\e[0;32m"
YELLOW="\e[0;33m"
RED="\e[0;31m"
END="\e[0m"

usage () {
	cat <<EOF
Usage:
	run-test.sh [-h|--help] [-a <arg>|--arg <arg>] <command> [<args>]

Run various commands to test bst.

Commands:

	test	Run the test suite. If no arguments are given, the full
                suite is run, otherwise the given arguments will be run
	run	Run the test suite.  (Does not clean)
	clean	Clean temporary test files

Options:
	--help  	Display this help message and exit
	--arg   	Specify an argument for bst, such as --colors
	--cov   	Specify a coverage rcfile
	--sources	Specify a location for the source cache
EOF
}

BST_COVERAGE=
BST_FLAGS=
BST_SOURCE_CACHE=
export BST_COVERAGE
export BST_FLAGS
export BST_SOURCE_CACHE

main () {
	while : ;
	do
		case "${1:-}" in
			"test")
				shift
				clean "$@"
				configure
				run "$@"
				break ;;
			"run")
				shift
				configure
				run "$@"
				break ;;
			"clean")
				shift
				clean "$@"
				break ;;
			--sources)
				export BST_SOURCE_CACHE=$(realpath "${2}")
				shift 2 ;;
			-c|--cov)
				export BST_COVERAGE=$(realpath "${2}")
				shift 2 ;;
			-a|--arg)
				export BST_FLAGS="${BST_FLAGS:-} $2"
				shift 2 ;;
			-h|--help)
				usage
				break ;;
			*)
				echo "Error: Unrecognized argument '${1:-}'" 1>&2
				usage
				break ;;
		esac
	done
}


# configure
#
# Creates the buildstream.conf configuration
configure () {
    	# Treat source cache specially, we want to reuse it when
	# running automated CI
	if [ -z "${BST_SOURCE_CACHE}" ]; then
	    BST_SOURCE_CACHE="$(pwd)/tmp/sources"
	fi

        # Create buildstream.conf
        cat > "$(pwd)/buildstream.conf" <<EOF
sourcedir: "${BST_SOURCE_CACHE}"
builddir: "$(pwd)/tmp/build"
artifactdir: "$(pwd)/tmp/artifacts"
logdir: "$(pwd)/tmp/logs"
EOF
        CONFIG_LOCATION="$(pwd)/buildstream.conf"

        export CONFIG_LOCATION
}


# run
#
# Run all tests in the current directory.
run () {
	local succeeded=0
	local failed=0
	local state
	local tests
	local dir

	if [ $# -ge 1 ];
	then
		tests=$@
	else
		tests="*"
	fi

	for dir in $tests;
	do
		if [ -d "$dir" ] && [ "$dir" != "tmp" ]
		then
			run-test "$dir"
			state=$?
			if [ $state == 0 ]
			then
				((succeeded++))
			else
				((failed++))
			fi
		fi
	done

	if [ ! -z "${BST_COVERAGE}" ]; then
	    if [ -f .coverage ]; then
		rm -f .coverage
	    fi

	    for file in $(find . -name ".coverage.*"); do
		coverage combine -a ${file}
	    done
	    coverage report -m
	fi

	echo
	printf "%4s test%.*s ${GREEN}succeeded${END}.\n" $succeeded $((succeeded != 1)) "s"
	printf "%4s test%.*s ${RED}failed${END}.\n" $failed $((failed != 1)) "s"

	if [ $failed != 0 ]
	then
	   exit 1
	fi
}

# clean
#
# Clean all tests in the current directory.
clean () {
	local dir

	rm -f "buildstream.conf"
	rm -rf "tmp"

	for dir in *;
	do
		if [ -d "$dir" ]
		then
			(cd "$dir" || exit 1
			 rm -rf "results/"*
			 rm -rf ".bst/")
		fi
	done
}

# run-test
#
# Run the test in the given directory
#
# Args:
#    test ($1) - The test to run
#
run-test () {
	local test="$1"
	mkdir -p "$(pwd)/tmp/tests/"
	cp -r "$test" "$(pwd)/tmp/tests/"

	echo "============================================================"
	echo "Running tests for test case '$test'"
	echo "============================================================"

	(cd "$(pwd)/tmp/tests/$test" || exit 1
	 bash "run-$(basename "$test").sh")

	if [ ! "$?" -eq 0 ]
	then
		echo -e "Tests for '$test' ${RED}failed${END}.\n" 2>&1
		return 1
	fi
}

main "$@"
