blob: abc79cd1225b54c145789b04003519704f4ccffc [file] [log] [blame]
<div xmlns:py="http://genshi.edgewall.org/">
<?python from genshi.builder import tag ?>
<?python from genshi.util import flatten ?>
<table class="datatable test_verdicts">
<tr>
<th></th>
<th>Value</th>
<th>Maximum allowed</th>
<th>Pass/Fail</th>
</tr>
<tr>
<td class="vertical_header_th">Max offset:</td>
<td>${"%s mm" % results.max_offset if results.max_offset is not None else 'N/A'}</td>
<td>${"%s" % settings['maxoffset']} mm</td>
<td class="${'' if results.offset_verdict is None else 'passed' if results.offset_verdict else 'failed'}" >
${"N/A" if results.offset_verdict is None else "Pass" if results.offset_verdict else "Fail"}
</td>
</tr>
<tr>
<td class="vertical_header_th">Max jitter:</td>
<td>${"%s mm" % results.max_jitter if results.max_jitter is not None else 'N/A'}</td>
<td>${"%s" % settings['maxjitter']} mm</td>
<td class="${'' if results.jitter_verdict is None else 'passed' if results.jitter_verdict else 'failed'}" >
${'N/A' if results.jitter_verdict is None else "Pass" if results.jitter_verdict else "Fail"}
</td>
</tr>
<tr>
<td class="vertical_header_th">Missing swipes:</td>
<td>${results.missing_swipes}/${results.total_swipes}</td>
<td>${int(settings['maxmissingswipes'])}</td>
<td class="${'passed' if results.missing_swipes_verdict else 'failed'}">${"Pass" if results.missing_swipes_verdict else "Fail"}</td>
</tr>
<tr>
<td class="vertical_header_th">Errors:</td>
<td>${len(results.errors)}</td>
<td>0</td>
<td class="${'passed' if results.errors_verdict else 'failed'}">${"Pass" if results.errors_verdict else "Fail"}</td>
</tr>
<tr py:if="len(results.errors) > 0">
<td class="vertical_header_th">Error descriptions:</td>
<td colspan="2">${tag(flatten((e,tag.br) for e in sorted(results.errors)))}</td>
<td></td>
</tr>
</table>
<div py:if="'noimages' not in kwargs" py:for="img in results.images" class="preview">
<a href="${img[1]}">
<img src="${img[0]}" alt="Preview image"/>
</a>
</div>
<!--! Preview table -->
<div class="dtable no_print">
<div class="dtable_row">
<div class="dtable_header narrow_cell">Toggle:</div>
<div class="dtable_header narrow_cell"><button class="all_lines_button">All</button></div>
<div class="dtable_header narrow_cell"><button class="failed_lines_button">Failed</button></div>
<div class="dtable_header narrow_cell"><button class="passed_lines_button">Passed</button></div>
</div>
</div>
<div class="dtable subplot_table">
<div class="dtable_row">
<div class="dtable_header narrow_cell">Swipe</div>
<div class="dtable_header narrow_cell"># of Fingers</div>
<div class="dtable_header narrow_cell">Errors</div>
<div class="dtable_header narrow_cell">Max offset</div>
<div class="dtable_header narrow_cell">Max jitter</div>
<div class="dtable_header narrow_cell">Pass/Fail</div>
<div class="dtable_header no_print">Detailed plot</div>
</div>
<div py:for="swipe in results.swipes" class="dtable_row plot_header">
<div class="dtable_cell narrow_cell">${swipe.id}</div>
<div class="dtable_cell narrow_cell">${swipe.num_fingers}</div>
<div class="dtable_cell narrow_cell">${len(swipe.errors)}</div>
<div class="dtable_cell narrow_cell">${swipe.max_offset}</div>
<div class="dtable_cell narrow_cell">${swipe.max_jitter}</div>
<div class="dtable_cell narrow_cell ${swipe.verdict_class}">${swipe.verdict_text}</div>
<div class="dtable_cell no_print"><button type="button" class="show_plot">Show/Hide</button></div>
<div class="plot" data-src="${swipe.image}"/>
</div>
</div>
</div>