summaryrefslogtreecommitdiffstats
path: root/Tools/Scripts/run-api-tests
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Scripts/run-api-tests')
-rwxr-xr-xTools/Scripts/run-api-tests339
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";
-}