1563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#!/usr/bin/perl -w 2563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# Copyright (C) 2005 Apple Computer, Inc. All rights reserved. 4563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 5563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# Redistribution and use in source and binary forms, with or without 6563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# modification, are permitted provided that the following conditions 7563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# are met: 8563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 9563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 1. Redistributions of source code must retain the above copyright 10563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# notice, this list of conditions and the following disclaimer. 11563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 2. Redistributions in binary form must reproduce the above copyright 12563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# notice, this list of conditions and the following disclaimer in the 13563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# documentation and/or other materials provided with the distribution. 14563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# its contributors may be used to endorse or promote products derived 16563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# from this software without specific prior written permission. 17563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# 18563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 29563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark# Script to check status of W3C DOM tests that are part of the WebKit tests. 30563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 31563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse strict; 32563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse FindBin; 33563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse Cwd; 34563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse lib $FindBin::Bin; 35563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkuse webkitdirs; 36563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 37563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkchdirWebKit(); 38563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 39563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $verbose = $ARGV[0] && $ARGV[0] eq "-v"; 40563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 41563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $workingDir = getcwd(); 42563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $testDirectory = "$workingDir/LayoutTests"; 43563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 44563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy @suites = ( {"name" => "DOM Level 1 Core (html)", "directory" => "dom/html/level1/core"}, 45563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark {"name" => "DOM Level 2 Core (html)", "directory" => "dom/html/level2/core"}, 46563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark {"name" => "DOM Level 2 Events (html)", "directory" => "dom/html/level2/events"}, 47563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark {"name" => "DOM Level 2 HTML (html)", "directory" => "dom/html/level2/html"}, 48563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark {"name" => "DOM Level 1 Core (xhtml)", "directory" => "dom/xhtml/level1/core"}, 49563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark {"name" => "DOM Level 2 Core (xhtml)", "directory" => "dom/xhtml/level2/core"}, 50563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark {"name" => "DOM Level 2 Events (xhtml)", "directory" => "dom/xhtml/level2/events"}, 51563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark {"name" => "DOM Level 2 HTML (xhtml)", "directory" => "dom/xhtml/level2/html"}, 52563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark {"name" => "DOM Level 3 Core (xhtml)", "directory" => "dom/xhtml/level3/core"}, 53563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark {"name" => "DOM Level 3 XPath (svg)", "directory" => "dom/svg/level3/xpath"}); 54563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 55563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $totalCount = 0; 56563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $totalSuccesses = 0; 57563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $totalDisabled = 0; 58563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $totalFailed = 0; 59563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 60563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkforeach my $suite (@suites) { 61563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 62563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my %suite = %$suite; 63563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $directory = $suite{"directory"}; 64563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $name = $suite{"name"}; 65563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my @results = `find "${testDirectory}/${directory}" -name "*-expected.txt"`; 66563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my @disabled = `find "${testDirectory}/${directory}" -name "*-disabled"`; 67563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 68563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my @failures = (); 69563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $count = 0; 70563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 71563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark foreach my $result (@results) { 72563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $count++; 73563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $success = 0; 74563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark open RESULT, "<$result"; 75563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (<RESULT>) { 76563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (/Success/) { 77563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $success = 1; 78563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark last; 79563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 80563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 81563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark close RESULT; 82563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!$success) { 83563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark push @failures, $result; 84563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 85563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 86563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 87563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $disabledCount = (scalar @disabled); 88563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $failureCount = (scalar @failures); 89563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 90563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $count += $disabledCount; 91563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 92563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $successCount = $count - $failureCount - $disabledCount; 93563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $percentage = (sprintf "%.1f", ($successCount * 100.0 / $count)); 94563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 95563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ($percentage == 100) { 96563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print "${name}: all ${count} tests succeeded"; 97563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 98563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print "${name}: ${successCount} out of ${count} tests succeeded (${percentage}%)"; 99563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print " ($disabledCount disabled)" if $disabledCount; 101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print "\n"; 102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ($verbose) { 103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print "\n"; 104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (@disabled) { 105563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print " Disabled:\n"; 106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 107563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark foreach my $failure (sort @disabled) { 108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $failure =~ s|.*/||; 109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $failure =~ s|-disabled||; 110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print " ${directory}/${failure}"; 111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (@failures) { 114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print " Failed:\n"; 115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark foreach my $failure (sort @failures) { 117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $directory =~ m|^dom/(\w+)|; 118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark my $extension = $1; 119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $failure =~ s|.*/||; 120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $failure =~ s|-expected\.txt|.${extension}|; 121563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print " ${directory}/${failure}"; 122563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 123563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 124563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark print "\n"; 126563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 127563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 128563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $totalCount += $count; 129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $totalSuccesses += $successCount; 130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $totalDisabled += $disabledCount; 131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark $totalFailed += $failureCount; 132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 135563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $totalPercentage = (sprintf "%.1f", ($totalSuccesses * 100.0 / $totalCount)); 136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $totalDisabledPercentage = (sprintf "%.1f", ($totalDisabled * 100.0 / $totalCount)); 137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmy $totalFailedPercentage = (sprintf "%.1f", ($totalFailed * 100.0 / $totalCount)); 138563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkprint "Total: ${totalSuccesses} out of ${totalCount} tests succeeded (${totalPercentage}%)\n"; 140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkprint " ${totalDisabled} tests disabled (${totalDisabledPercentage}%)\n"; 141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkprint " ${totalFailed} tests failed (${totalFailedPercentage}%)\n"; 142