Module: tools Branch: master Commit: ae814d4f9001d80292ffb3f856a4b66d5bceb0ff URL: http://source.winehq.org/git/tools.git/?a=commit;h=ae814d4f9001d80292ffb3f85...
Author: Francois Gouget fgouget@free.fr Date: Fri Mar 14 20:11:04 2008 +0100
winetest: Add some heuristics to detect missing dlls in version 3 reports.
---
winetest/dissect | 28 ++++++++++++++++++++++++---- winetest/gather | 10 ++++++++-- 2 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/winetest/dissect b/winetest/dissect index 82a6912..61024cd 100755 --- a/winetest/dissect +++ b/winetest/dissect @@ -153,13 +153,17 @@ if ($wine) { }
# Dll information is only available in new type reports +my %dllinfo; +chomp; if (/^Dll info:\r?$/) { - open DLLINFO, ">$tmpdir/dllinfo.txt" or mydie "unable to open '$tmpdir/dllinfo.txt' for writing: $!\n"; - while (($_ = <IN>) =~ s/^ //) { print DLLINFO; } - close DLLINFO or mydie "error writing to '$tmpdir/dllinfo.txt': $!\n"; + while ($_ = <IN>) { + chomp; + last if (!/^\s+([^ =]+)=(.*)\r?$/); + $dllinfo{$1}=$2; + } }
-/Test output:\r?/ or mydie "no test header: $_"; +/^Test output:/ or mydie "no test header: $_"; my ($dll, $unit, $source, $rev, $result); my ($lines,$total, $todo, $failed, $skipped); $dll = undef; # state machine starts @@ -187,6 +191,14 @@ while (<IN>) { $todo += $3; $failed += $4; print OUT; + } elsif (/^.*$unit.*: Tests skipped: (?:$dll(?:.dll)? cannot be loaded|$dll(?:.dll)? not found|Could not load $dll(?:.dll)?)\r?$/) { + # We find these lines in report version 3 files + $dllinfo{$dll}="dll is missing"; + print OUT; + } elsif (/^.*$unit.*:Could not load $dll/) { + # We find these lines in report version 3 files + $dllinfo{$dll}="dll is missing"; + print OUT; } elsif (/$dll:$unit done ((-?\d+))\r?$/) { chomp; # current test ended if ($lines==0) { @@ -223,6 +235,14 @@ if (defined $dll) { close SUM or mydie "error writing to '$tmpdir/summary.txt': $!\n"; close IN;
+if (%dllinfo) { + open DLLINFO, ">$tmpdir/dllinfo.txt" or mydie "unable to open '$tmpdir/dllinfo.txt' for writing: $!\n"; + foreach my $dll (sort keys %dllinfo) { + print DLLINFO "$dll=$dllinfo{$dll}\n"; + } + close DLLINFO or mydie "error writing to '$tmpdir/dllinfo.txt': $!\n"; +} + my $builddir = "$datadir/$testbuild"; foreach ($datadir, $builddir) { if (!(-d $_ || mkdir $_)) { diff --git a/winetest/gather b/winetest/gather index a84e5be..8208e19 100755 --- a/winetest/gather +++ b/winetest/gather @@ -139,7 +139,12 @@ foreach my $file (glob "$datadir/$build/*/summary.txt") { $report->{dllmissing}->{$dll} = 1; next; } - $report->{results}->{$testname} = [$count, $todo, $error, $skipped]; + if ($count eq "0" and exists $report->{dllmissing}->{$dll}) { + # Mark this test as missing because of a missing dll + $report->{results}->{$testname} = ["dll missing", "-", "-", "-"]; + } else { + $report->{results}->{$testname} = [$count, $todo, $error, $skipped]; + } $alltests{$testname} = "http://cvs.winehq.org/cvsweb/wine/$source" . ($rev ne "-"?"#rev$rev":"") unless exists $alltests{$testname}; if ($count ne "failed") { @@ -309,8 +314,9 @@ sub singletest($$$) { } elsif ($count eq "dll missing") { my ($dll, $unit) = split(/:/, $testname); $dll.=".dll" if ($dll !~ /./); + my $href=(-r "$datadir/$build/$file") ? "href="$file"" : ""; print OUT <<"EOF"; - <td class="skip_pass"><a + <td class="skip_pass"><a $href title="No tests run as $dll is not present on this system" >n/a</a></td> EOF