RPM ?= rpm
MY ?= $(PWD)

all_tests::

.ONESHELL:
ifdef DEBUG
.SILENT:
.SHELLFLAGS := -xec
else
.SHELLFLAGS := -ec
endif

include $(MY)/HELPER

all_tests :=

#include $(MY)/*.mk
# Order matters (because some test targets are not defined if the
# prerequisite package variables are not defined).
include $(MY)/dummy.mk
include $(MY)/virtDummy.mk
include $(MY)/upgradable.mk
include $(MY)/constraints.mk
include $(MY)/prov*.mk

.PHONY: all_tests $(all_tests)

all_tests::
	passed=()
	xfailed=()
	failed=()
	for t in $(or $(TESTS),$(all_tests)); do
	echo
	echo "TESTING $$t"
	(
		. tmpdir.sh
		rpmdb --dbpath "$$TMPDIR" --initdb
		$(MAKE) -f $(MY)/Makefile "$$t" RPM="$(or $(RPM),rpm) --dbpath '$$TMPDIR' --justdb"
	) && {
		passed=("$${passed[@]}" "$$t")
		echo "PASSED $$t"
	} || {
		xfail_reason_t="XFAIL_REASON_$$t"
		xfail_reason="$${!xfail_reason_t}"
		if [ -n "$$xfail_reason" ]; then
			xfailed=("$${xfailed[@]}" "$$t ($$xfail_reason)")
			echo "XFAILED $$t ($$xfail_reason)"
		else
			failed=("$${failed[@]}" "$$t")
			echo "FAILED $$t"
		fi
	}
	done
	echo
	echo 'Passed tests:'
	(IFS=$$'\n'; echo "$${passed[*]}" )
	echo
	echo 'XFailed tests:'
	(IFS=$$'\n'; echo "$${xfailed[*]}" )
	echo
	echo 'Failed tests:'
	(IFS=$$'\n'; echo "$${failed[*]}" )
	echo
	echo -n 'Passed tests: '
	echo "$${#passed[@]}"
	echo -n 'XFailed tests: '
	echo "$${#xfailed[@]}"
	echo -n 'Failed tests: '
	echo "$${#failed[@]}"
	[ -z "$${failed[*]}" ] # make sure that zero tests failed
