[% report.title || 'Test Report' %]

[%# TAP-Formatter-HTML: TT2 Template Copyright (c) 2008-2010 Steve Purkis. All rights reserved. Released under the same terms as Perl itself. Developer Notes: * These files can get *BIG*. Try to keep html weight down to a minimum. * Note that the 'minify' TAP::Formatter::HTML option will remove all the tabs at the start of a line, so remember to use tabs not spaces. * Try to use short (1-2 char) css class names in test result loops. More readable class names are fine elsewhere. * The default stylesheets that goes with this are 'default_report.css' & 'default_page.css' * The default javascript files are 'jquery-1.2.3-min.js' & 'default_report.js' -%]
[% FOREACH uri IN css_uris %][% END %] [% FOREACH uri IN js_uris %]
[% END %] [%- IF inline_css %]
[%- END -%] [%- IF inline_js %]
[%- END %]
[% IF report.has_errors %][% SET status = 'failed' %][% ELSE %][% SET status = 'passed' %][% END -%]
[% status FILTER upper %]

Test file | Test results | Time | %
--- | --- | --- | ---
[%# tfoot must come before tbody %]
[% report.num_files %] files | [% report.total %] tests, [% report.passed %] ok, [% report.failed %] failed, [% report.todo %] todo, [% report.skipped %] skipped, [% report.parse_errors %] parse errors exit status: [% report.exit %], wait status: [% report.wait %] elapsed time: [% report.elapsed_time | trim %] | [% report.total_time | format('%.2fs') %] | [% report.percent_passed %]%
[%- FOREACH test IN report.tests %]
[% test.test %] | [%- SET max_tests = 0 -%] [%- SET max_tests = test.tests_planned IF test.tests_planned AND test.tests_planned > max_tests -%] [%- SET max_tests = test.tests_run IF test.tests_run AND test.tests_run > max_tests %] [%# TS=Test Summary. Note: use a table to caulculate widths automatically %]
[% IF test.tests_run AND test.tests_run > 0 -%] [%- SET current_test = 0 -%] [%- FOREACH result IN test.results -%] [%- IF result.is_test %] [%#- Note: break up the tests at 100 so as to preserve sanity. This may leave some tests looking silly (if there's only 101) but in the case of 1000s of tests, it makes this more readable. We do this before incrementing the counter to avoid the first row being off by 1. -%] [%- IF current_test > 0 && (current_test % 100) == 0 %]
[%- END %] [%- current_test = current_test + 1 -%] [%- END -%] [%- END -%] [%- ELSIF test.skip_all -%][%# below: class 's' = skip-ok -%] | [%- ELSE -%][%# below: class 'n' = not-ok -%] | [%- END %]
[%- IF test.parse_errors.size > 0 %] [%- FOREACH e IN test.parse_errors %] Parse error: [% e %] [%- END %] [%- END %] [%- FOREACH result IN test.results %] [% result.raw | html -%] [%- IF result.is_unplanned %] (unplanned!)[% END -%] [%- IF result.todo_passed %] (unexpectedly succeeded!)[% END %] [%- END -%] [%- IF test.exit OR test.wait -%] exit status: [% test.exit %], wait status: [% test.wait %] [%- END %] | [% test.elapsed_time | format('%.2fs') %] | [% test.percent_passed ? test.percent_passed _ '%' : 'n/a' %]
[%- END %]