| %# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| %# Use of this source code is governed by a BSD-style license that can be |
| %# found in the LICENSE file. |
| %def body_block(): |
| <h2 style="text-align:center">ChromeOS Local Test Results</h2> |
| %if not test_results: |
| <h3><u>No test results found.</u></h3> |
| <p>Check the <u><i>result_viewer</i></u> log messages and ensure that |
| <u><i>test_results.json</i></u> is present and has valid json (generated by local_dash).</p> |
| %end |
| |
| %# -------------------------------------------------------------------------- |
| %# LEGEND |
| <div align="center"> |
| <table class="info"> |
| <tr> |
| <td>Legend: </td> |
| <td class='legend success' |
| title='All tests passed'>Passed</td> |
| <td class='legend failure' |
| title='There is a new failure. Take a look!'>Failed</td> |
| <td class='legend testna' |
| title='The test is not applicable.'>Test N/A</td> |
| <td class='legend notstarted' |
| title='Test not run.'>No data</td> |
| </tr> |
| </table> |
| </div> |
| <hr> |
| |
| %# -------------------------------------------------------------------------- |
| %# Jump table to anchors for different hardware represented |
| <table width="100%"> |
| <tr> |
| %for hardware in test_results['hardware']: |
| <td> |
| <a href="#{{hardware}}" title="jump to results for '{{hardware}}'">{{hardware}}</a> |
| </td> |
| %end |
| </tr> |
| </table> |
| <hr> |
| |
| %# -------------------------------------------------------------------------- |
| %# A table for each hardware type |
| %for hardware in test_results['hardware']: |
| <b><u><a name="{{hardware}}">{{hardware}}</a></u></b> |
| <a href="#pagetop" title="jump back to the top of the page">Top</a><br> |
| <div align="center"> |
| <table width="96%"> |
| %# First row is a header row |
| <tr> |
| <td width="1%">Test Date</td> |
| <td class="DevSlave Alt last"> |
| <table width="100%"> |
| <tr> |
| %for test_name in test_results['tests']: |
| <td><div class="TestName"><div class="TestNameDiv">{{test_name}} |
| </div></div></td> |
| %end |
| </tr> |
| </table> |
| </td> |
| </tr> |
| |
| %# ---------------------------------------------------------------------- |
| %# Subsequent rows are: date | test results (pass, fail, not run) |
| %for result_dict in test_results['results']: |
| %if result_dict.setdefault('dut', {}).get('hwid') == hardware: |
| %dut_info = 'ec: %s<br>' % ( |
| % result_dict['dut'].get('fw_version', 'unknown_ec')) |
| %dut_info += ' bios: %s<br>' % ( |
| % result_dict['dut'].get('fwid', 'unknown_bios')) |
| <tr> |
| <td width="1%"> |
| <a class="info" |
| onmouseover="fixTooltip(event, this)" |
| onmouseout="clearTooltip(this)" |
| href="/logs/{{result_dict['path']}}/"> |
| {{result_dict['localtime']}} |
| <span> |
| {{result_dict['path']}} |
| %fail_set = set() |
| %pass_set = set() |
| %for test_result_dict in result_dict['tests']: |
| %test_name = test_result_dict.get('name') |
| %if test_result_dict.get('status') != 'PASS': |
| %fail_set.add(test_name) |
| %else: |
| %pass_set.add(test_name) |
| %end |
| %end |
| %if fail_set: |
| <div style="color:red;"> |
| Failed tests: {{', '.join(sorted(fail_set))}}. |
| </div> |
| %end |
| %fail_set.discard('firmware_FAFTClient') |
| %pass_set.discard('firmware_FAFTClient') |
| %if len(pass_set): |
| {{ len(pass_set) }} tests passed. |
| %end |
| %if len(fail_set): |
| {{ len(fail_set) }} tests failed. |
| %end |
| </span> |
| </a> |
| </td> |
| <td class="DevSlave Alt last"> |
| <table width="100%"> |
| <tr> |
| %for test_name in test_results['tests']: |
| <td class="DevSlaveBox"> |
| %test_ran = False |
| %for test_result_dict in result_dict['tests']: |
| %if test_name != 'firmware_FAFTClient' and test_name == test_result_dict.get('name'): |
| %# notstarted - empty |
| %# running - yellow |
| %# success - green |
| %# failure - red |
| %test_ran = True |
| <a href="/logs/{{test_result_dict['path']}}/" |
| target="_blank" |
| onmouseover="fixTooltip(event, this)" |
| onmouseout="clearTooltip(this)" |
| %if test_result_dict.get('status') == 'PASS': |
| class="info DevSlaveBox success"> |
| <span> |
| <b>{{test_name}}</b><br> |
| {{!dut_info}} |
| </span> |
| %else: |
| %if test_result_dict.get('reason', 'no reason')[8:15] == 'TEST_NA': |
| class="info DevSlaveBox testna"> |
| %else: |
| class="info DevSlaveBox failure"> |
| %end |
| <span> |
| <b>{{test_name}}</b><br> |
| {{!dut_info}} |
| <div style="color:red;"> |
| {{test_result_dict.get('reason', 'no reason')}} |
| </div> |
| </span> |
| %end |
| </a> |
| %end |
| %end |
| %if not test_ran: |
| <a class="info DevSlaveBox notstarted" |
| onmouseover="fixTooltip(event, this)" |
| onmouseout="clearTooltip(this)"> |
| <span> |
| <b>{{test_name}}</b><br> |
| {{!dut_info}} |
| </span> |
| </a> |
| %end |
| </td> |
| %end |
| </tr> |
| </table> |
| </td> |
| </tr> |
| %end |
| %end |
| </table> |
| </div> |
| <hr> |
| %end |
| </div> |
| %end |
| |
| %rebase master {'title': 'tests', 'body_block': body_block} |