#!/usr/bin/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 # # Reviewed by Ray. # # Changed some code on 2009-12-22. # # * File: # * File2: # # 2009-12-21 Alice # # 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 - 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 - 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 - - Reviewed by Ray. - - Changed some code on 2010-12-22. - - * File: - 2010-12-22 Alice Reviewed by Ray. END expectedReturn => { patch => <<'END', --- ChangeLog +++ ChangeLog @@ -1,11 +1,3 @@ -2010-12-22 Bob - - Reviewed by Ray. - - Changed some code on 2010-12-22. - - * File: - 2010-12-22 Alice 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 - - Changed some code on 2010-12-22. - 2010-12-22 Alice Reviewed by Ray. END expectedReturn => { patch => <<'END', --- ChangeLog +++ ChangeLog @@@ -7,10 +7,6 @@ * File: -2010-12-22 Bob - - Changed some code on 2010-12-22. - 2010-12-22 Alice 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 +2010-12-22 Bobby Changed some code on 2010-12-22. @@ -21,7 +21,7 @@ * File2: -2010-12-21 Bob +2010-12-21 Bobby Changed some code on 2010-12-21. END expectedReturn => { patch => <<'END', --- ChangeLog +++ ChangeLog @@ -7,7 +7,7 @@ * File: -2010-12-22 Bob +2010-12-22 Bobby Changed some code on 2010-12-22. @@ -21,7 +21,7 @@ * File2: -2010-12-21 Bob +2010-12-21 Bobby 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 + + Reviewed by Ray. + + Changed some more code on 2009-12-22. + + * File: + 2009-12-22 Alice Reviewed by Ray. END expectedReturn => { patch => <<'END', --- ChangeLog +++ ChangeLog @@ -1,3 +1,11 @@ +2009-12-22 Bob + + Reviewed by Ray. + + Changed some more code on 2009-12-22. + + * File: + 2009-12-22 Alice 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 END expectedReturn => { patch => <<'END', --- ChangeLog +++ ChangeLog @@ -6,6 +6,7 @@ * File: * File2: + * File3: 2009-12-21 Alice 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 + + 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 + + Reviewed by Ray. + + Changed some more code on 2009-12-21. + + * File: + 2009-12-21 Alice 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 + Reviewed by Sue. + + Changed some more code on 2009-12-22. + + * File: + +2009-12-22 Alice + Reviewed by Ray. Changed some code on 2009-12-22. END expectedReturn => { patch => <<'END', --- ChangeLog +++ ChangeLog @@ -1,3 +1,11 @@ +2009-12-22 Alice + + Reviewed by Sue. + + Changed some more code on 2009-12-22. + + * File: + 2009-12-22 Alice 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 + Reviewed by Sue. + + Changed some more code on 2009-12-22. + + * File: + +2009-12-22 Alice + Reviewed by Ray. Changed some code on 2009-12-22. END expectedReturn => { patch => <<'END', --- ChangeLog +++ ChangeLog @@ -1,3 +1,11 @@ +2009-12-22 Alice + + Reviewed by Sue. + + Changed some more code on 2009-12-22. + + * File: + 2009-12-22 Alice 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 + + Reviewed by Ray. + Changed some code on 2009-12-22. * File: END expectedReturn => { patch => <<'END', @@ -1,3 +1,11 @@ +2009-12-22 Alice + + Reviewed by Ray. + + Changed some more code on 2009-12-22. + + * File: + 2009-12-22 Alice 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 + + Reviewed by Ray. + Changed some more code on 2009-12-22. + +2009-12-22 Alice + Reviewed by Ray. Changed some code on 2009-12-22. END expectedReturn => { patch => <<'END', @@ -1,3 +1,9 @@ +2009-12-22 Alice + + Reviewed by Ray. + + Changed some more code on 2009-12-22. + 2009-12-22 Alice 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 + + Reviewed by Ray. + Changed some code on 2009-12-22. * File: - * File2: 2009-12-21 Alice END expectedReturn => { patch => <<'END', @@ -1,11 +1,18 @@ +2009-12-22 Alice + + Reviewed by Ray. + + Changed some more code on 2009-12-22. + + * File: + 2009-12-22 Alice Reviewed by Ray. Changed some code on 2009-12-22. * File: - * File2: 2009-12-21 Alice 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."); }