#!/usr/bin/env sh
#
#
# SPDX-License-Identifier: GPL-2.0-only

#set -x # uncomment for debug

JUNIT=0
INVERT=0

usage () {
	printf "Usage: %s <sub-command> [Options]\n" "$0"
	printf " Sub-commands:\n"
	printf "    lint-stable        : Run standard lint tests - should pass\n"
	printf "    lint-extended      : Run extended lint tests - should pass\n"
	printf "    lint               : Run full lint tests - Not expected to pass\n\n"

	printf "  Options:\n"
	printf "    -h | --help       : Show this help message\n"
	printf "    -I | --invert     : Invert results - used for testing linters\n"
	printf "    -J | --junit      : Send test output to a JUnit file\n"
	printf "\n"
}

#write to the junit xml file if --junit was specified
junit_write () {
	if [ "$JUNIT" -eq 1 ]; then
		echo "$1" >> "$XMLFILE"
	fi
}

if ! cmd_args="$(getopt -l help,junit,invert -o hIJ -- "$@")"; then
	usage
	exit 0
fi
eval set -- "${cmd_args}"

while true; do
	case "$1" in
	-h | --help)
		usage
		exit 0
		;;
	-I | --invert)
		INVERT=1
		;;
	-J | --junit)
		echo "selected junit"
		JUNIT=1
		;;
	--) shift; break ;;
	*) break ;;
	esac
	shift
done

#verify the first command line parameter
if [ -z "$1" ]; then
	echo "Error: A sub-command is needed."
	usage
	exit 1
elif [ "$1" != "lint" ] && [ "$1" != "lint-stable" ] &&
		[ "$1" != "lint-extended" ]; then
	echo "Error: $1 is not a valid sub-command."
	usage
	exit 1
fi

LINTLOG=$(mktemp .tmpconfig.lintXXXXXX);
XMLFILE="$(dirname "$0")/junit.xml"
if [ "$1" = "lint-extended" ]; then
	XMLFILE="$(dirname "$0")/extended-junit.xml"
fi
FAILED=0;

if [ "${JUNIT}" -eq 1 ]; then
	echo '<?xml version="1.0" encoding="utf-8"?>' > "$XMLFILE"
	junit_write '<testsuite>'
fi

#run all scripts of the requested type
for script in "$(dirname "$0")/${1}-"*; do
	printf "%s " "$(grep '^# DESCR:' "$script" | sed 's,.*DESCR: *,,')"
	printf "(%s): " "$(basename "$script")"
	junit_write "	<testcase classname='lint' name='$(basename "$script")'>"
	$script | tee "$LINTLOG"

	#if the lint script gives any output, that's a failure
	if [ "${INVERT}" -eq 1 ] && [ "$(wc -l < "$LINTLOG")" -ne 0 ]; then
		echo "success"
		junit_write "		<system-out><![CDATA[success]]></system-out>"
	elif [ "${INVERT}" -eq 0 ] && [ "$(wc -l < "$LINTLOG")" -eq 0 ]; then
		echo "success"
		junit_write "		<system-out><![CDATA[success]]></system-out>"
	else
		echo "test failed"
		junit_write "		<failure type='testFailed'><![CDATA["
		junit_write "$(cat "$LINTLOG")"
		junit_write "]]></failure>"
		rm -f "$LINTLOG"
		FAILED=$(( FAILED + 1 ))
	fi
	junit_write '	</testcase>'
done

rm -f "$LINTLOG"
junit_write '</testsuite>'
test $FAILED -eq 0 || { echo "ERROR: $FAILED test(s) failed."; exit 1; };
