Home | History | Annotate | Download | only in report
      1 <?xml version="1.0" encoding="utf-8"?>
      2 <!-- Copyright (C) 2008 The Android Open Source Project
      3 
      4     Licensed under the Apache License, Version 2.0 (the "License");
      5     you may not use this file except in compliance with the License.
      6     You may obtain a copy of the License at
      7 
      8         http://www.apache.org/licenses/LICENSE-2.0
      9 
     10     Unless required by applicable law or agreed to in writing, software
     11     distributed under the License is distributed on an "AS IS" BASIS,
     12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13     See the License for the specific language governing permissions and
     14     limitations under the License.
     15 -->
     16 
     17 <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>
     18 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     19     <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
     20 
     21     <xsl:template match="/">
     22 
     23         <html>
     24             <STYLE type="text/css">
     25                 @import "cts_result.css";
     26             </STYLE>
     27 
     28             <body>
     29                 <!-- Title of the Report -->
     30                 <DIV id="title">
     31                     <TABLE>
     32                         <TR>
     33                             <TD width="40%" align="left"><img src="logo.gif"></img></TD>
     34                             <TD width="60%" align="left">
     35                                 <h1>Test Report for <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@build_model"/> -
     36                                     <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@deviceID"/>
     37                                 </h1>
     38                             </TD>
     39                         </TR>
     40                     </TABLE>
     41                 </DIV>
     42                 <img src="newrule-green.png" align="left"></img>
     43 
     44                 <br></br>
     45                 <br></br>
     46 
     47                 <!-- Header with phone and plan information -->
     48                 <DIV id="summary">
     49                     <TABLE width="90%" frame="none">
     50                         <TR>
     51                             <TH>Device Information</TH>
     52                             <TH>Test Summary</TH>
     53                         </TR>
     54 
     55                         <TR>
     56                             <TD>
     57                                 <!-- Device information -->
     58                                 <div id="summaryinfo">
     59                                     <TABLE width="75%">
     60                                         <TR>
     61                                             <TD class="rowtitle">Build Model</TD>
     62                                             <TD>
     63                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@build_model"/>
     64                                             </TD>
     65                                         </TR>
     66                                         <TR>
     67                                             <TD class="rowtitle">Build Name</TD>
     68                                             <TD>
     69                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@buildName"/>
     70                                             </TD>
     71                                         </TR>
     72                                         <TR>
     73                                             <TD class="rowtitle">Build Brand</TD>
     74                                             <TD>
     75                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@build_brand"/>
     76                                             </TD>
     77                                         </TR>
     78                                         <TR>
     79                                             <TD class="rowtitle">Build Manufacturer</TD>
     80                                             <TD>
     81                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@build_manufacturer"/>
     82                                             </TD>
     83                                         </TR>
     84                                         <TR>
     85                                             <TD class="rowtitle">Device ID</TD>
     86                                             <TD>
     87                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@deviceID"/>
     88                                             </TD>
     89                                         </TR>
     90                                         <TR>
     91                                             <TD class="rowtitle">Firmware Version</TD>
     92                                             <TD>
     93                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@buildVersion"/>
     94                                             </TD>
     95                                         </TR>
     96                                         <TR>
     97                                             <TD class="rowtitle">Firmware Build Number</TD>
     98                                             <TD>
     99                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@buildID"/>
    100                                             </TD>
    101                                         </TR>
    102                                         <TR>
    103                                             <TD class="rowtitle">Build Fingerprint</TD>
    104                                             <TD>
    105                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@build_fingerprint"/>
    106                                             </TD>
    107                                         </TR>
    108                                         <TR>
    109                                             <TD class="rowtitle">Build ABI</TD>
    110                                             <TD>
    111                                                 <xsl:value-of
    112                                                   select="TestResult/DeviceInfo/BuildInfo/@build_abi"/>
    113                                             </TD>
    114                                         </TR>
    115                                         <TR>
    116                                             <TD class="rowtitle">Build ABI2</TD>
    117                                             <TD>
    118                                                 <xsl:value-of
    119                                                   select="TestResult/DeviceInfo/BuildInfo/@build_abi2"/>
    120                                             </TD>
    121                                         </TR>
    122                                         <TR>
    123                                             <TD class="rowtitle">Android Platform Version</TD>
    124                                             <TD>
    125                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@androidPlatformVersion"/>
    126                                             </TD>
    127                                         </TR>
    128                                         <TR>
    129                                             <TD class="rowtitle">Supported Locales</TD>
    130                                             <TD>
    131                                                 <xsl:call-template name="formatDelimitedString">
    132                                                     <xsl:with-param name="string" select="TestResult/DeviceInfo/BuildInfo/@locales"/>
    133                                                 </xsl:call-template>
    134                                             </TD>
    135                                         </TR>
    136                                         <TR>
    137                                             <TD class="rowtitle">Screen Size</TD>
    138                                             <TD>
    139                                                 <xsl:value-of select="TestResult/DeviceInfo/Screen/@screen_size"/>
    140                                             </TD>
    141                                         </TR>
    142                                         <TR>
    143                                             <TD class="rowtitle">Resolution</TD>
    144                                             <TD>
    145                                                 <xsl:value-of select="TestResult/DeviceInfo/Screen/@resolution"/>
    146                                             </TD>
    147                                         </TR>
    148                                         <TR>
    149                                             <TD class="rowtitle">Density</TD>
    150                                             <TD>
    151                                                 <xsl:value-of select="TestResult/DeviceInfo/Screen/@screen_density"/>
    152                                                 (<xsl:value-of select="TestResult/DeviceInfo/Screen/@screen_density_bucket"/>)
    153                                             </TD>
    154                                         </TR>
    155                                         <TR>
    156                                             <TD class="rowtitle">Phone number</TD>
    157                                             <TD>
    158                                                 <xsl:value-of select="TestResult/DeviceInfo/PhoneSubInfo/@subscriberId"/>
    159                                             </TD>
    160                                         </TR>
    161                                         <TR>
    162                                             <TD class="rowtitle">X dpi</TD>
    163                                             <TD>
    164                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@Xdpi"/>
    165                                             </TD>
    166                                         </TR>
    167                                         <TR>
    168                                             <TD class="rowtitle">Y dpi</TD>
    169                                             <TD>
    170                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@Ydpi"/>
    171                                             </TD>
    172                                         </TR>
    173                                         <TR>
    174                                             <TD class="rowtitle">Touch</TD>
    175                                             <TD>
    176                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@touch"/>
    177                                             </TD>
    178                                         </TR>
    179                                         <TR>
    180                                             <TD class="rowtitle">Navigation</TD>
    181                                             <TD>
    182                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@navigation"/>
    183                                             </TD>
    184                                         </TR>
    185                                         <TR>
    186                                             <TD class="rowtitle">Keypad</TD>
    187                                             <TD>
    188                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@keypad"/>
    189                                             </TD>
    190                                         </TR>
    191                                         <TR>
    192                                             <TD class="rowtitle">Network</TD>
    193                                             <TD>
    194                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@network"/>
    195                                             </TD>
    196                                         </TR>
    197                                         <TR>
    198                                             <TD class="rowtitle">IMEI</TD>
    199                                             <TD>
    200                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@imei"/>
    201                                             </TD>
    202                                         </TR>
    203                                         <TR>
    204                                             <TD class="rowtitle">IMSI</TD>
    205                                             <TD>
    206                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@imsi"/>
    207                                             </TD>
    208                                         </TR>
    209                                         <TR>
    210                                             <TD class="rowtitle">Open GL ES Version</TD>
    211                                             <TD>
    212                                                 <xsl:value-of select="TestResult/DeviceInfo/BuildInfo/@openGlEsVersion"/>
    213                                             </TD>
    214                                         </TR>
    215                                         <TR>
    216                                             <TD class="rowtitle">Features</TD>
    217                                             <TD>
    218                                                 <xsl:for-each select="TestResult/DeviceInfo/FeatureInfo/Feature[@type='sdk']">
    219                                                     <xsl:text>[</xsl:text>
    220                                                     <xsl:choose>
    221                                                         <xsl:when test="@available = 'true'">
    222                                                             <xsl:text>X</xsl:text>
    223                                                         </xsl:when>
    224                                                         <xsl:otherwise>
    225                                                             <xsl:text>_</xsl:text>
    226                                                         </xsl:otherwise>
    227                                                     </xsl:choose>
    228                                                     <xsl:text>] </xsl:text>
    229 
    230                                                     <xsl:value-of select="@name" />
    231                                                     <br />
    232                                                 </xsl:for-each>
    233                                             </TD>
    234                                         </TR>
    235                                         <TR>
    236                                             <TD class="rowtitle">Other Features</TD>
    237                                             <TD>
    238                                                 <UL>
    239                                                     <xsl:for-each select="TestResult/DeviceInfo/FeatureInfo/Feature[@type='other']">
    240                                                         <LI><xsl:value-of select="@name" /></LI>
    241                                                     </xsl:for-each>
    242                                                 </UL>
    243                                             </TD>
    244                                         </TR>
    245                                         <TR>
    246                                             <TD class="rowtitle">Root Processes</TD>
    247                                             <TD>
    248                                                 <UL>
    249                                                     <xsl:for-each select="TestResult/DeviceInfo/ProcessInfo/Process[@uid='0']">
    250                                                         <LI><xsl:value-of select="@name" /></LI>
    251                                                     </xsl:for-each>
    252                                                 </UL>
    253                                             </TD>
    254                                         </TR>
    255                                         <TR>
    256                                             <TD class="rowtitle">Partitions</TD>
    257                                             <TD>
    258                                                 <UL>
    259                                                     <pre>
    260                                                         <xsl:call-template name="formatDelimitedString">
    261                                                             <xsl:with-param name="string" select="TestResult/DeviceInfo/BuildInfo/@partitions" />
    262                                                             <xsl:with-param name="numTokensPerRow" select="1" />
    263                                                         </xsl:call-template>
    264                                                     </pre>
    265                                                 </UL>
    266                                             </TD>
    267                                         </TR>
    268                                         <TR>
    269                                             <TD class="rowtitle">System Libraries</TD>
    270                                             <TD>
    271                                                 <UL>
    272                                                     <xsl:for-each select="TestResult/DeviceInfo/SystemLibrariesInfo/Library">
    273                                                         <LI><xsl:value-of select="@name" /></LI>
    274                                                     </xsl:for-each>
    275                                                 </UL>
    276                                             </TD>
    277                                         </TR>
    278                                     </TABLE>
    279                                 </div>
    280                             </TD>
    281 
    282                             <!-- plan information -->
    283                             <TD>
    284                                 <div id="summaryinfo">
    285                                     <TABLE width="75%">
    286                                         <TR>
    287                                             <TD class="rowtitle">CTS version</TD>
    288                                             <TD>
    289                                                 <xsl:value-of select="TestResult/HostInfo/Cts/@version"/>
    290                                             </TD>
    291                                         </TR>
    292                                         <TR>
    293                                             <TD class="rowtitle">Test timeout</TD>
    294                                             <TD>
    295                                                 <xsl:value-of select="TestResult/HostInfo/Cts/IntValue[@name='testStatusTimeoutMs']/@value" /> ms
    296                                             </TD>
    297                                         </TR>
    298                                         <TR>
    299                                             <TD class="rowtitle">Host Info</TD>
    300                                             <TD>
    301                                                 <xsl:value-of select="TestResult/HostInfo/@name"/>
    302                                                 (<xsl:value-of select="TestResult/HostInfo/Os/@name"/> - 
    303                                                   <xsl:value-of select="TestResult/HostInfo/Os/@version"/>)
    304                                             </TD>
    305                                         </TR>
    306                                         <TR><TD><BR></BR></TD><TD></TD></TR>
    307                                         <TR>
    308                                             <TD class="rowtitle">Plan name</TD>
    309                                             <TD>
    310                                                 <xsl:value-of select="TestResult/@testPlan"/>
    311                                             </TD>
    312                                         </TR>
    313                                         <TR>
    314                                             <TD class="rowtitle">Start time</TD>
    315                                             <TD>
    316                                                 <xsl:value-of select="TestResult/@starttime"/>
    317                                             </TD>
    318                                         </TR>
    319                                         <TR>
    320                                             <TD class="rowtitle">End time</TD>
    321                                             <TD>
    322                                                 <xsl:value-of select="TestResult/@endtime"/>
    323                                             </TD>
    324                                         </TR>
    325 
    326                                         <!-- Test Summary -->
    327                                         <TR><TD><BR></BR></TD><TD></TD></TR>
    328                                         <TR>
    329                                             <TD class="rowtitle">Tests Passed</TD>
    330                                             <TD>
    331                                                 <xsl:value-of select="TestResult/Summary/@pass"/>
    332                                             </TD>
    333                                         </TR>
    334                                         <TR>
    335                                             <TD class="rowtitle">Tests Failed</TD>
    336                                             <TD>
    337                                                 <xsl:value-of select="TestResult/Summary/@failed"/>
    338                                             </TD>
    339                                         </TR>
    340                                         <TR>
    341                                             <TD class="rowtitle">Tests Timed out</TD>
    342                                             <TD>
    343                                                 <xsl:value-of select="TestResult/Summary/@timeout"/>
    344                                             </TD>
    345                                         </TR>
    346                                         <TR>
    347                                             <TD class="rowtitle">Tests Not Executed</TD>
    348                                             <TD>
    349                                                 <xsl:value-of select="TestResult/Summary/@notExecuted"/>
    350                                             </TD>
    351                                         </TR>
    352                                     </TABLE>
    353                                 </div>
    354                             </TD>
    355                         </TR>
    356                     </TABLE>
    357                 </DIV>
    358 
    359                 <!-- High level summary of test execution -->
    360                 <h2 align="center">Test Summary by Package</h2>
    361                 <DIV id="testsummary">
    362                     <TABLE>
    363                         <TR>
    364                             <TH>Test Package</TH>
    365                             <TH>Passed</TH>
    366                             <TH>Failed</TH>
    367                             <TH>Timed Out</TH>
    368                             <TH>Not Executed</TH>
    369                             <TH>Total Tests</TH>
    370                         </TR>
    371                         <xsl:for-each select="TestResult/TestPackage">
    372                             <TR>
    373                                 <TD>
    374                                     <xsl:variable name="href"><xsl:value-of select="@appPackageName"/></xsl:variable>
    375                                     <a href="#{$href}"><xsl:value-of select="@appPackageName"/></a>
    376                                 </TD>
    377                                 <TD>
    378                                     <xsl:value-of select="count(TestSuite//Test[@result = 'pass'])"/>
    379                                 </TD>
    380                                 <TD>
    381                                     <xsl:value-of select="count(TestSuite//Test[@result = 'fail'])"/>
    382                                 </TD>
    383                                 <TD>
    384                                     <xsl:value-of select="count(TestSuite//Test[@result = 'timeout'])"/>
    385                                 </TD>
    386                                 <TD>
    387                                     <xsl:value-of select="count(TestSuite//Test[@result = 'notExecuted'])"/>
    388                                 </TD>
    389                                 <TD>
    390                                     <xsl:value-of select="count(TestSuite//Test)"/>
    391                                 </TD>
    392                             </TR>
    393                         </xsl:for-each> <!-- end package -->
    394                     </TABLE>
    395                 </DIV>
    396 
    397                 <xsl:call-template name="filteredResultTestReport">
    398                     <xsl:with-param name="header" select="'Test Failures'" />
    399                     <xsl:with-param name="resultFilter" select="'fail'" />
    400                 </xsl:call-template>
    401 
    402                 <xsl:call-template name="filteredResultTestReport">
    403                     <xsl:with-param name="header" select="'Test Timeouts'" />
    404                     <xsl:with-param name="resultFilter" select="'timeout'" />
    405                 </xsl:call-template>
    406 
    407                 <h2 align="center">Detailed Test Report</h2>
    408                 <xsl:call-template name="detailedTestReport" />
    409 
    410             </body>
    411         </html>
    412     </xsl:template>
    413 
    414     <xsl:template name="filteredResultTestReport">
    415         <xsl:param name="header" />
    416         <xsl:param name="resultFilter" />
    417         <xsl:variable name="numMatching" select="count(TestResult/TestPackage/TestSuite//TestCase/Test[@result=$resultFilter])" />
    418         <xsl:if test="$numMatching &gt; 0">
    419             <h2 align="center"><xsl:value-of select="$header" /> (<xsl:value-of select="$numMatching"/>)</h2>
    420             <xsl:call-template name="detailedTestReport">
    421                 <xsl:with-param name="resultFilter" select="$resultFilter"/>
    422             </xsl:call-template>
    423         </xsl:if>
    424     </xsl:template>
    425 
    426     <xsl:template name="detailedTestReport">
    427         <xsl:param name="resultFilter" />
    428         <DIV id="testdetail">
    429             <xsl:for-each select="TestResult/TestPackage">
    430                 <xsl:if test="$resultFilter=''
    431                         or count(TestSuite//TestCase/Test[@result=$resultFilter]) &gt; 0">
    432                     <DIV id="none">
    433                         <TABLE>
    434                             <TR>
    435                                 <TD class="none" align="left">
    436                                     <xsl:variable name="href"><xsl:value-of select="@appPackageName"/></xsl:variable>
    437                                     <a name="{$href}">Compatibility Test Package: <xsl:value-of select="@appPackageName"/></a>
    438                                 </TD>
    439                             </TR>
    440                         </TABLE>
    441                     </DIV>
    442 
    443                     <TABLE>
    444                         <TR>
    445                             <TH width="25%">Test</TH>
    446                             <TH width="7%">Result</TH>
    447                             <TH width="68%">Failure Details</TH>
    448                         </TR>
    449 
    450                         <!-- test case -->
    451                         <xsl:for-each select="TestSuite//TestCase">
    452 
    453                             <xsl:if test="$resultFilter='' or count(Test[@result=$resultFilter]) &gt; 0">
    454                                 <!-- emit a blank row before every test suite name -->
    455                                 <xsl:if test="position()!=1">
    456                                     <TR><TD class="testcasespacer" colspan="3"></TD></TR>
    457                                 </xsl:if>
    458 
    459                                 <TR>
    460                                     <TD class="testcase" colspan="3">
    461                                         <xsl:for-each select="ancestor::TestSuite">
    462                                             <xsl:if test="position()!=1">.</xsl:if>
    463                                             <xsl:value-of select="@name"/>
    464                                         </xsl:for-each>
    465                                         <xsl:text>.</xsl:text>
    466                                         <xsl:value-of select="@name"/>
    467                                     </TD>
    468                                 </TR>
    469                             </xsl:if>
    470 
    471                             <!-- test -->
    472                             <xsl:for-each select="Test">
    473                                 <xsl:if test="$resultFilter='' or $resultFilter=@result">
    474                                     <TR>
    475                                         <TD class="testname"> -- <xsl:value-of select="@name"/></TD>
    476 
    477                                         <!-- test results -->
    478                                         <xsl:choose>
    479                                             <xsl:when test="string(@KnownFailure)">
    480                                                 <!-- "pass" indicates the that test actually passed (results have been inverted already) -->
    481                                                 <xsl:if test="@result='pass'">
    482                                                     <TD class="pass">
    483                                                         <div style="text-align: center; margin-left:auto; margin-right:auto;">
    484                                                             known problem
    485                                                         </div>
    486                                                     </TD>
    487                                                     <TD class="failuredetails"></TD>
    488                                                 </xsl:if>
    489 
    490                                                 <!-- "fail" indicates that a known failure actually passed (results have been inverted already) -->
    491                                                 <xsl:if test="@result='fail'">
    492                                                     <TD class="failed">
    493                                                         <div style="text-align: center; margin-left:auto; margin-right:auto;">
    494                                                             <xsl:value-of select="@result"/>
    495                                                         </div>
    496                                                     </TD>
    497                                                    <TD class="failuredetails">
    498                                                         <div id="details">
    499                                                             A test that was a known failure actually passed. Please check.
    500                                                         </div>
    501                                                    </TD>
    502                                                 </xsl:if>
    503                                             </xsl:when>
    504 
    505                                             <xsl:otherwise>
    506                                                 <xsl:if test="@result='pass'">
    507                                                     <TD class="pass">
    508                                                         <div style="text-align: center; margin-left:auto; margin-right:auto;">
    509                                                             <xsl:value-of select="@result"/>
    510                                                         </div>
    511                                                     </TD>
    512                                                     <TD class="failuredetails"></TD>
    513                                                 </xsl:if>
    514 
    515                                                 <xsl:if test="@result='fail'">
    516                                                     <TD class="failed">
    517                                                         <div style="text-align: center; margin-left:auto; margin-right:auto;">
    518                                                             <xsl:value-of select="@result"/>
    519                                                         </div>
    520                                                     </TD>
    521                                                     <TD class="failuredetails">
    522                                                         <div id="details">
    523                                                             <xsl:value-of select="FailedScene/@message"/>
    524                                                         </div>
    525                                                     </TD>
    526                                                 </xsl:if>
    527 
    528                                                 <xsl:if test="@result='timeout'">
    529                                                     <TD class="timeout">
    530                                                         <div style="text-align: center; margin-left:auto; margin-right:auto;">
    531                                                             <xsl:value-of select="@result"/>
    532                                                         </div>
    533                                                     <TD class="failuredetails"></TD>
    534                                                     </TD>
    535                                                 </xsl:if>
    536 
    537                                                 <xsl:if test="@result='notExecuted'">
    538                                                     <TD class="notExecuted">
    539                                                         <div style="text-align: center; margin-left:auto; margin-right:auto;">
    540                                                             <xsl:value-of select="@result"/>
    541                                                         </div>
    542                                                     </TD>
    543                                                     <TD class="failuredetails"></TD>
    544                                                 </xsl:if>
    545                                             </xsl:otherwise>
    546                                         </xsl:choose>
    547                                     </TR> <!-- finished with a row -->
    548                                 </xsl:if>
    549                             </xsl:for-each> <!-- end test -->
    550                         </xsl:for-each> <!-- end test case -->
    551                     </TABLE>
    552                 </xsl:if>
    553             </xsl:for-each> <!-- end test package -->
    554         </DIV>
    555     </xsl:template>
    556 
    557     <!-- Take a delimited string and insert line breaks after a some number of elements. --> 
    558     <xsl:template name="formatDelimitedString">
    559         <xsl:param name="string" />
    560         <xsl:param name="numTokensPerRow" select="10" />
    561         <xsl:param name="tokenIndex" select="1" />
    562         <xsl:if test="$string">
    563             <!-- Requires the last element to also have a delimiter after it. -->
    564             <xsl:variable name="token" select="substring-before($string, ';')" />
    565             <xsl:value-of select="$token" />
    566             <xsl:text>&#160;</xsl:text>
    567           
    568             <xsl:if test="$tokenIndex mod $numTokensPerRow = 0">
    569                 <br />
    570             </xsl:if>
    571 
    572             <xsl:call-template name="formatDelimitedString">
    573                 <xsl:with-param name="string" select="substring-after($string, ';')" />
    574                 <xsl:with-param name="numTokensPerRow" select="$numTokensPerRow" />
    575                 <xsl:with-param name="tokenIndex" select="$tokenIndex + 1" />
    576             </xsl:call-template>
    577         </xsl:if>
    578     </xsl:template>
    579 
    580 </xsl:stylesheet>
    581