diff -r 000000000000 -r 4f2f89ce4247 WebKitTools/Scripts/run-iexploder-tests --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebKitTools/Scripts/run-iexploder-tests Fri Sep 17 09:02:29 2010 +0300 @@ -0,0 +1,143 @@ +#!/usr/bin/perl + +# Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) +# +# 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. +# 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY APPLE 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 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. + +# A script to semi-automatically run iExploder tests. + +use strict; +use warnings; + +use Cwd; +use File::Spec; +use FindBin; +use Getopt::Long; +use IPC::Open2; + +use lib $FindBin::Bin; +use webkitperl::httpd; +use webkitdirs; + +sub configureAndOpenHTTPDIfNeeded(); +sub runSafariWithIExploder(); + +# Argument handling +my $guardMalloc = ''; +my $httpdPort = 8000; +my $downloadTest; +my $iExploderTestDirectory = "/tmp/iExploderTest"; + +GetOptions( + 'guard-malloc|g' => \$guardMalloc, + 'get=s' => \$downloadTest, + 'port=i' => \$httpdPort +); + + +setConfiguration(); +my $productDir = productDir(); + +chdirWebKit(); + +checkFrameworks(); + +my $isHttpdOpen = 0; +configureAndOpenHTTPDIfNeeded(); + +if ($downloadTest) { + system "/usr/bin/curl -o ~/Desktop/iexploder$downloadTest.html \"http://127.0.0.1:$httpdPort/iexploder.cgi?lookup=1&test=$downloadTest\""; + print "Saved the test as iexploder$downloadTest.html on the desktop\n"; +} else { + runSafariWithIExploder(); + print "Last generated tests:\n"; + system "grep 'iexploder.cgi' $iExploderTestDirectory/access_log.txt | tail -n -5 | awk -F'[ =&\\?]' '{if (\$8 == \"lookup\") print \$11; else print \$9}'"; +} + +rmtree $iExploderTestDirectory; +$isHttpdOpen = !closeHTTPD(); + +sub runSafariWithIExploder() +{ + my $redirectTo; + if (@ARGV) { + $redirectTo = "http://127.0.0.1:$httpdPort/iexploder.cgi?lookup=1&test=$ARGV[0]"; + } else { + $redirectTo = "http://127.0.0.1:$httpdPort/index.html"; + } + + open REDIRECT_HTML, ">", "$iExploderTestDirectory/redirect.html" or die; + print REDIRECT_HTML "\n"; + print REDIRECT_HTML "
\n"; + print REDIRECT_HTML " \n"; + print REDIRECT_HTML " \n"; + print REDIRECT_HTML " \n"; + print REDIRECT_HTML " \n"; + print REDIRECT_HTML " \n"; + print REDIRECT_HTML "\n"; + close REDIRECT_HTML; + + if (!isAppleWebKit()) { + system "WebKitTools/Scripts/run-launcher", "$iExploderTestDirectory/redirect.html"; + } else { + local %ENV; + $ENV{DYLD_INSERT_LIBRARIES} = "/usr/lib/libgmalloc.dylib" if $guardMalloc; + system "WebKitTools/Scripts/run-safari", "-NSOpen", "$iExploderTestDirectory/redirect.html"; + } +} + +sub configureAndOpenHTTPDIfNeeded() +{ + return if $isHttpdOpen; + mkdir $iExploderTestDirectory; + my $httpdPath = getHTTPDPath(); + my $webkitDirectory = getcwd(); + my $testDirectory = $webkitDirectory . "/LayoutTests"; + my $iExploderDirectory = $webkitDirectory . "/WebKitTools/iExploder"; + + my $httpdConfig = getHTTPDConfigPathForTestDirectory($testDirectory); + + my $documentRoot = "$iExploderDirectory/htdocs"; + my $typesConfig = "$testDirectory/http/conf/mime.types"; + my $sslCertificate = "$testDirectory/http/conf/webkit-httpd.pem"; + my $listen = "127.0.0.1:$httpdPort"; + + + my @args = ( + "-f", "$httpdConfig", + "-C", "DocumentRoot \"$documentRoot\"", + "-C", "Listen $listen", + "-c", "TypesConfig \"$typesConfig\"", + "-c", "CustomLog \"$iExploderTestDirectory/access_log.txt\" common", + "-c", "ErrorLog \"$iExploderTestDirectory/error_log.txt\"", + "-c", "SSLCertificateFile \"$sslCertificate\"", + # Apache wouldn't run CGIs with permissions==700 otherwise + "-c", "User \"#$<\"" + ); + + $isHttpdOpen = openHTTPD(@args); +}