| #!/usr/bin/env perl |
| # |
| # Copyright (C) 2009, 2010 Chris Jerdonek (chris.jerdonek@gmail.com) |
| # Copyright (C) Research In Motion 2010. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are |
| # met: |
| # |
| # * Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # * 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. |
| # * Neither the name of Google Inc. 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT |
| # OWNER OR 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::fixChangeLogPatch(). |
| |
| use strict; |
| use warnings; |
| |
| use Test::More; |
| use VCSUtils; |
| |
| # The source ChangeLog for these tests is the following: |
| # |
| # 2009-12-22 Alice <alice@email.address> |
| # |
| # Reviewed by Ray. |
| # |
| # Changed some code on 2009-12-22. |
| # |
| # * File: |
| # * File2: |
| # |
| # 2009-12-21 Alice <alice@email.address> |
| # |
| # Reviewed by Ray. |
| # |
| # Changed some code on 2009-12-21. |
| # |
| # * File: |
| # * File2: |
| |
| my @testCaseHashRefs = ( |
| { # New test |
| diffName => "fixChangeLogPatch: [no change] In-place change.", |
| inputText => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,5 +1,5 @@ |
| 2010-12-22 Bob <bob@email.address> |
| |
| - Reviewed by Sue. |
| + Reviewed by Ray. |
| |
| Changed some code on 2010-12-22. |
| END |
| expectedReturn => { |
| patch => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,5 +1,5 @@ |
| 2010-12-22 Bob <bob@email.address> |
| |
| - Reviewed by Sue. |
| + Reviewed by Ray. |
| |
| Changed some code on 2010-12-22. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: [no change] Remove first entry.", |
| inputText => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,11 +1,3 @@ |
| -2010-12-22 Bob <bob@email.address> |
| - |
| - Reviewed by Ray. |
| - |
| - Changed some code on 2010-12-22. |
| - |
| - * File: |
| - |
| 2010-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| expectedReturn => { |
| patch => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,11 +1,3 @@ |
| -2010-12-22 Bob <bob@email.address> |
| - |
| - Reviewed by Ray. |
| - |
| - Changed some code on 2010-12-22. |
| - |
| - * File: |
| - |
| 2010-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: [no change] Remove entry in the middle.", |
| inputText => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@@ -7,10 +7,6 @@ |
| |
| * File: |
| |
| -2010-12-22 Bob <bob@email.address> |
| - |
| - Changed some code on 2010-12-22. |
| - |
| 2010-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| expectedReturn => { |
| patch => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@@ -7,10 +7,6 @@ |
| |
| * File: |
| |
| -2010-12-22 Bob <bob@email.address> |
| - |
| - Changed some code on 2010-12-22. |
| - |
| 2010-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: [no change] Far apart changes (i.e. more than one chunk).", |
| inputText => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -7,7 +7,7 @@ |
| |
| * File: |
| |
| -2010-12-22 Bob <bob@email.address> |
| +2010-12-22 Bobby <bob@email.address> |
| |
| Changed some code on 2010-12-22. |
| |
| @@ -21,7 +21,7 @@ |
| |
| * File2: |
| |
| -2010-12-21 Bob <bob@email.address> |
| +2010-12-21 Bobby <bob@email.address> |
| |
| Changed some code on 2010-12-21. |
| END |
| expectedReturn => { |
| patch => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -7,7 +7,7 @@ |
| |
| * File: |
| |
| -2010-12-22 Bob <bob@email.address> |
| +2010-12-22 Bobby <bob@email.address> |
| |
| Changed some code on 2010-12-22. |
| |
| @@ -21,7 +21,7 @@ |
| |
| * File2: |
| |
| -2010-12-21 Bob <bob@email.address> |
| +2010-12-21 Bobby <bob@email.address> |
| |
| Changed some code on 2010-12-21. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: [no change] First line is new line.", |
| inputText => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,3 +1,11 @@ |
| +2009-12-22 Bob <bob@email.address> |
| + |
| + Reviewed by Ray. |
| + |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| 2009-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| expectedReturn => { |
| patch => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,3 +1,11 @@ |
| +2009-12-22 Bob <bob@email.address> |
| + |
| + Reviewed by Ray. |
| + |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| 2009-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: [no change] No date string.", |
| inputText => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -6,6 +6,7 @@ |
| |
| * File: |
| * File2: |
| + * File3: |
| |
| 2009-12-21 Alice <alice@email.address> |
| |
| END |
| expectedReturn => { |
| patch => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -6,6 +6,7 @@ |
| |
| * File: |
| * File2: |
| + * File3: |
| |
| 2009-12-21 Alice <alice@email.address> |
| |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: New entry inserted in middle.", |
| inputText => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -11,6 +11,14 @@ |
| |
| Reviewed by Ray. |
| |
| + Changed some more code on 2009-12-21. |
| + |
| + * File: |
| + |
| +2009-12-21 Alice <alice@email.address> |
| + |
| + Reviewed by Ray. |
| + |
| Changed some code on 2009-12-21. |
| |
| * File: |
| END |
| expectedReturn => { |
| patch => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,3 +1,11 @@ |
| +2009-12-21 Alice <alice@email.address> |
| + |
| + Reviewed by Ray. |
| + |
| + Changed some more code on 2009-12-21. |
| + |
| + * File: |
| + |
| 2009-12-21 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: New entry inserted earlier in the file, but after an entry with the same author and date.", |
| inputText => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -70,6 +70,14 @@ |
| |
| 2009-12-22 Alice <alice@email.address> |
| |
| + Reviewed by Sue. |
| + |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| +2009-12-22 Alice <alice@email.address> |
| + |
| Reviewed by Ray. |
| |
| Changed some code on 2009-12-22. |
| END |
| expectedReturn => { |
| patch => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,3 +1,11 @@ |
| +2009-12-22 Alice <alice@email.address> |
| + |
| + Reviewed by Sue. |
| + |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| 2009-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: Leading context includes first line.", |
| inputText => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,5 +1,13 @@ |
| 2009-12-22 Alice <alice@email.address> |
| |
| + Reviewed by Sue. |
| + |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| +2009-12-22 Alice <alice@email.address> |
| + |
| Reviewed by Ray. |
| |
| Changed some code on 2009-12-22. |
| END |
| expectedReturn => { |
| patch => <<'END', |
| --- ChangeLog |
| +++ ChangeLog |
| @@ -1,3 +1,11 @@ |
| +2009-12-22 Alice <alice@email.address> |
| + |
| + Reviewed by Sue. |
| + |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| 2009-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: Leading context does not include first line.", |
| inputText => <<'END', |
| @@ -2,6 +2,14 @@ |
| |
| Reviewed by Ray. |
| |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| +2009-12-22 Alice <alice@email.address> |
| + |
| + Reviewed by Ray. |
| + |
| Changed some code on 2009-12-22. |
| |
| * File: |
| END |
| expectedReturn => { |
| patch => <<'END', |
| @@ -1,3 +1,11 @@ |
| +2009-12-22 Alice <alice@email.address> |
| + |
| + Reviewed by Ray. |
| + |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| 2009-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: Non-consecutive line additions.", |
| |
| # This can occur, for example, if the new ChangeLog entry includes |
| # trailing white space in the first blank line but not the second. |
| # A diff command can then match the second blank line of the new |
| # ChangeLog entry with the first blank line of the old. |
| # The svn diff command with the default --diff-cmd has done this. |
| inputText => <<'END', |
| @@ -1,5 +1,11 @@ |
| 2009-12-22 Alice <alice@email.address> |
| + <pretend-whitespace> |
| + Reviewed by Ray. |
| |
| + Changed some more code on 2009-12-22. |
| + |
| +2009-12-22 Alice <alice@email.address> |
| + |
| Reviewed by Ray. |
| |
| Changed some code on 2009-12-22. |
| END |
| expectedReturn => { |
| patch => <<'END', |
| @@ -1,3 +1,9 @@ |
| +2009-12-22 Alice <alice@email.address> |
| + <pretend-whitespace> |
| + Reviewed by Ray. |
| + |
| + Changed some more code on 2009-12-22. |
| + |
| 2009-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| END |
| } |
| }, |
| { # New test |
| diffName => "fixChangeLogPatch: Additional edits after new entry.", |
| inputText => <<'END', |
| @@ -2,10 +2,17 @@ |
| |
| Reviewed by Ray. |
| |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| +2009-12-22 Alice <alice@email.address> |
| + |
| + Reviewed by Ray. |
| + |
| Changed some code on 2009-12-22. |
| |
| * File: |
| - * File2: |
| |
| 2009-12-21 Alice <alice@email.address> |
| |
| END |
| expectedReturn => { |
| patch => <<'END', |
| @@ -1,11 +1,18 @@ |
| +2009-12-22 Alice <alice@email.address> |
| + |
| + Reviewed by Ray. |
| + |
| + Changed some more code on 2009-12-22. |
| + |
| + * File: |
| + |
| 2009-12-22 Alice <alice@email.address> |
| |
| Reviewed by Ray. |
| |
| Changed some code on 2009-12-22. |
| |
| * File: |
| - * File2: |
| |
| 2009-12-21 Alice <alice@email.address> |
| |
| END |
| } |
| }, |
| ); |
| |
| my $testCasesCount = @testCaseHashRefs; |
| plan(tests => $testCasesCount); # Total number of assertions. |
| |
| foreach my $testCase (@testCaseHashRefs) { |
| my $testNameStart = "fixChangeLogPatch(): $testCase->{diffName}: comparing"; |
| |
| my $got = VCSUtils::fixChangeLogPatch($testCase->{inputText}); |
| my $expectedReturn = $testCase->{expectedReturn}; |
| |
| is_deeply($got, $expectedReturn, "$testNameStart return value."); |
| } |