diff options
-rw-r--r-- | tests/autotest-local.pl | 19 | ||||
-rw-r--r-- | tests/autotest-report.pl | 115 |
2 files changed, 119 insertions, 15 deletions
diff --git a/tests/autotest-local.pl b/tests/autotest-local.pl index 2dc5531..c655403 100644 --- a/tests/autotest-local.pl +++ b/tests/autotest-local.pl @@ -19,12 +19,10 @@ $fast = (shift eq 'fast'); @toolsets = ($^O =~ /win/i) ? (bcc, cw, dmc, ic8, mingw34, mingw44, mingw45, msvc6, msvc7, msvc71, msvc8, msvc8_x64, msvc9, msvc9_x64, msvc10, msvc10_x64) : (gcc);
@configurations = (debug, release);
@defines = (PUGIXML_NO_XPATH, PUGIXML_NO_EXCEPTIONS, PUGIXML_NO_STL, PUGIXML_WCHAR_MODE);
-@definesabbr = (noxpath, noexcept, nostl, wchar);
if ($fast)
{
@defines = (PUGIXML_WCHAR_MODE);
- @definesabbr = (wchar);
}
@definesets = permute(@defines);
@@ -39,19 +37,10 @@ foreach $toolset (@toolsets) {
foreach $defineset (@definesets)
{
- # construct define abbreviation
- $defineabbr = $defineset;
- $defineabbr =~ s/,/ /g;
+ if ($defineset !~ /NO_XPATH/ && $defineset =~ /NO_EXCEPTIONS/) { next; }
+ if ($defineset !~ /NO_XPATH/ && $defineset =~ /NO_STL/) { next; }
- for ($i = 0; $i < $#definesabbr + 1; ++$i)
- {
- $defineabbr =~ s/$defines[$i]/$definesabbr[$i]/;
- }
-
- if ($defineabbr !~ /noxpath/ && $defineabbr =~ /noexcept/) { next; }
- if ($defineabbr !~ /noxpath/ && $defineabbr =~ /nostl/) { next; }
-
- print STDERR "*** testing $toolset/$configuration ($defineabbr) ... ***\n";
+ print STDERR "*** testing $toolset/$configuration ($defineset) ... ***\n";
# launch command
my $cmdline = "jam toolset=$toolset configuration=$configuration defines=$defineset";
@@ -69,7 +58,7 @@ foreach $toolset (@toolsets) my $coverage_pugixpath = $1 if ($coverage =~ /pugixpath\.cpp' executed:([^%]+)%/);
# print build report
- print "### autotest $Config{archname} $toolset $configuration [$defineabbr] result $result $coverage_pugixml $coverage_pugixpath\n";
+ print "### autotest $Config{archname} $toolset $configuration [$defineset] result $result $coverage_pugixml $coverage_pugixpath\n";
}
last if ($fast);
diff --git a/tests/autotest-report.pl b/tests/autotest-report.pl new file mode 100644 index 0000000..9379c28 --- /dev/null +++ b/tests/autotest-report.pl @@ -0,0 +1,115 @@ +#!/usr/bin/perl
+
+# parse build log
+%results = ();
+%toolsets = ();
+%defines = ();
+%configurations = ();
+
+sub insertindex
+{
+ my ($hash, $key) = @_;
+
+ $$hash{$key} = scalar(keys %$hash) unless defined $$hash{$key};
+}
+
+while (<>)
+{
+ ### autotest i386-freebsd-64int gcc release [wchar] result 0 97.78 98.85
+ if (/^### autotest (\S+) (\S+) (\S+) \[(.*?)\] result (\S+) (\S*) (\S*)/)
+ {
+ my ($platform, $toolset, $configuration, $defineset, $result, $coverage_pugixml, $coverage_pugixpath) = ($1, $2, $3, $4, $5, $6, $7);
+
+ die "Detected duplicate build information $_\n" if defined $results{"$toolset $platform"}{$configuration}{$defineset};
+
+ my $fulltool = "$toolset $platform";
+ my $fullconf = "$configuration $defineset";
+
+ $results{$fulltool}{$fullconf}{result} = $result;
+ $results{$fulltool}{$fullconf}{coverage_pugixml} = $coverage_pugixml;
+ $results{$fulltool}{$fullconf}{coverage_pugixpath} = $coverage_pugixpath;
+
+ &insertindex(\%toolsets, $fulltool);
+
+ $defines{$_} = 1 foreach (split /,/, $defineset);
+ &insertindex(\%configurations, $fullconf);
+ }
+}
+
+# make arrays of toolsets and configurations
+@toolsetarray = ();
+@configurationarray = ();
+
+$toolsetarray[$toolsets{$_}] = $_ foreach (keys %toolsets);
+$configurationarray[$configurations{$_}] = $_ foreach (keys %configurations);
+
+# print header
+print <<END;
+<html><head><title>pugixml autotest report</title></head><body>
+<h3>pugixml autotest report</h3>
+<table border=1 cellspacing=0 cellpadding=4>
+END
+
+# print configuration header (release/debug)
+print "<tr><td align='right'>configuration</td>";
+print "<td>".(split /\s+/)[0]."</td>" foreach (@configurationarray);
+print "</tr>\n";
+
+# print defines header (one row for each define)
+foreach $define (sort {$a cmp $b} keys %defines)
+{
+ print "<tr><td align='right'><small>$define</small></td>";
+
+ foreach (@configurationarray)
+ {
+ my $present = ($_ =~ /\b$define\b/);
+ my $color = $present ? "#cccccc" : "#ffffff";
+ print "<td bgcolor='$color' align='center'>" . ($present ? "+" : " ") . "</td>";
+ }
+ print "</tr>\n";
+}
+
+# print data (one row for each toolset)
+foreach $tool (@toolsetarray)
+{
+ print "<tr><td>$tool</td>";
+
+ foreach (@configurationarray)
+ {
+ my $cmdline = "jam toolset=" . (split /\s+/, $tool)[0] . " defines=" . (split /\s+/, $_)[1] . " configuration=" . (split /\s+/, $_)[0];
+ my $info = $results{$tool}{$_};
+
+ if (!defined $$info{result})
+ {
+ print "<td bgcolor='#cccccc'> </td>";
+ }
+ elsif ($$info{result} == 0)
+ {
+ my ($coverage_pugixml, $coverage_pugixpath) = ($$info{coverage_pugixml}, $$info{coverage_pugixpath});
+
+ print "<td bgcolor='#00ff00' align='center' title='$cmdline'>pass";
+
+ if ($coverage_pugixml > 0 || $coverage_pugixpath > 0)
+ {
+ print "<br><font size='-2'>" . ($coverage_pugixml + 0) . "%<br>" . ($coverage_pugixpath + 0) . "%</font>";
+ }
+
+ print "</td>";
+ }
+ else
+ {
+ print "<td bgcolor='#ff0000' align='center' title='$cmdline'>fail</td>"
+ }
+ }
+
+ print "</tr>\n";
+}
+
+# print footer
+$date = localtime;
+
+print <<END;
+</table><br>
+Generated on $date
+</body></html>
+END
|