| #!/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 |
| } |
| |
| # Look if we have getopt. If not, build it. |
| if [ "$(uname)" = "Darwin" ]; then |
| GETOPT="getopt hIJ" |
| else |
| GETOPT="getopt -l help,junit,invert -o hIJ" |
| fi |
| |
| if ! cmd_args="$($GETOPT -- "$@")"; 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; }; |