#!/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|lint-extended> [--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" ]  && \
		[ "$1" != "lint-extended" ]; then
	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;

#check optional second command line parameter.
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 "%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 [ "$(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; };
