Skip to content

Commit

Permalink
Fix JENKINS-11599
Browse files Browse the repository at this point in the history
  • Loading branch information
gboissinot committed Aug 14, 2014
1 parent f1d44d9 commit dbe2ca4
Show file tree
Hide file tree
Showing 6 changed files with 10,338 additions and 13 deletions.
2 changes: 1 addition & 1 deletion src/main/java/hudson/plugins/gallio/GallioInputMetric.java
Expand Up @@ -25,7 +25,7 @@ public String getToolVersion() {

@Override
public String getXslName() {
return "gallio-1.1-to-junit-1.0.xsl";
return "gallio-1.2-to-junit-1.0.xsl";
}

@Override
Expand Down
172 changes: 172 additions & 0 deletions src/main/resources/hudson/plugins/gallio/gallio-1.2-to-junit-1.0.xsl
@@ -0,0 +1,172 @@
<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://www.gallio.org/"
xmlns:functx="http://www.functx.com">
<xsl:template match="/">
<xsl:for-each select="a:report/a:testPackageRun">
<testsuites>
<xsl:apply-templates select="a:testStepRun"/>
</testsuites>
</xsl:for-each>
</xsl:template>

<!-- Template for the test step runs (test suites) that are parents of "real" test cases -->
<xsl:template match="a:testStepRun[a:children[a:testStepRun[a:testStep[@isTestCase='true']]]]">

<!-- Also check if this test suite has other test suites under itself -->
<!-- Some namespaces may have both individual tests and also variant tests which actually are nested test suites -->
<xsl:apply-templates select="a:children/a:testStepRun"/>

<testsuite skipped="0" failures="0" errors="0">
<xsl:attribute name="time">
<xsl:value-of select="a:result/@duration"/>
</xsl:attribute>
<xsl:attribute name="tests">
<xsl:value-of select="count(a:children/a:testStepRun)"/>
</xsl:attribute>
<xsl:attribute name="errors">
<xsl:value-of
select="count(a:children/a:testStepRun/a:result/a:outcome[@status = 'failed' and @category='error'])"/>
</xsl:attribute>
<xsl:attribute name="failures">
<xsl:value-of select="count(a:children/a:testStepRun/a:result/a:outcome[@status = 'failed'])"/>
</xsl:attribute>
<xsl:attribute name="skipped">
<xsl:value-of select="count(a:children/a:testStepRun/a:result/a:outcome[@status = 'skipped'])"/>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="a:testStep/a:codeReference/@type"/>
</xsl:attribute>
<!-- Only go through the "real" test cases under this test suite -->
<xsl:for-each select="a:children/a:testStepRun[a:testStep[@isTestCase='true']]">
<xsl:if test="a:result/a:outcome/@status != 'skipped'">
<testcase>
<xsl:attribute name="time">
<xsl:value-of select="a:result/@duration"/>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="a:testStep/@name"/>
</xsl:attribute>
<xsl:attribute name="classname">
<xsl:value-of select="../../a:testStep/a:codeReference/@type"/>
</xsl:attribute>
<xsl:if test="a:result/a:outcome/@status = 'failed'">
<failure>
<xsl:attribute name="message">
<!--for Gallio/Nunit-->
<xsl:value-of
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:text"/>
<!--for Gallio/Mbunit-->
<!--ExceptionMessage Gallio 3.0.6 !?!-->
<xsl:for-each
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:section/a:contents/a:marker">
<xsl:if test="@class = 'Exception'">
<xsl:for-each select="a:contents/a:marker">
<xsl:if test="@class = 'ExceptionType'">
<xsl:value-of select="a:contents/a:text"/>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="a:contents/a:text"/>
<xsl:for-each
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:section/a:contents/a:marker/a:contents/a:marker">
<xsl:if test="@class = 'ExceptionMessage'">
<xsl:value-of select="a:contents/a:text"/>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
<!--ExceptionMessage-->
<xsl:for-each
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:marker/a:contents/a:marker">
<xsl:if test="@class = 'ExceptionMessage'">
<xsl:value-of select="a:contents/a:text"/>
</xsl:if>
</xsl:for-each>
<!--Assertion Failure-->
<xsl:value-of
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:marker/a:contents/a:section/@name"/>
<xsl:for-each
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:marker/a:contents/a:section/a:contents/a:marker/a:contents/a:marker">
<xsl:value-of select="a:contents/a:text"/>
</xsl:for-each>
<xsl:value-of
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:marker/a:contents/a:section/a:contents/a:marker/a:contents/a:text"/>
</xsl:attribute>
<!--=====StackTrace=====-->
<!--for Gallio/Nunit-->
<xsl:value-of
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:section/a:contents/a:marker/a:contents/a:text"/>
<!--for Gallio/Mbunit-->
<!--ExceptionMessage Gallio 3.0.6 !?!-->
<xsl:for-each
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:section/a:contents/a:marker/a:contents/a:marker">
<xsl:if test="@class = 'StackTrace'">
<xsl:value-of select="a:contents/a:text"/>
<xsl:for-each select="a:contents/a:marker">
<xsl:value-of select="a:contents/a:text"/>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
<!--StackTrace Gallio 3.0.5-->
<xsl:for-each
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:marker/a:contents/a:marker">
<xsl:if test="@class = 'StackTrace'">
<xsl:value-of select="a:contents/a:text"/>
</xsl:if>
</xsl:for-each>
<!--<xsl:value-of select="a:testLog/a:streams/a:stream/a:body/a:contents/a:marker/a:contents/a:section/a:contents/a:marker/a:contents/a:text"/>-->
<xsl:for-each
select="a:testLog/a:streams/a:stream/a:body/a:contents/a:marker/a:contents/a:section/a:contents/a:marker">
<xsl:if test="@class = 'StackTrace'">
<xsl:value-of select="a:contents/a:text"/>
</xsl:if>
</xsl:for-each>
</failure>
</xsl:if>

<!-- BEGIN OF PATCH #1.1 -->

<!-- GOAL: display the standard output when succeeded -->
<xsl:if test="a:result/a:outcome/@status = 'passed'">
<xsl:if test="count(a:testLog/a:streams/a:stream)>1">
<system-out>
<!-- for each stream -->
<xsl:for-each select="a:testLog/a:streams/a:stream">
<!-- start a new line -->
<xsl:text>&#13;&#10;</xsl:text>
<!-- display the new section with the stream name -->
<xsl:text>------------------------- </xsl:text>
<xsl:value-of select="functx:camel-case-to-words(@name)"/>
<xsl:text> -------------------------</xsl:text>
<!-- end the line -->
<xsl:text>&#13;&#10;</xsl:text>
<!-- display the stream output -->
<xsl:value-of select="a:body/a:contents/a:text"/>
</xsl:for-each>
</system-out>
</xsl:if>
</xsl:if>

<!-- END OF PATCH #1.1 -->

</testcase>
</xsl:if>
</xsl:for-each>
</testsuite>
</xsl:template>

<!-- For all test step runs we want to go through all its children to find the real test cases -->
<xsl:template match="a:testStepRun">
<xsl:apply-templates select="a:children/a:testStepRun"/>
</xsl:template>

<!-- BEGIN OF PATCH #1.2 -->

<!-- function to split a camel-case string into words (eg. "ConsoleOutput" becomes "Console Output") -->
<xsl:function name="functx:camel-case-to-words" as="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:param name="arg" as="xs:string?"/>
<xsl:sequence select="concat(substring($arg,1,1), replace(substring($arg,2),'(\p{Lu})', concat(' ', '$1')))"/>
</xsl:function>

<!-- END OF PATCH #1.2 -->

</xsl:stylesheet>
Expand Up @@ -19,7 +19,6 @@ public void setUp() {
XMLUnit.setIgnoreComments(true);
}


public void convertAndValidate(Class<? extends InputMetric> classType, String inputXMLPath, String expectedResultPath) throws Exception {
InputMetric inputMetric = InputMetricFactory.getInstance(classType);
File outputXMLFile = File.createTempFile("result", "xml");
Expand Down
6 changes: 5 additions & 1 deletion src/test/java/hudson/plugins/gallio/GallioXSLTest.java
Expand Up @@ -4,7 +4,6 @@

public class GallioXSLTest extends AbstractXUnitXSLTest {


@Test
public void testTransformation() throws Exception {
convertAndValidate(GallioInputMetric.class, "Gallio-simple.xml", "JUnit-simple.xml");
Expand All @@ -20,6 +19,11 @@ public void testTransformedIssue1077() throws Exception {
convertAndValidate(GallioInputMetric.class, "Gallio-issue1077.xml", "JUnit-issue1077.xml");
}

@Test
public void testTransformedIssue11599() throws Exception {
convertAndValidate(GallioInputMetric.class, "Gallio-issue11599.xml", "JUnit-issue11599.xml");
}

@Test
public void testTransformedIgnored() throws Exception {
convertAndValidate(GallioInputMetric.class, "Gallio-ignored.xml", "JUnit-ignored.xml");
Expand Down
26 changes: 16 additions & 10 deletions src/test/resources/hudson/plugins/gallio/JUnit-failure.xml
@@ -1,10 +1,16 @@
<?xml version="1.0"?>
<testsuites>
<testsuite name="UnitTests.MainClassTest" tests="3" time="0.8568407" failures="1" errors="0" skipped="0">
<testcase classname="UnitTests.MainClassTest" name="TestFailure" time="0.41357679999999997">
<failure message=" Expected: 30&#xa; But was: 20&#xa;"> at NUnit.Framework.Assert.That(Object actual, Constraint constraint, String message, Object[] args) at NUnit.Framework.Assert.AreEqual(Int32 expected, Int32 actual, String message, Object[] args) at NUnit.Framework.Assert.AreEqual(Int32 expected, Int32 actual) at UnitTests.MainClassTest.TestFailure() in D:\Projets\TU\NUnit\GallioFailure\UnitTests.cs:ligne 24</failure>
</testcase>
<testcase classname="UnitTests.MainClassTest" name="TestMethodUpdateValue" time="0.093309599999999993"/>
<testcase classname="UnitTests.MainClassTest" name="TestPropertyValue" time="0.0477094"/>
</testsuite>
</testsuites>
<?xml version="1.0" encoding="UTF-8"?>
<testsuites xmlns:a="http://www.gallio.org/" xmlns:functx="http://www.functx.com">
<testsuite skipped="0" failures="1" errors="0" time="0.8568407" tests="3"
name="UnitTests.MainClassTest">
<testcase time="0.41357679999999997" name="TestFailure"
classname="UnitTests.MainClassTest">
<failure message=""> at NUnit.Framework.Assert.That(Object actual, Constraint constraint, String message, Object[] args)
at NUnit.Framework.Assert.AreEqual(Int32 expected, Int32 actual, String message, Object[] args)
at NUnit.Framework.Assert.AreEqual(Int32 expected, Int32 actual)
at UnitTests.MainClassTest.TestFailure() in D:\Projets\TU\NUnit\GallioFailure\UnitTests.cs:ligne 24</failure>
</testcase>
<testcase time="0.093309599999999993" name="TestMethodUpdateValue"
classname="UnitTests.MainClassTest"/>
<testcase time="0.0477094" name="TestPropertyValue" classname="UnitTests.MainClassTest"/>
</testsuite>
</testsuites>

0 comments on commit dbe2ca4

Please sign in to comment.