| #!/usr/bin/env perl |
| # |
| # Copyright (C) 2010 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. |
| |
| # Unit tests of VCSUtils::mergeChangeLogs(). |
| |
| use strict; |
| |
| use Test::Simple tests => 16; |
| use File::Temp qw(tempfile); |
| use VCSUtils; |
| |
| # Read contents of a file and return it. |
| sub readFile($) |
| { |
| my ($fileName) = @_; |
| |
| local $/; |
| open(FH, "<", $fileName); |
| my $content = <FH>; |
| close(FH); |
| |
| return $content; |
| } |
| |
| # Write a temporary file and return the filename. |
| sub writeTempFile($$$) |
| { |
| my ($name, $extension, $content) = @_; |
| |
| my ($FH, $fileName) = tempfile( |
| $name . "-XXXXXXXX", |
| DIR => ($ENV{'TMPDIR'} || $ENV{'TEMP'} || "/tmp"), |
| UNLINK => 0, |
| ); |
| print $FH $content; |
| close $FH; |
| |
| if ($extension) { |
| my $newFileName = $fileName . $extension; |
| rename($fileName, $newFileName); |
| $fileName = $newFileName; |
| } |
| |
| return $fileName; |
| } |
| |
| # -------------------------------------------------------------------------------- |
| |
| { |
| # New test |
| my $title = "mergeChangeLogs: traditional rejected patch success"; |
| |
| my $fileNewerContent = <<'EOF'; |
| 2010-01-29 Mark Rowe <mrowe@apple.com> |
| |
| Fix the Mac build. |
| |
| Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional". |
| |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| |
| Fix the ARM build. |
| EOF |
| my $fileNewer = writeTempFile("file", "", $fileNewerContent); |
| |
| my $fileMineContent = <<'EOF'; |
| *************** |
| *** 1,3 **** |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| --- 1,9 ---- |
| + 2010-01-29 Oliver Hunt <oliver@apple.com> |
| + |
| + Reviewed by Darin Adler. |
| + |
| + JSC is failing to propagate anonymous slot count on some transitions |
| + |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| EOF |
| my $fileMine = writeTempFile("file", ".rej", $fileMineContent); |
| rename($fileMine, $fileNewer . ".rej"); |
| $fileMine = $fileNewer . ".rej"; |
| |
| my $fileOlderContent = $fileNewerContent; |
| my $fileOlder = writeTempFile("file", ".orig", $fileOlderContent); |
| rename($fileOlder, $fileNewer . ".orig"); |
| $fileOlder = $fileNewer . ".orig"; |
| |
| my $exitStatus = mergeChangeLogs($fileMine, $fileOlder, $fileNewer); |
| |
| # mergeChangeLogs() should return 1 since the patch succeeded. |
| ok($exitStatus == 1, "$title: should return 1 for success"); |
| |
| ok(readFile($fileMine) eq $fileMineContent, "$title: \$fileMine should be unchanged"); |
| ok(readFile($fileOlder) eq $fileOlderContent, "$title: \$fileOlder should be unchanged"); |
| |
| my $expectedContent = <<'EOF'; |
| 2010-01-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| JSC is failing to propagate anonymous slot count on some transitions |
| |
| EOF |
| $expectedContent .= $fileNewerContent; |
| ok(readFile($fileNewer) eq $expectedContent, "$title: \$fileNewer should be updated to include patch"); |
| |
| unlink($fileMine, $fileOlder, $fileNewer); |
| } |
| |
| # -------------------------------------------------------------------------------- |
| |
| { |
| # New test |
| my $title = "mergeChangeLogs: traditional rejected patch failure"; |
| |
| my $fileNewerContent = <<'EOF'; |
| 2010-01-29 Mark Rowe <mrowe@apple.com> |
| |
| Fix the Mac build. |
| |
| Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional". |
| |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| |
| Fix the ARM build. |
| EOF |
| my $fileNewer = writeTempFile("file", "", $fileNewerContent); |
| |
| my $fileMineContent = <<'EOF'; |
| *************** |
| *** 1,9 **** |
| - 2010-01-29 Oliver Hunt <oliver@apple.com> |
| - |
| - Reviewed by Darin Adler. |
| - |
| - JSC is failing to propagate anonymous slot count on some transitions |
| - |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| --- 1,3 ---- |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| EOF |
| my $fileMine = writeTempFile("file", ".rej", $fileMineContent); |
| rename($fileMine, $fileNewer . ".rej"); |
| $fileMine = $fileNewer . ".rej"; |
| |
| my $fileOlderContent = $fileNewerContent; |
| my $fileOlder = writeTempFile("file", ".orig", $fileOlderContent); |
| rename($fileOlder, $fileNewer . ".orig"); |
| $fileOlder = $fileNewer . ".orig"; |
| |
| my $exitStatus = mergeChangeLogs($fileMine, $fileOlder, $fileNewer); |
| |
| # mergeChangeLogs() should return 0 since the patch failed. |
| ok($exitStatus == 0, "$title: should return 0 for failure"); |
| |
| ok(readFile($fileMine) eq $fileMineContent, "$title: \$fileMine should be unchanged"); |
| ok(readFile($fileOlder) eq $fileOlderContent, "$title: \$fileOlder should be unchanged"); |
| ok(readFile($fileNewer) eq $fileNewerContent, "$title: \$fileNewer should be unchanged"); |
| |
| unlink($fileMine, $fileOlder, $fileNewer); |
| } |
| |
| # -------------------------------------------------------------------------------- |
| |
| { |
| # New test |
| my $title = "mergeChangeLogs: patch succeeds"; |
| |
| my $fileMineContent = <<'EOF'; |
| 2010-01-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| JSC is failing to propagate anonymous slot count on some transitions |
| |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| |
| Fix the ARM build. |
| EOF |
| my $fileMine = writeTempFile("fileMine", "", $fileMineContent); |
| |
| my $fileOlderContent = <<'EOF'; |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| |
| Fix the ARM build. |
| EOF |
| my $fileOlder = writeTempFile("fileOlder", "", $fileOlderContent); |
| |
| my $fileNewerContent = <<'EOF'; |
| 2010-01-29 Mark Rowe <mrowe@apple.com> |
| |
| Fix the Mac build. |
| |
| Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional". |
| |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| |
| Fix the ARM build. |
| EOF |
| my $fileNewer = writeTempFile("fileNewer", "", $fileNewerContent); |
| |
| my $exitStatus = mergeChangeLogs($fileMine, $fileOlder, $fileNewer); |
| |
| # mergeChangeLogs() should return 1 since the patch succeeded. |
| ok($exitStatus == 1, "$title: should return 1 for success"); |
| |
| ok(readFile($fileMine) eq $fileMineContent, "$title: \$fileMine should be unchanged"); |
| ok(readFile($fileOlder) eq $fileOlderContent, "$title: \$fileOlder should be unchanged"); |
| |
| my $expectedContent = <<'EOF'; |
| 2010-01-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| JSC is failing to propagate anonymous slot count on some transitions |
| |
| EOF |
| $expectedContent .= $fileNewerContent; |
| |
| ok(readFile($fileNewer) eq $expectedContent, "$title: \$fileNewer should be patched"); |
| |
| unlink($fileMine, $fileOlder, $fileNewer); |
| } |
| |
| # -------------------------------------------------------------------------------- |
| |
| { |
| # New test |
| my $title = "mergeChangeLogs: patch fails"; |
| |
| my $fileMineContent = <<'EOF'; |
| 2010-01-29 Mark Rowe <mrowe@apple.com> |
| |
| Fix the Mac build. |
| |
| Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional". |
| |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| |
| Fix the ARM build. |
| EOF |
| my $fileMine = writeTempFile("fileMine", "", $fileMineContent); |
| |
| my $fileOlderContent = <<'EOF'; |
| 2010-01-29 Mark Rowe <mrowe@apple.com> |
| |
| Fix the Mac build. |
| |
| Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional". |
| |
| 2010-01-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| JSC is failing to propagate anonymous slot count on some transitions |
| |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| |
| Fix the ARM build. |
| EOF |
| my $fileOlder = writeTempFile("fileOlder", "", $fileOlderContent); |
| |
| my $fileNewerContent = <<'EOF'; |
| 2010-01-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| JSC is failing to propagate anonymous slot count on some transitions |
| |
| 2010-01-29 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Maciej Stachowiak. |
| |
| Fix the ARM build. |
| EOF |
| my $fileNewer = writeTempFile("fileNewer", "", $fileNewerContent); |
| |
| my $exitStatus = mergeChangeLogs($fileMine, $fileOlder, $fileNewer); |
| |
| # mergeChangeLogs() should return a non-zero exit status since the patch failed. |
| ok($exitStatus == 0, "$title: return non-zero exit status for failure"); |
| |
| ok(readFile($fileMine) eq $fileMineContent, "$title: \$fileMine should be unchanged"); |
| ok(readFile($fileOlder) eq $fileOlderContent, "$title: \$fileOlder should be unchanged"); |
| |
| # $fileNewer should still exist unchanged because the patch failed |
| ok(readFile($fileNewer) eq $fileNewerContent, "$title: \$fileNewer should be unchanged"); |
| |
| unlink($fileMine, $fileOlder, $fileNewer); |
| } |
| |
| # -------------------------------------------------------------------------------- |
| |