11 my ($class, $dirname, $statistics) = @_;
14 statistics => $statistics,
16 local_statistics => {},
20 link("selftest/output/testresults.css", "$dirname/testresults.css");
22 open(INDEX, ">$dirname/index.html");
24 print INDEX "<html lang=\"en\">\n";
25 print INDEX "<head>\n";
26 print INDEX " <title>Samba Testsuite Run</title>\n";
27 print INDEX " <link rel=\"stylesheet\" type=\"text/css\" href=\"testresults.css\"/>\n";
28 print INDEX "</head>\n";
29 print INDEX "<body>\n";
30 print INDEX "<table width=\"100%\" border=\"0\" cellspacing=\"0\">\n";
31 print INDEX " <tr><td class=\"title\">Samba Testsuite Run</td></tr>\n";
32 print INDEX " <tr><td>\n";
33 print INDEX " <center>";
34 print INDEX " <table>\n";
35 print INDEX " <tr>\n";
36 print INDEX " <td class=\"tableHead\">Test</td>\n";
37 print INDEX " <td class=\"tableHead\">Environment</td>\n";
38 print INDEX " <td class=\"tableHead\">Result</td>\n";
39 print INDEX " </tr>\n";
46 sub start_testsuite($$)
48 my ($self, $state) = @_;
50 $self->{local_statistics} = {
57 $state->{HTMLFILE} = "$state->{NAME}.html";
58 $state->{HTMLFILE} =~ s/[:\t\n \/]/_/g;
60 open(TEST, ">$self->{dirname}/$state->{HTMLFILE}") or die("Unable to open $state->{HTMLFILE} for writing");
62 my $title = "Test Results for $state->{NAME}";
64 print TEST "<html lang=\"en\">\n";
65 print TEST "<head>\n";
66 print TEST " <title>$title</title>\n";
67 print TEST " <link rel=\"stylesheet\" type=\"text/css\" href=\"testresults.css\"/>\n";
68 print TEST "</head>\n";
69 print TEST "<body>\n";
70 print TEST "<table width=\"100%\" border=\"0\" cellspacing=\"0\">\n";
71 print TEST " <tr><td class=\"title\">$title</td></tr>\n";
72 print TEST " <tr><td>\n";
73 print TEST " <table>\n";
78 my ($self, $state, $output) = @_;
80 $self->{msg} .= "<span class=\"control\">$output<br/></span>\n";
85 my ($self, $state, $output) = @_;
87 unless (defined($self->{active_test})) {
88 print TEST "$output<br/>";
90 $self->{msg} .= "$output<br/>";
94 sub end_testsuite($$$$$)
96 my ($self, $state, $expected_ret, $ret, $envlog) = @_;
98 print TEST "</table>\n";
100 print TEST "<div class=\"duration\">Duration: " . (time() - $state->{START_TIME}) . "s</div>\n";
101 print TEST "</body>\n";
102 print TEST "</html>\n";
106 print INDEX "<tr>\n";
107 print INDEX " <td class=\"testSuite\"><a href=\"$state->{HTMLFILE}\">$state->{NAME}</a></td>\n";
108 print INDEX " <td class=\"environment\">$state->{ENVNAME}</td>\n";
109 my $st = $self->{local_statistics};
111 if ($ret == $expected_ret) {
112 print INDEX " <td class=\"resultOk\">";
114 print INDEX " <td class=\"resultFailure\">";
118 if ($st->{success} > 0) {
119 print INDEX "$st->{success} ok";
122 if ($st->{skip} > 0) {
123 print INDEX ", " if ($l);
124 print INDEX "$st->{skip} skipped";
127 if ($st->{failure} > 0) {
128 print INDEX ", " if ($l);
129 print INDEX "$st->{failure} failures";
132 if ($st->{error} > 0) {
133 print INDEX ", " if ($l);
134 print INDEX "$st->{error} errors";
139 if ($ret == $expected_ret) {
148 print INDEX "</tr>\n";
153 my ($self, $state, $testname) = @_;
155 $self->{active_test} = $testname;
161 my ($self, $state, $testname, $result, $unexpected, $reason) = @_;
165 $self->{local_statistics}->{$result}++;
167 if ($result eq "skip") {
168 print TEST "<td class=\"outputSkipped\">\n";
169 } elsif ($unexpected) {
170 print TEST "<td class=\"outputFailure\">\n";
172 print TEST "<td class=\"outputOk\">\n";
175 print TEST "<h3>$testname</h3>\n";
177 print TEST $self->{msg};
179 if (defined($reason)) {
180 print TEST "<div class=\"reason\">$reason</div>\n";
183 print TEST "</td></tr>\n";
185 $self->{active_test} = undef;
192 my $st = $self->{statistics};
193 print INDEX "<tr>\n";
194 print INDEX " <td class=\"testSuiteTotal\">Total</td>\n";
195 print INDEX " <td></td>\n";
197 if ($st->{SUITES_FAIL} == 0) {
198 print INDEX " <td class=\"resultOk\">";
200 print INDEX " <td class=\"resultFailure\">";
202 print INDEX ($st->{TESTS_EXPECTED_OK} + $st->{TESTS_UNEXPECTED_OK}) + " ok";
203 if ($st->{TESTS_UNEXPECTED_OK} > 0) {
204 print INDEX " ($st->{TESTS_UNEXPECTED_OK} unexpected)";
206 if ($st->{TESTS_SKIP} > 0) {
207 print INDEX ", $st->{TESTS_SKIP} skipped";
209 print INDEX ", " . ($st->{TESTS_UNEXPECTED_FAIL} + $st->{TESTS_EXPECTED_FAIL}) . " failures";
210 if ($st->{TESTS_UNEXPECTED_OK} > 0) {
211 print INDEX " ($st->{TESTS_EXPECTED_FAIL} expected)";
213 if ($st->{TESTS_ERROR} > 0) {
214 print INDEX ", $st->{TESTS_ERROR} errors";
219 print INDEX "</tr>\n";
221 print INDEX "</table>\n";
222 print INDEX "</center>\n";
223 print INDEX "</td></tr>\n";
224 print INDEX "</table>\n";
225 print INDEX "</body>\n";
226 print INDEX "</html>\n";
232 my ($self, $name, $envname) = @_;
234 print INDEX "<tr>\n";
235 print INDEX " <td class=\"testSuite\">$name</td>\n";
236 print INDEX " <td class=\"resultSkipped\" colspan=\"2\">SKIPPED - environment `$envname` not available!</td>\n";
237 print INDEX "</tr>\n";
240 sub skip_testsuite($$)
242 my ($self, $name) = @_;
244 print INDEX "<tr>\n";
245 print INDEX " <td class=\"testSuite\">$name</td>\n";
246 print INDEX " <td class=\"resultSkipped\" colspan=\"2\">SKIPPED</td>\n";
247 print INDEX "</tr>\n";