#!/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 | 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
	echo "========"
	junit_write '	</testcase>'
done

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