Skip to content

Instantly share code, notes, and snippets.

@neilrees
Last active April 9, 2019 15:34
Show Gist options
  • Save neilrees/28b99c5d9590a0e2e7ddb14f3ae5d3c9 to your computer and use it in GitHub Desktop.
Save neilrees/28b99c5d9590a0e2e7ddb14f3ae5d3c9 to your computer and use it in GitHub Desktop.
Convert Mspec xml test results to Junit for VSTS
<?xml version="1.0" encoding="utf-8"?>
<!--
Converts the MSpec (http://github.com/machine/machine.specifications) xml
output to JUnit output format.
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="specs" select="//specification"/>
<xsl:template match="MSpec">
<testsuite
name="Specifications"
tests="{count($specs)}"
errors="0"
failures="{count($specs[@status='failed'])}"
skipped="{count($specs[@status='not-implemented' or @status='ignored'])}">
<xsl:apply-templates select="//specification"/>
</testsuite>
</xsl:template>
<xsl:template match="specification">
<xsl:variable name="classname">
<xsl:value-of select="ancestor::context/@type-name"/>
</xsl:variable>
<testcase classname="{$classname}" name="{./@name}" time="{./@time div 1000.0}">
<xsl:if test="@status = 'failed'">
<failure>
<xsl:attribute name="message"><xsl:value-of select="error/message"/></xsl:attribute>
<xsl:value-of select="error/stack-trace"/>
</failure>
</xsl:if>
<xsl:if test="@status = 'not-implemented' or @status = 'ignored'">
<skipped message="Specification skipped">
</skipped>
</xsl:if>
</testcase>
</xsl:template>
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment