Skip to content

Commit aa8e775

Browse files
committed
[JENKINS-69879] XUnit BoostTest generate wrong XML when there are multiple TestLog/TestSuite element
Fix XSLT to support multiple TestSuite elements under TestLog
1 parent c7c179e commit aa8e775

4 files changed

Lines changed: 3336 additions & 27 deletions

File tree

src/main/resources/org/jenkinsci/plugins/xunit/types/boosttest-1.2-to-junit-4.xsl

Lines changed: 56 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -72,35 +72,65 @@ THE SOFTWARE.
7272
</xsl:for-each>
7373
</xsl:template>
7474

75-
<xsl:template match="/TestLog/TestSuite">
75+
<xsl:template match="/TestLog">
7676
<xsl:variable name="tsCount" select="count(./TestSuite)"/>
7777
<xsl:variable name="tcCount" select="count(./TestCase)"/>
78+
<xsl:variable name="tests" select="count(.//TestCase[count(descendant::TestSuite) = 0])"/>
79+
<xsl:variable name="errors" select="count(.//TestCase/FatalError)+count(.//TestCase/Exception)"/>
80+
<xsl:variable name="failures" select="count(.//TestCase/Error)"/>
81+
82+
<xsl:choose>
83+
<xsl:when test="$tsCount > 1 and $tcCount = 0">
84+
<xsl:element name="testsuites">
85+
<xsl:attribute name="tests">
86+
<xsl:value-of select="$tests" />
87+
</xsl:attribute>
88+
89+
<xsl:attribute name="errors">
90+
<xsl:value-of select="$errors"/>
91+
</xsl:attribute>
92+
93+
<xsl:attribute name="failures">
94+
<xsl:value-of select="$failures"/>
95+
</xsl:attribute>
96+
97+
<xsl:attribute name="name">
98+
<xsl:value-of>Test Suite Collection</xsl:value-of>
99+
</xsl:attribute>
100+
101+
<xsl:for-each select="descendant::TestSuite[count(./TestCase) > 0]">
102+
<xsl:call-template name="testSuite"/>
103+
</xsl:for-each>
104+
</xsl:element>
105+
</xsl:when>
106+
<xsl:otherwise>
107+
<xsl:element name="testsuite">
108+
<xsl:attribute name="tests">
109+
<xsl:value-of select="$tests"/>
110+
</xsl:attribute>
111+
112+
<xsl:attribute name="errors">
113+
<xsl:value-of select="$errors"/>
114+
</xsl:attribute>
115+
116+
<xsl:attribute name="failures">
117+
<xsl:value-of select="$failures"/>
118+
</xsl:attribute>
119+
120+
<xsl:attribute name="name">
121+
<xsl:value-of select="./TestSuite/@name"/>
122+
</xsl:attribute>
123+
124+
<xsl:for-each select="./TestSuite//descendant::TestSuite[count(./TestCase) > 0]">
125+
<xsl:call-template name="testSuite"/>
126+
</xsl:for-each>
78127

79-
<xsl:element name="testsuite">
80-
<xsl:attribute name="tests">
81-
<xsl:value-of select="count(.//TestCase[count(descendant::TestSuite) = 0])"/>
82-
</xsl:attribute>
83-
84-
<xsl:attribute name="errors">
85-
<xsl:value-of select="count(.//TestCase/FatalError)+count(.//TestCase/Exception)"/>
86-
</xsl:attribute>
87-
88-
<xsl:attribute name="failures">
89-
<xsl:value-of select="count(.//TestCase/Error)"/>
90-
</xsl:attribute>
91-
92-
<xsl:attribute name="name">
93-
<xsl:value-of select="@name"/>
94-
</xsl:attribute>
95-
96-
<xsl:for-each select="descendant::TestSuite[count(./TestCase) > 0]">
97-
<xsl:call-template name="testSuite"/>
98-
</xsl:for-each>
99-
100-
<xsl:for-each select="./TestCase">
101-
<xsl:call-template name="testCase"/>
102-
</xsl:for-each>
103-
</xsl:element>
128+
<xsl:for-each select="./TestSuite/TestCase">
129+
<xsl:call-template name="testCase"/>
130+
</xsl:for-each>
131+
</xsl:element>
132+
</xsl:otherwise>
133+
</xsl:choose>
104134
</xsl:template>
105135

106136
<xsl:template name="testSuite">

src/test/java/org/jenkinsci/plugins/xunit/types/BoostTestTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ public static Collection<Object[]> data() {
5858
{ "autotest-multiple", 21 }, //
5959
{ "skipped", 22 }, //
6060
{ "exception-context", 23 }, //
61-
{ "wrong_classname", 24 } //
61+
{ "wrong_classname", 24 }, //
62+
{ "parse_error", 25 } //
6263
});
6364
}
6465

0 commit comments

Comments
 (0)