Home | History | Annotate | Download | only in VCSUtils_unittest
      1 #!/usr/bin/perl
      2 #
      3 # Copyright (C) 2009, 2010 Chris Jerdonek (chris.jerdonek (at] gmail.com)
      4 # Copyright (C) Research In Motion 2010. All rights reserved.
      5 #
      6 # Redistribution and use in source and binary forms, with or without
      7 # modification, are permitted provided that the following conditions are
      8 # met:
      9 #
     10 #     * Redistributions of source code must retain the above copyright
     11 # notice, this list of conditions and the following disclaimer.
     12 #     * Redistributions in binary form must reproduce the above
     13 # copyright notice, this list of conditions and the following disclaimer
     14 # in the documentation and/or other materials provided with the
     15 # distribution.
     16 #     * Neither the name of Google Inc. nor the names of its
     17 # contributors may be used to endorse or promote products derived from
     18 # this software without specific prior written permission.
     19 #
     20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     21 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     22 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     23 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     24 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     25 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     26 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     30 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31 
     32 # Unit tests of VCSUtils::fixChangeLogPatch().
     33 
     34 use strict;
     35 use warnings;
     36 
     37 use Test::More;
     38 use VCSUtils;
     39 
     40 # The source ChangeLog for these tests is the following:
     41 #
     42 # 2009-12-22  Alice  <alice (at] email.address>
     43 #
     44 #         Reviewed by Ray.
     45 #
     46 #         Changed some code on 2009-12-22.
     47 #
     48 #         * File:
     49 #         * File2:
     50 #
     51 # 2009-12-21  Alice  <alice (at] email.address>
     52 #
     53 #         Reviewed by Ray.
     54 #
     55 #         Changed some code on 2009-12-21.
     56 #
     57 #         * File:
     58 #         * File2:
     59 
     60 my @testCaseHashRefs = (
     61 { # New test
     62     diffName => "fixChangeLogPatch: [no change] In-place change.",
     63     inputText => <<'END',
     64 --- ChangeLog
     65 +++ ChangeLog
     66 @@ -1,5 +1,5 @@
     67  2010-12-22  Bob  <bob@email.address>
     68 
     69 -        Reviewed by Sue.
     70 +        Reviewed by Ray.
     71 
     72          Changed some code on 2010-12-22.
     73 END
     74     expectedReturn => {
     75     patch => <<'END',
     76 --- ChangeLog
     77 +++ ChangeLog
     78 @@ -1,5 +1,5 @@
     79  2010-12-22  Bob  <bob@email.address>
     80 
     81 -        Reviewed by Sue.
     82 +        Reviewed by Ray.
     83 
     84          Changed some code on 2010-12-22.
     85 END
     86     }
     87 },
     88 { # New test
     89     diffName => "fixChangeLogPatch: [no change] Remove first entry.",
     90     inputText => <<'END',
     91 --- ChangeLog
     92 +++ ChangeLog
     93 @@ -1,11 +1,3 @@
     94 -2010-12-22  Bob  <bob@email.address>
     95 -
     96 -        Reviewed by Ray.
     97 -
     98 -        Changed some code on 2010-12-22.
     99 -
    100 -        * File:
    101 -
    102  2010-12-22  Alice  <alice@email.address>
    103 
    104          Reviewed by Ray.
    105 END
    106     expectedReturn => {
    107     patch => <<'END',
    108 --- ChangeLog
    109 +++ ChangeLog
    110 @@ -1,11 +1,3 @@
    111 -2010-12-22  Bob  <bob@email.address>
    112 -
    113 -        Reviewed by Ray.
    114 -
    115 -        Changed some code on 2010-12-22.
    116 -
    117 -        * File:
    118 -
    119  2010-12-22  Alice  <alice@email.address>
    120 
    121          Reviewed by Ray.
    122 END
    123     }
    124 },
    125 { # New test
    126     diffName => "fixChangeLogPatch: [no change] Remove entry in the middle.",
    127     inputText => <<'END',
    128 --- ChangeLog
    129 +++ ChangeLog
    130 @@@ -7,10 +7,6 @@
    131 
    132          * File:
    133 
    134 -2010-12-22  Bob  <bob@email.address>
    135 -
    136 -        Changed some code on 2010-12-22.
    137 -
    138  2010-12-22  Alice  <alice@email.address>
    139 
    140          Reviewed by Ray.
    141 END
    142     expectedReturn => {
    143     patch => <<'END',
    144 --- ChangeLog
    145 +++ ChangeLog
    146 @@@ -7,10 +7,6 @@
    147 
    148          * File:
    149 
    150 -2010-12-22  Bob  <bob@email.address>
    151 -
    152 -        Changed some code on 2010-12-22.
    153 -
    154  2010-12-22  Alice  <alice@email.address>
    155 
    156          Reviewed by Ray.
    157 END
    158     }
    159 },
    160 { # New test
    161     diffName => "fixChangeLogPatch: [no change] Far apart changes (i.e. more than one chunk).",
    162     inputText => <<'END',
    163 --- ChangeLog
    164 +++ ChangeLog
    165 @@ -7,7 +7,7 @@
    166 
    167          * File:
    168 
    169 -2010-12-22  Bob  <bob@email.address>
    170 +2010-12-22  Bobby <bob@email.address>
    171 
    172          Changed some code on 2010-12-22.
    173 
    174 @@ -21,7 +21,7 @@
    175 
    176          * File2:
    177 
    178 -2010-12-21  Bob  <bob@email.address>
    179 +2010-12-21  Bobby <bob@email.address>
    180 
    181          Changed some code on 2010-12-21.
    182 END
    183     expectedReturn => {
    184     patch => <<'END',
    185 --- ChangeLog
    186 +++ ChangeLog
    187 @@ -7,7 +7,7 @@
    188 
    189          * File:
    190 
    191 -2010-12-22  Bob  <bob@email.address>
    192 +2010-12-22  Bobby <bob@email.address>
    193 
    194          Changed some code on 2010-12-22.
    195 
    196 @@ -21,7 +21,7 @@
    197 
    198          * File2:
    199 
    200 -2010-12-21  Bob  <bob@email.address>
    201 +2010-12-21  Bobby <bob@email.address>
    202 
    203          Changed some code on 2010-12-21.
    204 END
    205     }
    206 },
    207 { # New test
    208     diffName => "fixChangeLogPatch: [no change] First line is new line.",
    209     inputText => <<'END',
    210 --- ChangeLog
    211 +++ ChangeLog
    212 @@ -1,3 +1,11 @@
    213 +2009-12-22  Bob  <bob@email.address>
    214 +
    215 +        Reviewed by Ray.
    216 +
    217 +        Changed some more code on 2009-12-22.
    218 +
    219 +        * File:
    220 +
    221  2009-12-22  Alice  <alice@email.address>
    222 
    223          Reviewed by Ray.
    224 END
    225     expectedReturn => {
    226     patch => <<'END',
    227 --- ChangeLog
    228 +++ ChangeLog
    229 @@ -1,3 +1,11 @@
    230 +2009-12-22  Bob  <bob@email.address>
    231 +
    232 +        Reviewed by Ray.
    233 +
    234 +        Changed some more code on 2009-12-22.
    235 +
    236 +        * File:
    237 +
    238  2009-12-22  Alice  <alice@email.address>
    239 
    240          Reviewed by Ray.
    241 END
    242     }
    243 },
    244 { # New test
    245     diffName => "fixChangeLogPatch: [no change] No date string.",
    246     inputText => <<'END',
    247 --- ChangeLog
    248 +++ ChangeLog
    249 @@ -6,6 +6,7 @@
    250 
    251          * File:
    252          * File2:
    253 +        * File3:
    254 
    255  2009-12-21  Alice  <alice@email.address>
    256 
    257 END
    258     expectedReturn => {
    259     patch => <<'END',
    260 --- ChangeLog
    261 +++ ChangeLog
    262 @@ -6,6 +6,7 @@
    263 
    264          * File:
    265          * File2:
    266 +        * File3:
    267 
    268  2009-12-21  Alice  <alice@email.address>
    269 
    270 END
    271     }
    272 },
    273 { # New test
    274     diffName => "fixChangeLogPatch: New entry inserted in middle.",
    275     inputText => <<'END',
    276 --- ChangeLog
    277 +++ ChangeLog
    278 @@ -11,6 +11,14 @@
    279 
    280          Reviewed by Ray.
    281 
    282 +        Changed some more code on 2009-12-21.
    283 +
    284 +        * File:
    285 +
    286 +2009-12-21  Alice  <alice@email.address>
    287 +
    288 +        Reviewed by Ray.
    289 +
    290          Changed some code on 2009-12-21.
    291 
    292          * File:
    293 END
    294     expectedReturn => {
    295     patch => <<'END',
    296 --- ChangeLog
    297 +++ ChangeLog
    298 @@ -1,3 +1,11 @@
    299 +2009-12-21  Alice  <alice@email.address>
    300 +
    301 +        Reviewed by Ray.
    302 +
    303 +        Changed some more code on 2009-12-21.
    304 +
    305 +        * File:
    306 +
    307  2009-12-21  Alice  <alice@email.address>
    308 
    309          Reviewed by Ray.
    310 END
    311     }
    312 },
    313 { # New test
    314     diffName => "fixChangeLogPatch: New entry inserted earlier in the file, but after an entry with the same author and date.",
    315     inputText => <<'END',
    316 --- ChangeLog
    317 +++ ChangeLog
    318 @@ -70,6 +70,14 @@
    319 
    320  2009-12-22  Alice  <alice@email.address>
    321 
    322 +        Reviewed by Sue.
    323 +
    324 +        Changed some more code on 2009-12-22.
    325 +
    326 +        * File:
    327 +
    328 +2009-12-22  Alice  <alice@email.address>
    329 +
    330          Reviewed by Ray.
    331 
    332          Changed some code on 2009-12-22.
    333 END
    334     expectedReturn => {
    335     patch => <<'END',
    336 --- ChangeLog
    337 +++ ChangeLog
    338 @@ -1,3 +1,11 @@
    339 +2009-12-22  Alice  <alice@email.address>
    340 +
    341 +        Reviewed by Sue.
    342 +
    343 +        Changed some more code on 2009-12-22.
    344 +
    345 +        * File:
    346 +
    347  2009-12-22  Alice  <alice@email.address>
    348 
    349          Reviewed by Ray.
    350 END
    351     }
    352 },
    353 { # New test
    354     diffName => "fixChangeLogPatch: Leading context includes first line.",
    355     inputText => <<'END',
    356 --- ChangeLog
    357 +++ ChangeLog
    358 @@ -1,5 +1,13 @@
    359  2009-12-22  Alice  <alice@email.address>
    360 
    361 +        Reviewed by Sue.
    362 +
    363 +        Changed some more code on 2009-12-22.
    364 +
    365 +        * File:
    366 +
    367 +2009-12-22  Alice  <alice@email.address>
    368 +
    369          Reviewed by Ray.
    370 
    371          Changed some code on 2009-12-22.
    372 END
    373     expectedReturn => {
    374     patch => <<'END',
    375 --- ChangeLog
    376 +++ ChangeLog
    377 @@ -1,3 +1,11 @@
    378 +2009-12-22  Alice  <alice@email.address>
    379 +
    380 +        Reviewed by Sue.
    381 +
    382 +        Changed some more code on 2009-12-22.
    383 +
    384 +        * File:
    385 +
    386  2009-12-22  Alice  <alice@email.address>
    387 
    388          Reviewed by Ray.
    389 END
    390     }
    391 },
    392 { # New test
    393     diffName => "fixChangeLogPatch: Leading context does not include first line.",
    394     inputText => <<'END',
    395 @@ -2,6 +2,14 @@
    396 
    397          Reviewed by Ray.
    398 
    399 +        Changed some more code on 2009-12-22.
    400 +
    401 +        * File:
    402 +
    403 +2009-12-22  Alice  <alice@email.address>
    404 +
    405 +        Reviewed by Ray.
    406 +
    407          Changed some code on 2009-12-22.
    408 
    409          * File:
    410 END
    411     expectedReturn => {
    412     patch => <<'END',
    413 @@ -1,3 +1,11 @@
    414 +2009-12-22  Alice  <alice@email.address>
    415 +
    416 +        Reviewed by Ray.
    417 +
    418 +        Changed some more code on 2009-12-22.
    419 +
    420 +        * File:
    421 +
    422  2009-12-22  Alice  <alice@email.address>
    423 
    424          Reviewed by Ray.
    425 END
    426     }
    427 },
    428 { # New test
    429     diffName => "fixChangeLogPatch: Non-consecutive line additions.",
    430 
    431 # This can occur, for example, if the new ChangeLog entry includes
    432 # trailing white space in the first blank line but not the second.
    433 # A diff command can then match the second blank line of the new
    434 # ChangeLog entry with the first blank line of the old.
    435 # The svn diff command with the default --diff-cmd has done this.
    436     inputText => <<'END',
    437 @@ -1,5 +1,11 @@
    438  2009-12-22  Alice  <alice@email.address>
    439 + <pretend-whitespace>
    440 +        Reviewed by Ray.
    441 
    442 +        Changed some more code on 2009-12-22.
    443 +
    444 +2009-12-22  Alice  <alice@email.address>
    445 +
    446          Reviewed by Ray.
    447 
    448          Changed some code on 2009-12-22.
    449 END
    450     expectedReturn => {
    451     patch => <<'END',
    452 @@ -1,3 +1,9 @@
    453 +2009-12-22  Alice  <alice@email.address>
    454 + <pretend-whitespace>
    455 +        Reviewed by Ray.
    456 +
    457 +        Changed some more code on 2009-12-22.
    458 +
    459  2009-12-22  Alice  <alice@email.address>
    460 
    461          Reviewed by Ray.
    462 END
    463     }
    464 },
    465 { # New test
    466     diffName => "fixChangeLogPatch: Additional edits after new entry.",
    467     inputText => <<'END',
    468 @@ -2,10 +2,17 @@
    469 
    470          Reviewed by Ray.
    471 
    472 +        Changed some more code on 2009-12-22.
    473 +
    474 +        * File:
    475 +
    476 +2009-12-22  Alice  <alice@email.address>
    477 +
    478 +        Reviewed by Ray.
    479 +
    480          Changed some code on 2009-12-22.
    481 
    482          * File:
    483 -        * File2:
    484 
    485  2009-12-21  Alice  <alice@email.address>
    486 
    487 END
    488     expectedReturn => {
    489     patch => <<'END',
    490 @@ -1,11 +1,18 @@
    491 +2009-12-22  Alice  <alice@email.address>
    492 +
    493 +        Reviewed by Ray.
    494 +
    495 +        Changed some more code on 2009-12-22.
    496 +
    497 +        * File:
    498 +
    499  2009-12-22  Alice  <alice@email.address>
    500 
    501          Reviewed by Ray.
    502 
    503          Changed some code on 2009-12-22.
    504 
    505          * File:
    506 -        * File2:
    507 
    508  2009-12-21  Alice  <alice@email.address>
    509 
    510 END
    511     }
    512 },
    513 );
    514 
    515 my $testCasesCount = @testCaseHashRefs;
    516 plan(tests => $testCasesCount); # Total number of assertions.
    517 
    518 foreach my $testCase (@testCaseHashRefs) {
    519     my $testNameStart = "fixChangeLogPatch(): $testCase->{diffName}: comparing";
    520 
    521     my $got = VCSUtils::fixChangeLogPatch($testCase->{inputText});
    522     my $expectedReturn = $testCase->{expectedReturn};
    523 
    524     is_deeply($got, $expectedReturn, "$testNameStart return value.");
    525 }
    526