WebKitTools/Scripts/webkitperl/VCSUtils_unittest/mergeChangeLogs.pl
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 #!/usr/bin/perl
       
     2 #
       
     3 # Copyright (C) 2010 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 # 1.  Redistributions of source code must retain the above copyright
       
     9 #     notice, this list of conditions and the following disclaimer.
       
    10 # 2.  Redistributions in binary form must reproduce the above copyright
       
    11 #     notice, this list of conditions and the following disclaimer in the
       
    12 #     documentation and/or other materials provided with the distribution.
       
    13 # 
       
    14 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
       
    15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
    16 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
       
    17 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
       
    18 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
       
    19 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
       
    20 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
       
    21 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    22 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
       
    23 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    24 
       
    25 # Unit tests of VCSUtils::mergeChangeLogs().
       
    26 
       
    27 use strict;
       
    28 
       
    29 use Test::Simple tests => 16;
       
    30 use File::Temp qw(tempfile);
       
    31 use VCSUtils;
       
    32 
       
    33 # Read contents of a file and return it.
       
    34 sub readFile($)
       
    35 {
       
    36     my ($fileName) = @_;
       
    37 
       
    38     local $/;
       
    39     open(FH, "<", $fileName);
       
    40     my $content = <FH>;
       
    41     close(FH);
       
    42 
       
    43     return $content;
       
    44 }
       
    45 
       
    46 # Write a temporary file and return the filename.
       
    47 sub writeTempFile($$$)
       
    48 {
       
    49     my ($name, $extension, $content) = @_;
       
    50 
       
    51     my ($FH, $fileName) = tempfile(
       
    52         $name . "-XXXXXXXX",
       
    53         DIR => ($ENV{'TMPDIR'} || "/tmp"),
       
    54         UNLINK => 0,
       
    55     );
       
    56     print $FH $content;
       
    57     close $FH;
       
    58 
       
    59     if ($extension) {
       
    60         my $newFileName = $fileName . $extension;
       
    61         rename($fileName, $newFileName);
       
    62         $fileName = $newFileName;
       
    63     }
       
    64 
       
    65     return $fileName;
       
    66 }
       
    67 
       
    68 # --------------------------------------------------------------------------------
       
    69 
       
    70 {
       
    71     # New test
       
    72     my $title = "mergeChangeLogs: traditional rejected patch success";
       
    73 
       
    74     my $fileNewerContent = <<'EOF';
       
    75 2010-01-29  Mark Rowe  <mrowe@apple.com>
       
    76 
       
    77         Fix the Mac build.
       
    78 
       
    79         Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional".
       
    80 
       
    81 2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
    82 
       
    83         Rubber-stamped by Maciej Stachowiak.
       
    84 
       
    85         Fix the ARM build.
       
    86 EOF
       
    87     my $fileNewer = writeTempFile("file", "", $fileNewerContent);
       
    88 
       
    89     my $fileMineContent = <<'EOF';
       
    90 ***************
       
    91 *** 1,3 ****
       
    92   2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
    93   
       
    94           Rubber-stamped by Maciej Stachowiak.
       
    95 --- 1,9 ----
       
    96 + 2010-01-29  Oliver Hunt  <oliver@apple.com>
       
    97 + 
       
    98 +         Reviewed by Darin Adler.
       
    99 + 
       
   100 +         JSC is failing to propagate anonymous slot count on some transitions
       
   101 + 
       
   102   2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   103   
       
   104           Rubber-stamped by Maciej Stachowiak.
       
   105 EOF
       
   106     my $fileMine = writeTempFile("file", ".rej", $fileMineContent);
       
   107     rename($fileMine, $fileNewer . ".rej");
       
   108     $fileMine = $fileNewer . ".rej";
       
   109 
       
   110     my $fileOlderContent = $fileNewerContent;
       
   111     my $fileOlder = writeTempFile("file", ".orig", $fileOlderContent);
       
   112     rename($fileOlder, $fileNewer . ".orig");
       
   113     $fileOlder = $fileNewer . ".orig";
       
   114 
       
   115     my $exitStatus = mergeChangeLogs($fileMine, $fileOlder, $fileNewer);
       
   116 
       
   117     # mergeChangeLogs() should return 1 since the patch succeeded.
       
   118     ok($exitStatus == 1, "$title: should return 1 for success");
       
   119 
       
   120     ok(readFile($fileMine) eq $fileMineContent, "$title: \$fileMine should be unchanged");
       
   121     ok(readFile($fileOlder) eq $fileOlderContent, "$title: \$fileOlder should be unchanged");
       
   122 
       
   123     my $expectedContent = <<'EOF';
       
   124 2010-01-29  Oliver Hunt  <oliver@apple.com>
       
   125 
       
   126         Reviewed by Darin Adler.
       
   127 
       
   128         JSC is failing to propagate anonymous slot count on some transitions
       
   129 
       
   130 EOF
       
   131     $expectedContent .= $fileNewerContent;
       
   132     ok(readFile($fileNewer) eq $expectedContent, "$title: \$fileNewer should be updated to include patch");
       
   133 
       
   134     unlink($fileMine, $fileOlder, $fileNewer);
       
   135 }
       
   136 
       
   137 # --------------------------------------------------------------------------------
       
   138 
       
   139 {
       
   140     # New test
       
   141     my $title = "mergeChangeLogs: traditional rejected patch failure";
       
   142 
       
   143     my $fileNewerContent = <<'EOF';
       
   144 2010-01-29  Mark Rowe  <mrowe@apple.com>
       
   145 
       
   146         Fix the Mac build.
       
   147 
       
   148         Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional".
       
   149 
       
   150 2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   151 
       
   152         Rubber-stamped by Maciej Stachowiak.
       
   153 
       
   154         Fix the ARM build.
       
   155 EOF
       
   156     my $fileNewer = writeTempFile("file", "", $fileNewerContent);
       
   157 
       
   158     my $fileMineContent = <<'EOF';
       
   159 ***************
       
   160 *** 1,9 ****
       
   161 - 2010-01-29  Oliver Hunt  <oliver@apple.com>
       
   162 - 
       
   163 -         Reviewed by Darin Adler.
       
   164 - 
       
   165 -         JSC is failing to propagate anonymous slot count on some transitions
       
   166 - 
       
   167   2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   168   
       
   169           Rubber-stamped by Maciej Stachowiak.
       
   170 --- 1,3 ----
       
   171   2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   172   
       
   173           Rubber-stamped by Maciej Stachowiak.
       
   174 EOF
       
   175     my $fileMine = writeTempFile("file", ".rej", $fileMineContent);
       
   176     rename($fileMine, $fileNewer . ".rej");
       
   177     $fileMine = $fileNewer . ".rej";
       
   178 
       
   179     my $fileOlderContent = $fileNewerContent;
       
   180     my $fileOlder = writeTempFile("file", ".orig", $fileOlderContent);
       
   181     rename($fileOlder, $fileNewer . ".orig");
       
   182     $fileOlder = $fileNewer . ".orig";
       
   183 
       
   184     my $exitStatus = mergeChangeLogs($fileMine, $fileOlder, $fileNewer);
       
   185 
       
   186     # mergeChangeLogs() should return 0 since the patch failed.
       
   187     ok($exitStatus == 0, "$title: should return 0 for failure");
       
   188 
       
   189     ok(readFile($fileMine) eq $fileMineContent, "$title: \$fileMine should be unchanged");
       
   190     ok(readFile($fileOlder) eq $fileOlderContent, "$title: \$fileOlder should be unchanged");
       
   191     ok(readFile($fileNewer) eq $fileNewerContent, "$title: \$fileNewer should be unchanged");
       
   192 
       
   193     unlink($fileMine, $fileOlder, $fileNewer);
       
   194 }
       
   195 
       
   196 # --------------------------------------------------------------------------------
       
   197 
       
   198 {
       
   199     # New test
       
   200     my $title = "mergeChangeLogs: patch succeeds";
       
   201 
       
   202     my $fileMineContent = <<'EOF';
       
   203 2010-01-29  Oliver Hunt  <oliver@apple.com>
       
   204 
       
   205         Reviewed by Darin Adler.
       
   206 
       
   207         JSC is failing to propagate anonymous slot count on some transitions
       
   208 
       
   209 2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   210 
       
   211         Rubber-stamped by Maciej Stachowiak.
       
   212 
       
   213         Fix the ARM build.
       
   214 EOF
       
   215     my $fileMine = writeTempFile("fileMine", "", $fileMineContent);
       
   216 
       
   217     my $fileOlderContent = <<'EOF';
       
   218 2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   219 
       
   220         Rubber-stamped by Maciej Stachowiak.
       
   221 
       
   222         Fix the ARM build.
       
   223 EOF
       
   224     my $fileOlder = writeTempFile("fileOlder", "", $fileOlderContent);
       
   225 
       
   226     my $fileNewerContent = <<'EOF';
       
   227 2010-01-29  Mark Rowe  <mrowe@apple.com>
       
   228 
       
   229         Fix the Mac build.
       
   230 
       
   231         Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional".
       
   232 
       
   233 2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   234 
       
   235         Rubber-stamped by Maciej Stachowiak.
       
   236 
       
   237         Fix the ARM build.
       
   238 EOF
       
   239     my $fileNewer = writeTempFile("fileNewer", "", $fileNewerContent);
       
   240 
       
   241     my $exitStatus = mergeChangeLogs($fileMine, $fileOlder, $fileNewer);
       
   242 
       
   243     # mergeChangeLogs() should return 1 since the patch succeeded.
       
   244     ok($exitStatus == 1, "$title: should return 1 for success");
       
   245 
       
   246     ok(readFile($fileMine) eq $fileMineContent, "$title: \$fileMine should be unchanged");
       
   247     ok(readFile($fileOlder) eq $fileOlderContent, "$title: \$fileOlder should be unchanged");
       
   248 
       
   249     my $expectedContent = <<'EOF';
       
   250 2010-01-29  Oliver Hunt  <oliver@apple.com>
       
   251 
       
   252         Reviewed by Darin Adler.
       
   253 
       
   254         JSC is failing to propagate anonymous slot count on some transitions
       
   255 
       
   256 EOF
       
   257     $expectedContent .= $fileNewerContent;
       
   258 
       
   259     ok(readFile($fileNewer) eq $expectedContent, "$title: \$fileNewer should be patched");
       
   260 
       
   261     unlink($fileMine, $fileOlder, $fileNewer);
       
   262 }
       
   263 
       
   264 # --------------------------------------------------------------------------------
       
   265 
       
   266 {
       
   267     # New test
       
   268     my $title = "mergeChangeLogs: patch fails";
       
   269 
       
   270     my $fileMineContent = <<'EOF';
       
   271 2010-01-29  Mark Rowe  <mrowe@apple.com>
       
   272 
       
   273         Fix the Mac build.
       
   274 
       
   275         Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional".
       
   276 
       
   277 2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   278 
       
   279         Rubber-stamped by Maciej Stachowiak.
       
   280 
       
   281         Fix the ARM build.
       
   282 EOF
       
   283     my $fileMine = writeTempFile("fileMine", "", $fileMineContent);
       
   284 
       
   285     my $fileOlderContent = <<'EOF';
       
   286 2010-01-29  Mark Rowe  <mrowe@apple.com>
       
   287 
       
   288         Fix the Mac build.
       
   289 
       
   290         Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional".
       
   291 
       
   292 2010-01-29  Oliver Hunt  <oliver@apple.com>
       
   293 
       
   294         Reviewed by Darin Adler.
       
   295 
       
   296         JSC is failing to propagate anonymous slot count on some transitions
       
   297 
       
   298 2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   299 
       
   300         Rubber-stamped by Maciej Stachowiak.
       
   301 
       
   302         Fix the ARM build.
       
   303 EOF
       
   304     my $fileOlder = writeTempFile("fileOlder", "", $fileOlderContent);
       
   305 
       
   306     my $fileNewerContent = <<'EOF';
       
   307 2010-01-29  Oliver Hunt  <oliver@apple.com>
       
   308 
       
   309         Reviewed by Darin Adler.
       
   310 
       
   311         JSC is failing to propagate anonymous slot count on some transitions
       
   312 
       
   313 2010-01-29  Simon Hausmann  <simon.hausmann@nokia.com>
       
   314 
       
   315         Rubber-stamped by Maciej Stachowiak.
       
   316 
       
   317         Fix the ARM build.
       
   318 EOF
       
   319     my $fileNewer = writeTempFile("fileNewer", "", $fileNewerContent);
       
   320 
       
   321     my $exitStatus = mergeChangeLogs($fileMine, $fileOlder, $fileNewer);
       
   322 
       
   323     # mergeChangeLogs() should return a non-zero exit status since the patch failed.
       
   324     ok($exitStatus == 0, "$title: return non-zero exit status for failure");
       
   325 
       
   326     ok(readFile($fileMine) eq $fileMineContent, "$title: \$fileMine should be unchanged");
       
   327     ok(readFile($fileOlder) eq $fileOlderContent, "$title: \$fileOlder should be unchanged");
       
   328 
       
   329     # $fileNewer should still exist unchanged because the patch failed
       
   330     ok(readFile($fileNewer) eq $fileNewerContent, "$title: \$fileNewer should be unchanged");
       
   331 
       
   332     unlink($fileMine, $fileOlder, $fileNewer);
       
   333 }
       
   334 
       
   335 # --------------------------------------------------------------------------------
       
   336