diff options
Diffstat (limited to 'tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl')
-rw-r--r-- | tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl b/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl new file mode 100644 index 0000000000..b519a7754f --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2007. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:func="http://exslt.org/functions" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func" + exclude-result-prefixes="func meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="xml" encoding="utf-8"/> + + <xsl:param name="expected_results_file"/> + <xsl:param name="failures_markup_file"/> + <xsl:param name="source"/> + <xsl:variable name="expected_results" select="document( $expected_results_file )" /> + + <func:function name="meta:is_test_log_complete"> + <xsl:param name="test_log"/> + <xsl:variable name="type" select="$test_log/@test-type"/> + <func:result> + <xsl:choose> + <xsl:when test="$type='compile' or $type='compile_fail' or $test_log/compile/@result='fail' "> + <xsl:value-of select="count( $test_log/compile ) = 1 and count( $test_log/link) = 0 and count( $test_log/run) = 0"/> + </xsl:when> + <xsl:when test="$type='link' or $type='link_fail' or $type='' or $type='lib' or $test_log/link/@result='fail'"> + <xsl:value-of select="count( $test_log/compile) = 1 and count( $test_log/link) = 1 and count( $test_log/run) = 0"/></xsl:when> + <xsl:when test="$type='run' or $type='run_fail' or $type='run_pyd' or $type='run_mpi'"> + <xsl:value-of select="count( $test_log/compile) = 1 and count( $test_log/link) = 1 and count($test_log/run) = 1 "/> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes"> + Unknown test type "<xsl:value-of select="$type"/>" + </xsl:message> + </xsl:otherwise> + </xsl:choose> + </func:result> + </func:function> + + + <xsl:key name = "trk" match = "test-result" use = "concat( ../../@name, '-', ../@name, '-', @test-name )" /> + <xsl:key name = "tak" match = "toolset-alias" use = "@name" /> + + <xsl:variable name="failures_markup" select="document( $failures_markup_file )" /> + <xsl:template match="/"> + <xsl:apply-templates/> + </xsl:template> + + <xsl:template match="test-log"> + <xsl:variable name="test_log" select="."/> + <xsl:variable name="library" select="@library"/> + <xsl:variable name="test-name" select="@test-name"/> + <xsl:variable name="toolset" select="@toolset"/> + + <xsl:variable name="is_complete" select="meta:is_test_log_complete( $test_log )"/> + + <xsl:element name="{local-name()}"> + <xsl:apply-templates select="@*"/> + + <xsl:variable name="has_failures" select="./*/@result = 'fail'"/> + <xsl:variable name="actual_result"> + <xsl:choose> + <xsl:when test="$has_failures or not( $is_complete )" > + <xsl:text>fail</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>success</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- + Select expected_results context + See http://clover.slavic.pitt.edu/~repertorium/plectogram/keys/keys.html for a good explanation. + + Briefly, for-each doesn't iterate through expected_results, it just selects expected result + as current context to make "key" function work. + --> + + <xsl:for-each select="$expected_results"> + + <xsl:variable name="main_toolset" select="key( 'tak', $toolset )/../@name" /> + <xsl:variable name="toolset_name"> + <xsl:choose> + <xsl:when test="$main_toolset"><xsl:value-of select="$main_toolset"/></xsl:when> + <xsl:otherwise><xsl:value-of select="$toolset"/></xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="expected_results_test_case" select="key( 'trk', concat( $toolset_name, '-', $library, '-', $test-name ) )"/> + <xsl:variable name="test_case_markup" select="$failures_markup//library[@name=$library]/test[ meta:re_match( @name, $test-name ) ]"/> + <xsl:variable name="test_failures_markup" select="$test_case_markup/mark-failure/toolset[ meta:re_match( @name, $toolset ) ]/.."/> + <xsl:variable name="test_failures_markup2" select="$failures_markup//library[@name=$library]/mark-expected-failures/test[ meta:re_match( @name, $test-name ) ]/../toolset[ meta:re_match( @name, $toolset ) ]/.."/> + + <xsl:variable name="category"> + <xsl:choose> + <xsl:when test="$test_case_markup/@category"> + <xsl:value-of select="$test_case_markup/@category"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <xsl:variable name="is_new"> + <xsl:choose> + <xsl:when test="$expected_results_test_case"> + <xsl:text>no</xsl:text> + </xsl:when> + <xsl:otherwise>yes</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <xsl:variable name="has_explicit_markup" select="count( $test_failures_markup ) > 0 or count( $test_failures_markup2 ) > 0"/> + + <xsl:variable name="expected_result"> + <xsl:choose> + <xsl:when test="$has_explicit_markup"> + <xsl:text>fail</xsl:text> + </xsl:when> + + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$expected_results_test_case and $expected_results_test_case/@result = 'fail'"> + <xsl:text>fail</xsl:text> + </xsl:when> + <xsl:otherwise>success</xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="status"> + <xsl:choose> + <xsl:when test="$expected_result = $actual_result">expected</xsl:when> + <xsl:otherwise>unexpected</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="unexpected_success" select="$status = 'unexpected' and $actual_result = 'success'"/> + + <xsl:variable name="expected_reason"> + <xsl:choose> + <xsl:when test="$test_failures_markup/@reason"> + <xsl:value-of select="$test_failures_markup/@reason"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$test_failures_markup2/@reason"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <xsl:variable name="notes"> + + <xsl:if test="$unexpected_success and $has_explicit_markup"> + <note> + <span class="auto-note"> + This test case was explicitly marked up in + <a href="http://svn.boost.org/svn/boost/{$source}/status/explicit-failures-markup.xml"> + status/explicit-failures-markup.xml</a> file in the Boost SVN as "expected to fail", + but is passing. Please consult the notes/output below for more details. + </span> + </note> + </xsl:if> + + <xsl:if test="$has_explicit_markup and count( $test_failures_markup2/note ) = 0 and count( $test_failures_markup/note ) = 0"> + <xsl:choose> + <xsl:when test="$unexpected_success"> + <note> + <span class="auto-note"> + No explanation was provided for this markup. Please contact the library + author(s)/maintainer(s) for more details. + </span> + </note> + </xsl:when> + <xsl:otherwise> + <note> + <span class="auto-note"> + This failure was explicitly marked as expected in + <a href="http://svn.boost.org/svn/boost/{$source}/status/explicit-failures-markup.xml"> + status/explicit-failures-markup.xml</a> file in the Boost SVN. + Please contact the library author(s)/maintainer(s) for the explanation of this markup. + </span> + </note> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + + <xsl:if test="count( $test_failures_markup ) > 0"> + <xsl:for-each select="$test_failures_markup/note"> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:if> + + <xsl:if test="count( $test_failures_markup2 ) > 0"> + <xsl:for-each select="$test_failures_markup2/note"> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:if> + + + <xsl:if test="$expected_results_test_case and $expected_results_test_case/@result = 'fail'"> + <xsl:choose> + <xsl:when test="$unexpected_success"> + <note> + <span class="auto-note"> + This test case used to fail in the reference ("last-known-good") release. + </span> + </note> + </xsl:when> + <xsl:otherwise> + <note> + <span class="auto-note"> + This failure was present in the reference ("last-known-good") release. + </span> + </note> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + + <xsl:if test="not( $is_complete ) and not( $has_failures )"> + <note> + <span class="internal-error-note"> + <b>[Reporting Tools Internal Error]</b> This test case's XML is missing one or more log entries + of the regression run's steps associated with the test case's type ("<xsl:value-of select="$test_log/@test-type"/>"). + Please <a href="mailto:mailto:boost-testing@lists.boost.org">contact reporting tools + maintainers</a> about this problem. + </span> + </note> + </xsl:if> + </xsl:variable> + + <xsl:attribute name="result"><xsl:value-of select="$actual_result"/></xsl:attribute> + <xsl:attribute name="expected-result"><xsl:value-of select="$expected_result"/></xsl:attribute> + <xsl:attribute name="expected-reason"><xsl:value-of select="$expected_reason"/></xsl:attribute> + <xsl:attribute name="status"><xsl:value-of select="$status"/></xsl:attribute> + <xsl:attribute name="is-new"><xsl:value-of select="$is_new"/></xsl:attribute> + <xsl:attribute name="category"><xsl:value-of select="$category"/></xsl:attribute> + <xsl:element name="notes"><xsl:copy-of select="$notes"/></xsl:element> + + <xsl:apply-templates select="$test_log/node()" /> + </xsl:for-each> + </xsl:element> + </xsl:template> + + <xsl:template match="*"> + <xsl:element name="{local-name()}"> + <xsl:apply-templates select="@*"/> + <xsl:apply-templates select="node()" /> + </xsl:element> + </xsl:template> + + <xsl:template match="@*"> + <xsl:copy-of select="." /> + </xsl:template> + +</xsl:stylesheet> |