diff options
Diffstat (limited to 'Tools/Scripts/run-api-tests')
-rwxr-xr-x | Tools/Scripts/run-api-tests | 339 |
1 files changed, 0 insertions, 339 deletions
diff --git a/Tools/Scripts/run-api-tests b/Tools/Scripts/run-api-tests deleted file mode 100755 index ca548fb0a..000000000 --- a/Tools/Scripts/run-api-tests +++ /dev/null @@ -1,339 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2010, 2011, 2012 Apple Inc. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS -# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -# THE POSSIBILITY OF SUCH DAMAGE. - -use strict; -use warnings; - -use File::Basename; -use FindBin; -use Getopt::Long qw(:config pass_through); -use IPC::Open3; -use lib $FindBin::Bin; -use webkitdirs; -use VCSUtils; - -sub buildTestTool(); -sub dumpTestsBySuite(\@); -sub listAllTests(); -sub runTest($$$); -sub runTestsBySuite(\@$); -sub prepareEnvironmentForRunningTestTool(); -sub testToolPath(); - -# Defined in VCSUtils. -sub possiblyColored($$); - -# Timeout for individual test, in sec -my $timeout = 10; - -my $showHelp = 0; -my $verbose = 0; -my $dumpTests = 0; -my $build = 1; -my $root; -my $buildDefault = $build ? "build" : "do not build"; -my @testsFailed; -my @testsTimedOut; - -my $programName = basename($0); -my $usage = <<EOF; -Usage: $programName [options] [suite or test prefixes] - --help Show this help message - -v|--verbose Verbose output - -d|--dump-tests Dump the names of testcases without running them - --[no-]build Build (or do not build) unit tests prior to running (default: $buildDefault) - --root= Path to the pre-built root containing TestWebKitAPI -EOF - -GetOptions( - 'help' => \$showHelp, - 'verbose|v' => \$verbose, - 'dump|d' => \$dumpTests, - 'build!' => \$build, - 'root=s' => \$root -); - -if ($showHelp) { - print STDERR $usage; - exit 1; -} - -setConfiguration(); - -setConfigurationProductDir(Cwd::abs_path($root)) if (defined($root)); - -buildTestTool() if $build && !defined($root); -setPathForRunningWebKitApp(\%ENV); -my @testsToRun = listAllTests(); - -@testsToRun = grep { my $test = $_; grep { $test =~ m/^\Q$_\E/ } @ARGV; } @testsToRun if @ARGV; - -if ($dumpTests) { - dumpTestsBySuite(@testsToRun); - exit 0; -} - -exit runTestsBySuite(@testsToRun, $verbose); - -sub isSupportedPlatform() -{ - return isAppleMacWebKit() || isAppleWinWebKit(); -} - -sub dumpTestsBySuite(\@) -{ - my ($tests) = @_; - print "Dumping test cases\n"; - print "------------------\n"; - my $lastSuite = ""; - for my $suiteAndTest (sort @$tests) { - my ($suite, $test) = split(/\./, $suiteAndTest); - if ($lastSuite ne $suite) { - $lastSuite = $suite; - print "$suite:\n"; - } - print " $test\n"; - } - print "------------------\n"; -} - -sub runTestsBySuite(\@$) -{ - my ($tests, $verbose) = @_; - my $anyFailures = 0; - my $lastSuite = ""; - for my $suiteAndTest (sort @$tests) { - my ($suite, $test) = split(/\./, $suiteAndTest); - if ($lastSuite ne $suite) { - $lastSuite = $suite; - print "Suite: $suite\n" unless $verbose; - } - my $failed = runTest($suite, $test, $verbose); - $anyFailures ||= $failed; - } - - if ($verbose) { - if (@testsFailed) { - print "Tests that failed:\n"; - for my $test (@testsFailed) { - print " $test\n"; - } - } - if (@testsTimedOut) { - print "Tests that timed out:\n"; - for my $test (@testsTimedOut) { - print " $test\n"; - } - } - } - return $anyFailures; -} - -sub runTest($$$) -{ - my ($suite, $testName, $verbose) = @_; - my $test = $suite . "." . $testName; - - my $gtestArg = "--gtest_filter=" . $test; - - print " Test: $testName -> " unless $verbose; - - my $result = 0; - my $timedOut = 0; - - die "run-api-tests is not supported on this platform.\n" unless isSupportedPlatform(); - - prepareEnvironmentForRunningTestTool(); - - local *DEVNULL; - my ($childIn, $childOut, $childErr); - if ($verbose) { - $childOut = ">&STDERR"; - $childErr = ">&STDERR"; - } else { - open(DEVNULL, ">", File::Spec->devnull()) or die "Failed to open /dev/null"; - $childOut = ">&DEVNULL"; - $childErr = ">&DEVNULL"; - } - - my $pid; - if (isAppleMacWebKit() && architecture()) { - $pid = open3($childIn, $childOut, $childErr, "arch", "-" . architecture(), testToolPath(), $gtestArg, @ARGV) or die "Failed to run test: $test."; - } else { - $pid = open3($childIn, $childOut, $childErr, testToolPath(), $gtestArg, @ARGV) or die "Failed to run test: $test."; - } - - close($childIn); - close($childOut); - close($childErr); - close(DEVNULL) unless ($verbose); - eval { - local $SIG{ALRM} = sub { die "alarm\n" }; - alarm $timeout; - waitpid($pid, 0); - alarm 0; - $result = $?; - }; - if ($@) { - die unless $@ eq "alarm\n"; - kill SIGTERM, $pid or kill SIGKILL, $pid; - $timedOut = 1; - } - - if ($result) { - push @testsFailed, $test; - } - if ($timedOut) { - push @testsTimedOut, $test; - print possiblyColored("bold yellow", "Timeout"), "\n"; - } elsif (!$verbose) { - if ($result) { - print possiblyColored("bold red", "Failed"), "\n"; - } else { - print possiblyColored("bold green", "Passed"), "\n"; - } - } - - return $timedOut || $result; -} - -sub listAllTests() -{ - my @toolOutput; - my $timedOut; - - die "run-api-tests is not supported on this platform.\n" unless isSupportedPlatform(); - - prepareEnvironmentForRunningTestTool(); - - local *DEVNULL; - my ($childIn, $childOut, $childErr); - if ($verbose) { - $childErr = ">&STDERR"; - } else { - open(DEVNULL, ">", File::Spec->devnull()) or die "Failed to open /dev/null"; - $childErr = ">&DEVNULL"; - } - - my $pid; - if (isAppleMacWebKit() && architecture()) { - $pid = open3($childIn, $childOut, $childErr, "arch", "-" . architecture(), testToolPath(), "--gtest_list_tests") or die "Failed to build list of tests!"; - } else { - $pid = open3($childIn, $childOut, $childErr, testToolPath(), "--gtest_list_tests") or die "Failed to build list of tests!"; - } - - close($childIn); - @toolOutput = <$childOut>; - close($childOut); - close($childErr); - close(DEVNULL) unless ($verbose); - - waitpid($pid, 0); - my $result = $?; - - if ($result) { - print STDERR "Failed to build list of tests!\n"; - exit exitStatus($result); - } - - my @tests = (); - my $suite; - for my $line (@toolOutput) { - $line =~ s/[\r\n]*$//; - if ($line =~ m/\.$/) { - $suite = $line; # "SuiteName." - } else { - # Disabling WebKit2 API test on Windows since we will be disabling WebKit2 on Windows. - next if (isAppleWinWebKit() && $suite =~ m/WebKit2*/); - $line =~ s/^\s*//; # "TestName" - push @tests, $suite . $line; # "SuiteName.TestName" - } - } - - return @tests; -} - -sub buildTestTool() -{ - my $originalCwd = getcwd(); - - chdirWebKit(); - - my $buildTestTool = "build-api-tests"; - print STDERR "Running $buildTestTool\n"; - - local *DEVNULL; - my ($childIn, $childOut, $childErr); - if ($verbose) { - # When not quiet, let the child use our stdout/stderr. - $childOut = ">&STDOUT"; - $childErr = ">&STDERR"; - } else { - open(DEVNULL, ">", File::Spec->devnull()) or die "Failed to open /dev/null"; - $childOut = ">&DEVNULL"; - $childErr = ">&DEVNULL"; - } - - my @args = argumentsForConfiguration(); - my $pathToBuildTestTool = File::Spec->catfile("Tools", "Scripts", $buildTestTool); - my $buildProcess = open3($childIn, $childOut, $childErr, "perl", $pathToBuildTestTool, @args) or die "Failed to run " . $buildTestTool; - - close($childIn); - close($childOut); - close($childErr); - close(DEVNULL) unless ($verbose); - - waitpid($buildProcess, 0); - my $buildResult = $?; - - if ($buildResult) { - print STDERR "Compiling TestWebKitAPI failed!\n"; - exit exitStatus($buildResult); - } - - chdir $originalCwd; -} - -sub prepareEnvironmentForRunningTestTool() -{ - return unless isAppleMacWebKit(); - - $ENV{DYLD_FRAMEWORK_PATH} = productDir(); - $ENV{WEBKIT_UNSET_DYLD_FRAMEWORK_PATH} = "YES"; -} - -sub testToolPath() -{ - my $path = File::Spec->catfile(productDir(), "TestWebKitAPI"); - return $path unless isAppleWinWebKit(); - - my $suffix; - if (configurationForVisualStudio() eq "Debug_All") { - $suffix = "_debug"; - } else { - $suffix = ""; - } - return "$path$suffix.exe"; -} |