mirror of
				https://github.com/ohwgiles/laminar.git
				synced 2025-06-13 12:54:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			118 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
# This example script takes the XML output of a gtest run and formats
 | 
						|
# it as HTML. It can easily be adapted to other XML test output formats
 | 
						|
# such as JUnit or CTest
 | 
						|
 | 
						|
# Prepare xml with ./path/to/test --gtest_output=xml:path/to/output.xml
 | 
						|
 | 
						|
# Usage: format-test-results test_result.xml > output.html
 | 
						|
 | 
						|
if [ ! -f "$1" ]; then
 | 
						|
  echo "File not found: \"$1\""
 | 
						|
  exit 1
 | 
						|
fi
 | 
						|
 | 
						|
xsltproc --stringparam JOB $JOB --stringparam RUN $RUN <(cat <<\EOF
 | 
						|
<?xml version="1.0" encoding="utf-8"?>
 | 
						|
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 | 
						|
<xsl:output method="html" indent="yes" />
 | 
						|
 | 
						|
<xsl:template match="/">
 | 
						|
<html>
 | 
						|
 <head>
 | 
						|
  <meta charset="utf-8" />
 | 
						|
  <meta name="viewport" content="width=device-width, initial-scale=1" />
 | 
						|
  <title>Test report for <xsl:value-of select="$JOB" /> #<xsl:value-of select="$RUN" /></title>
 | 
						|
  <style>
 | 
						|
   body { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; }
 | 
						|
   label:hover { cursor: pointer; }
 | 
						|
   label:before { content: '+ ' }
 | 
						|
   input[type=checkbox].toggle-collapse { display: none; }
 | 
						|
   input[type=checkbox].toggle-collapse~.collapsible { display: none; }
 | 
						|
   input[type=checkbox].toggle-collapse:checked~.collapsible { display: block; }
 | 
						|
   code { white-space: pre-wrap; color: white; }
 | 
						|
   .failure { background-color: #c73030; color: white; }
 | 
						|
   table { min-width: 720px; border-collapse: collapse; }
 | 
						|
   td, th { padding: 5px; }
 | 
						|
   tr:nth-child(even) td { padding: 0; }
 | 
						|
   tr:nth-child(even) { border-bottom: 1px solid #b3abab; }
 | 
						|
   .testcase { padding: 5px; }
 | 
						|
   .testcase.success:before { content: '✔ '; color: green; }
 | 
						|
  </style>
 | 
						|
 </head>
 | 
						|
 <body>
 | 
						|
  <h1><xsl:value-of select="$JOB" /> #<xsl:value-of select="$RUN" /></h1>
 | 
						|
  <h2>Test Report</h2>
 | 
						|
  <table>
 | 
						|
   <thead>
 | 
						|
    <tr>
 | 
						|
     <th>Suite</th>
 | 
						|
     <th>Tests run</th>
 | 
						|
     <th>Failures</th>
 | 
						|
     <th>Errors</th>
 | 
						|
     <th>Elapsed time</th>
 | 
						|
    </tr>
 | 
						|
   </thead>
 | 
						|
  <xsl:apply-templates select="testsuites" />
 | 
						|
  </table>
 | 
						|
 </body>
 | 
						|
</html>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="testsuite">
 | 
						|
<xsl:variable name="result">
 | 
						|
 <xsl:choose>
 | 
						|
  <xsl:when test="(@failures > 0) or (@errors > 0)">failure</xsl:when>
 | 
						|
  <xsl:otherwise>success</xsl:otherwise>
 | 
						|
 </xsl:choose>
 | 
						|
</xsl:variable>
 | 
						|
<tr class="{$result}">
 | 
						|
 <td>
 | 
						|
  <label for="suite-{@name}"><xsl:value-of select="@name" /></label>
 | 
						|
 </td>
 | 
						|
 <td><xsl:value-of select="@tests" /></td>
 | 
						|
 <td><xsl:value-of select="@failures" /></td>
 | 
						|
 <td><xsl:value-of select="@errors" /></td>
 | 
						|
 <td><xsl:value-of select="@time" /></td>
 | 
						|
</tr>
 | 
						|
<tr class="toggle-target">
 | 
						|
 <td colspan="5">
 | 
						|
  <input class="toggle-collapse" id="suite-{@name}" type="checkbox" />
 | 
						|
  <div class="collapsible" style="padding-left: 15px;">
 | 
						|
   <xsl:apply-templates select="testcase" />
 | 
						|
  </div>
 | 
						|
 </td>
 | 
						|
</tr>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="testcase">
 | 
						|
<xsl:choose>
 | 
						|
 <!-- has child nodes? -->
 | 
						|
 <xsl:when test="*">
 | 
						|
  <div class="testcase failure">
 | 
						|
   <xsl:value-of select="@name" /><br />
 | 
						|
   <xsl:apply-templates select="failure" />
 | 
						|
  </div>
 | 
						|
 </xsl:when>
 | 
						|
 <xsl:otherwise>
 | 
						|
  <div class="testcase success">
 | 
						|
   <xsl:value-of select="@name" />
 | 
						|
  </div>
 | 
						|
 </xsl:otherwise>
 | 
						|
</xsl:choose>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
<xsl:template match="failure">
 | 
						|
<div style="padding: 5px; background-color: #313235">
 | 
						|
 <code>
 | 
						|
  <xsl:value-of select="@message"/>
 | 
						|
 </code>
 | 
						|
</div>
 | 
						|
</xsl:template>
 | 
						|
 | 
						|
</xsl:stylesheet>
 | 
						|
 | 
						|
EOF
 | 
						|
) "$1"
 |