- add run-webkit-tests script; not working yet but the pieces are there
* Scripts/run-webkit-tests: Added.
* DumpRenderTree/DumpRenderTree.m: Added.
* DumpRenderTree/DumpRenderTree.xcode/.cvsignore: Added.
* DumpRenderTree/DumpRenderTree.xcode/project.pbxproj: Added.
* DumpRenderTree/DumpRenderTreePrefix.h: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@9281 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKitTools/Scripts/run-webkit-tests b/WebKitTools/Scripts/run-webkit-tests
new file mode 100755
index 0000000..a3fee27
--- /dev/null
+++ b/WebKitTools/Scripts/run-webkit-tests
@@ -0,0 +1,230 @@
+#!/usr/bin/perl -w
+
+# Script to run the Web Kit Open Source Project layout tests.
+
+use strict;
+use IPC::Open2;
+
+# Run all the tests passed in on the command line.
+# If no tests are passed, find all the .html, .xml, and .xhtml files in the test directory.
+
+# Run each text.
+# Compare against the existing file xxx-expected.txt.
+# If there is a mismatch, generate xxx-actual.txt and xxx-diffs.txt.
+
+# At the end, report:
+# the number of tests that got the expected results
+# the number of tests that ran, but did not get the expected results
+# the number of tests that failed to run
+# the number of tests that were run but had no expected results to compare against
+
+# Check that we're in the right directory.
+if (! -d "WebKitTools") {
+ if (-d "../WebKitTools") {
+ chdir ".." or die;
+ }
+ if (! -d "WebKitTools") {
+ die "No WebKitTools directory found. Please run this script from the directory containing WebKitTools.\n";
+ }
+}
+
+# Check that an Xcode product directory is set.
+open PRODUCT, "defaults read com.apple.Xcode PBXProductDirectory 2> /dev/null |" or die;
+my $productDir = <PRODUCT>;
+chomp $productDir;
+close PRODUCT;
+if (!$productDir) {
+ die "No product directory set. Please set the 'Place Build Products' preference to 'Customized location' in XCode Building Preferences.\n";
+}
+
+my $tool = "$productDir/DumpRenderTree";
+
+die "can't find executable DumpRenderTree tool (looked in $productDir)\n" if !-x $tool;
+
+my $WebCoreDirectory = "WebCore";
+my $testDirectory = "$WebCoreDirectory/layout-tests";
+my $testResultsDirectory = "/tmp/layout-test-results";
+my $testResults = "$testResultsDirectory/results.html";
+
+$ENV{"DYLD_FRAMEWORK_PATH"} = $productDir;
+
+my @tests;
+
+my $findArguments = "\\( -name resources \\! -prune \\) -or -name '*.html' -or -name '*.xml' -or -name '*.xhtml'";
+if (@ARGV) {
+ for my $test (@ARGV) {
+ $test =~ s/^$testDirectory\///;
+ if ($test =~ /^\//) {
+ print "can't run test outside $testDirectory\n";
+ } elsif (-f "$testDirectory/$test") {
+ if ($test !~ /\.(html|xml|xhtml)$/) {
+ print "test $test does not have an .html extension\n";
+ } else {
+ push @tests, $test;
+ }
+ } elsif (-d "$testDirectory/$test") {
+ push @tests, map { chomp; s-^$testDirectory/--; $_; } `find -s $testDirectory/$test $findArguments`;
+ } else {
+ print "test $test not found\n";
+ }
+ }
+} else {
+ @tests = map { chomp; s-^$testDirectory/--; $_; } `find -s $testDirectory $findArguments`;
+}
+
+die "no tests to run\n" if !@tests;
+
+my %counts;
+my %tests;
+my $count;
+
+open2(\*IN, \*OUT, $tool, "-") or die;
+
+$| = 1;
+
+for my $test (@tests) {
+ next if $test eq 'results.html';
+
+ my $base = $test;
+ $base =~ s/\.(html|xml|xhtml)$//;
+
+ print "running $base test";
+
+ my $result;
+
+ print OUT "$testDirectory/$test\n";
+
+ my $actual = "";
+ while (<IN>) {
+ last if /#EOF$/;
+ $actual .= $_;
+ }
+
+ my $expected;
+ if (open EXPECTED, "<", "$testDirectory/$base-expected.txt") {
+ $expected = "";
+ while (<EXPECTED>) {
+ $expected .= $_;
+ }
+ close EXPECTED;
+ }
+ if (!defined $expected) {
+ print " -> new test\n";
+ $result = "new";
+ open EXPECTED, ">", "$testDirectory/$base-expected.txt" or die "could not create $testDirectory/$base-expected.txt\n";
+ print EXPECTED $actual;
+ close EXPECTED;
+ unlink "$testResultsDirectory/$base-actual.txt";
+ unlink "$testResultsDirectory/$base-diffs.txt";
+ } elsif ($actual eq $expected) {
+ print " -> succeeded\n";
+ $result = "match";
+ unlink "$testResultsDirectory/$base-actual.txt";
+ unlink "$testResultsDirectory/$base-diffs.txt";
+ } else {
+ print " -> failed\n";
+ $result = "mismatch";
+ my $dir = "$testResultsDirectory/$base";
+ $dir =~ s|/[^/]+$||;
+ system "mkdir", "-p", $dir;
+ open ACTUAL, ">", "$testResultsDirectory/$base-actual.txt" or die;
+ print ACTUAL $actual;
+ close ACTUAL;
+ system "diff -u $testDirectory/$base-expected.txt $testResultsDirectory/$base-actual.txt > $testResultsDirectory/$base-diffs.txt";
+ }
+
+ $count += 1;
+ $counts{$result} += 1;
+ push @{$tests{$result}}, $test;
+}
+
+close IN;
+close OUT;
+
+my %text = (
+ match => "succeeded",
+ mismatch => "had incorrect layout",
+ new => "were new",
+ fail => "failed (tool did not execute successfully)",
+);
+
+print "\n";
+
+if ($counts{match} && $counts{match} == $count) {
+ print "all test cases succeeded\n";
+ unlink $testResults;
+} else {
+ for my $type ("match", "mismatch", "new", "fail") {
+ my $c = $counts{$type};
+ if ($c) {
+ my $t = $text{$type};
+ my $message;
+ if ($c == 1) {
+ $t =~ s/were/was/;
+ $message = sprintf "1 test case (%d%%) %s\n", 1 * 100 / $count, $t;
+ } else {
+ $message = sprintf "%d test cases (%d%%) %s\n", $c, $c * 100 / $count, $t;
+ }
+ $message =~ s-\(0%\)-(<1%)-;
+ print $message;
+ }
+ }
+
+ system "mkdir", "-p", $testResultsDirectory;
+
+ open HTML, ">", $testResults or die;
+ print HTML "<html>\n";
+ print HTML "<head>\n";
+ print HTML "<title>Layout Test Results</title>\n";
+ print HTML "</head>\n";
+ print HTML "<body>\n";
+
+ if ($counts{mismatch}) {
+ print HTML "<p>Tests where results did not match expected results:</p>\n";
+ print HTML "<table>\n";
+ for my $test (@{$tests{mismatch}}) {
+ my $base = $test;
+ $base =~ s/\.(html|xml|xhtml)$//;
+ print HTML "<tr>\n";
+ print HTML "<td><a href=\"$testDirectory/$test\">$base</a></td>\n";
+ print HTML "<td><a href=\"$testDirectory/$base-expected.txt\">expected</a></td>\n";
+ print HTML "<td><a href=\"$base-actual.txt\">actual</a></td>\n";
+ print HTML "<td><a href=\"$base-diffs.txt\">diffs</a></td>\n";
+ print HTML "</tr>\n";
+ }
+ print HTML "</table>\n";
+ }
+
+ if ($counts{fail}) {
+ print HTML "<p>Tests that caused the DumpRenderTree tool to fail:</p>\n";
+ print HTML "<table>\n";
+ for my $test (@{$tests{fail}}) {
+ my $base = $test;
+ $base =~ s/\.(html|xml|xhtml)$//;
+ print HTML "<tr>\n";
+ print HTML "<td><a href=\"$testDirectory/$test\">$base</a></td>\n";
+ print HTML "</tr>\n";
+ }
+ print HTML "</table>\n";
+ }
+
+ if ($counts{new}) {
+ print HTML "<p>Tests that had no expected results (probably new):</p>\n";
+ print HTML "<table>\n";
+ for my $test (@{$tests{new}}) {
+ my $base = $test;
+ $base =~ s/\.(html|xml|xhtml)$//;
+ print HTML "<tr>\n";
+ print HTML "<td><a href=\"$testDirectory/$test\">$base</a></td>\n";
+ print HTML "<td><a href=\"$testDirectory/$base-expected.txt\">results</a></td>\n";
+ print HTML "</tr>\n";
+ }
+ print HTML "</table>\n";
+ }
+
+ print HTML "</body>\n";
+ print HTML "</html>\n";
+ close HTML;
+
+ system "open", $testResults;
+}