* contrib/sum2junit.sh: New.
authorRob Savoye <rob.savoye@linaro.org>
Sat, 2 Apr 2016 03:03:18 +0000 (14:03 +1100)
committerBen Elliston <bje@gnu.org>
Sat, 2 Apr 2016 03:03:18 +0000 (14:03 +1100)
Signed-off-by: Ben Elliston <bje@gnu.org>
ChangeLog
contrib/sum2junit.sh [new file with mode: 0755]

index d1567bc..8d42d57 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-04-02  Rob Savoye  <rob.savoye@linaro.org>
+
+       * contrib/sum2junit.sh: New.
+
 2016-04-01  Ben Elliston  <bje@gnu.org>
 
        * doc/dejagnu.texi (connprocs): Document new SSH procs.
diff --git a/contrib/sum2junit.sh b/contrib/sum2junit.sh
new file mode 100755 (executable)
index 0000000..8ef6347
--- /dev/null
@@ -0,0 +1,103 @@
+#!/bin/bash
+
+# sum2junit.sh -- convert a .sum file into Junit-compatible XML.
+#
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of DejaGnu.
+#
+# DejaGnu 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; either version 3 of the License, or
+# (at your option) any later version.
+
+if test x"$1" = x; then
+  outfile="/tmp/testrun.xml"
+  infile="/tmp/testrun.sum"
+else
+  outfile=${1//\.sum.*/.xml}
+  infile=$1
+fi
+
+# Where to put the output file
+if test x"$2" = x; then
+  outfile=${outfile}
+else
+  outfile="/tmp/${outfile}"
+fi
+
+if test ! -e "$infile"; then
+  echo "ERROR: no input file specified"
+  exit
+fi
+
+tool=$(grep "tests ===" "$infile" | tr -s ' ' | cut -d ' ' -f 2)
+
+# Get the counts for tests that didn't work properly
+skipped=$(egrep -c '^UNRESOLVED|^UNTESTED|^UNSUPPORTED' "$infile")
+if test x"${skipped}" = x; then
+    skipped=0
+fi
+
+# The total of successful results are PASS and XFAIL
+passes=$(egrep -c '^PASS|XFAIL' "$infile")
+if test x"${passes}" = x; then
+    passes=0
+fi
+
+# The total of failed results are FAIL and XPASS
+failures=$(egrep -c '^XFAIL|XPASS' "$infile")
+if test x"${failures}" = x; then
+    failures=0
+fi
+
+# Calculate the total number of test cases
+total=$((passes + failures))
+total=$((total + skipped))
+
+cat <<EOF > ${outfile}
+<?xml version="1.0"?>
+
+<testsuites>
+<testsuite name="DejaGnu" tests="${total}" failures="${failures}" skipped="${skipped}">
+
+EOF
+
+# Reduce the size of the file to be parsed to improve performance. Junit
+# ignores sucessful test results, so we only grab the failures and test
+# case problem results.
+tmpfile="${infile}.tmp"
+rm -f "$tmpfile"
+egrep 'XPASS|FAIL|UNTESTED|UNSUPPORTED|UNRESOLVED' "$infile" > "$tmpfile"
+
+while read line
+do
+    echo -n "."
+    result=$(echo "$line" | cut -d ' ' -f 1 | tr -d ':')
+    name=$(echo "$line" | cut -d ' ' -f 2)
+    message=$(echo "$line" | cut -d ' ' -f 3-50 | tr -d '\"><;:\[\]^\\&?@')
+
+    echo "    <testcase name=\"${name}\" classname=\"${tool}-${result}\">" >> "$outfile"
+    case "${result}" in
+       UNSUPPORTED|UNTESTED|UNRESOLVED)
+           if test x"${message}" != x; then
+               echo -n "        <skipped message=\"${message}" >> "$outfile"
+           else
+               echo -n "        <skipped type=\"$result" >> "$outfile"
+           fi
+           ;;
+       XPASS|XFAIL)
+           echo -n "        <failure message=\"$message" >> "$outfile"
+           ;;
+       *)
+           echo -n "        <failure message=\"$message" >> "$outfile"
+    esac
+    echo "\"/>" >> "$outfile"
+
+    echo "    </testcase>" >> "$outfile"
+done < "$tmpfile"
+rm -f "$tmpfile"
+
+# Write the closing tag for the test results
+echo "</testsuite>" >> "$outfile"
+echo "</testsuites>" >> "$outfile"