#!/bin/sh
#
# This file is part of the coreboot project.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
#set -x # uncomment for debug

usage () {
	printf "Usage: %s <lint|lint-stable> [--junit]\n" "$0"
}

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

#verify the first command line parameter
if [ -z "$1" ] || [ "$1" != "lint" ] && [ "$1" != "lint-stable" ]; then
	usage
	exit 1
fi

LINTLOG=$(mktemp .tmpconfig.lintXXXXX);
XMLFILE="$(dirname "$0")/junit.xml"
FAILED=0;

#check optional second command line parameter.
#TODO: Add real command line handling if anything more is added
if [ "$2" = "--junit" ]; then
	JUNIT=1
	echo '<?xml version="1.0" encoding="utf-8"?>' > "$XMLFILE"
	junit_write '<testsuite>'
else
	JUNIT=0
fi

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

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

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