WebKitTools/Scripts/make-script-test-wrappers
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 #!/usr/bin/perl -w
       
     2 
       
     3 # Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
       
     4 #
       
     5 # Redistribution and use in source and binary forms, with or without
       
     6 # modification, are permitted provided that the following conditions
       
     7 # are met:
       
     8 #
       
     9 # 1.  Redistributions of source code must retain the above copyright
       
    10 #     notice, this list of conditions and the following disclaimer. 
       
    11 # 2.  Redistributions in binary form must reproduce the above copyright
       
    12 #     notice, this list of conditions and the following disclaimer in the
       
    13 #     documentation and/or other materials provided with the distribution. 
       
    14 # 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
       
    15 #     its contributors may be used to endorse or promote products derived
       
    16 #     from this software without specific prior written permission. 
       
    17 #
       
    18 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
       
    19 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
    20 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
       
    21 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
       
    22 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
       
    23 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
       
    24 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
       
    25 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
       
    27 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    28 
       
    29 # Script to generate HTML wrappers for JavaScript tests from templates
       
    30 
       
    31 use strict;
       
    32 
       
    33 use FindBin;
       
    34 use lib $FindBin::Bin;
       
    35 
       
    36 use File::Basename;
       
    37 use File::Find;
       
    38 use Getopt::Long;
       
    39 use webkitdirs;
       
    40 
       
    41 sub directoryFilter;
       
    42 sub findTemplateFiles(@);
       
    43 
       
    44 my $showHelp;
       
    45 
       
    46 my $result = GetOptions(
       
    47     "help"       => \$showHelp,
       
    48 );
       
    49 
       
    50 if (!$result || $showHelp) {
       
    51     print STDERR basename($0) . " [-h|--help] [path ...]\n";
       
    52     exit 1;
       
    53 }
       
    54 
       
    55 setConfiguration();
       
    56 my $productDir = productDir();
       
    57 
       
    58 chdirWebKit();
       
    59 
       
    60 my @templates = findTemplateFiles(@ARGV);
       
    61 
       
    62 for my $tfile (@templates) {
       
    63 
       
    64     my $tpath = $tfile;
       
    65     my $templateDirectory;
       
    66     my $templateRelativePath;
       
    67     if ($tpath =~ s:/(script-tests)/TEMPLATE.html$::) {
       
    68         $templateDirectory = $1;
       
    69         $templateRelativePath = $1 . "/TEMPLATE.html";
       
    70     } else {
       
    71         print "Inappropriate position of a template: ${tpath}\n";
       
    72         next;
       
    73     }
       
    74 
       
    75     print "${tpath}\n";
       
    76 
       
    77     chdirWebKit();
       
    78     chdir($tpath);
       
    79 
       
    80     my @files;
       
    81     my $fileFilter = sub {
       
    82         push @files, $File::Find::name if substr($_, -3) eq ".js";
       
    83     };
       
    84     find({ preprocess => \&directoryFilter, wanted => $fileFilter }, $templateDirectory);
       
    85 
       
    86     open TEMPLATE, "<${templateRelativePath}";
       
    87     my $template = do { local $/; <TEMPLATE> };
       
    88     close TEMPLATE;
       
    89 
       
    90     my $templateNegative = $template;
       
    91     if (-e "${templateDirectory}/TEMPLATE-n.html") {
       
    92         open TEMPLATE, "<${templateDirectory}/TEMPLATE-n.html";
       
    93         $templateNegative = do { local $/; <TEMPLATE> };
       
    94         close TEMPLATE;
       
    95     }
       
    96 
       
    97     for my $file (@files) {
       
    98         my $html = $file;
       
    99         $html =~ s:${templateDirectory}/(.*)\.js:$1.html:;
       
   100         next if -f "$html-disabled";
       
   101 
       
   102         system("cat ${file} | tr '\\0' ' ' | grep -q 'successfullyParsed ='");
       
   103         if ($? != 0) {
       
   104             `echo "" >> "${file}"`;
       
   105             `echo "var successfullyParsed = true;" >> "${file}"`;
       
   106         }
       
   107         
       
   108         print "    ${html}\n";
       
   109         open HTML, ">$html";
       
   110         my $output = ($file =~ /-n\.js/) ? $templateNegative : $template;
       
   111         $output =~ s:YOUR_JS_FILE_HERE:$file:;
       
   112         print HTML $output;
       
   113         
       
   114         close HTML;
       
   115     }
       
   116 }
       
   117 
       
   118 exit 0;
       
   119 
       
   120 sub directoryFilter
       
   121 {
       
   122     return () if basename($File::Find::dir) eq ".svn";
       
   123     return @_;
       
   124 }
       
   125 
       
   126 sub findTemplateFiles(@) {
       
   127     my @args = @_;
       
   128     my @templateFiles;
       
   129 
       
   130     push @args, "LayoutTests" if scalar(@args) == 0;
       
   131 
       
   132     my @paths = map { -f $_ ? dirname($_) : $_ } @args;
       
   133 
       
   134     my $fileFilter = sub {
       
   135         push @templateFiles, $File::Find::name if $_ eq "TEMPLATE.html";
       
   136     };
       
   137 
       
   138     find({ preprocess => \&directoryFilter, wanted => $fileFilter }, @paths);
       
   139 
       
   140     return @templateFiles;
       
   141 }