Home | History | Annotate | Download | only in VCSUtils_unittest
      1 #!/usr/bin/perl -w
      2 #
      3 # Copyright (C) 2010 Chris Jerdonek (chris.jerdonek (at] gmail.com)
      4 #
      5 # Redistribution and use in source and binary forms, with or without
      6 # modification, are permitted provided that the following conditions are
      7 # met:
      8 #
      9 #     * Redistributions of source code must retain the above copyright
     10 # notice, this list of conditions and the following disclaimer.
     11 #     * Redistributions in binary form must reproduce the above
     12 # copyright notice, this list of conditions and the following disclaimer
     13 # in the documentation and/or other materials provided with the
     14 # distribution.
     15 #     * Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     16 # its contributors may be used to endorse or promote products derived
     17 # from this software without specific prior written permission.
     18 #
     19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     20 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     21 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     22 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     23 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     24 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     25 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30 
     31 # Unit tests of parseSvnDiffHeader().
     32 
     33 use strict;
     34 use warnings;
     35 
     36 use Test::More;
     37 use VCSUtils;
     38 
     39 # The array of test cases.
     40 my @testCaseHashRefs = (
     41 {
     42     # New test
     43     diffName => "simple diff",
     44     inputText => <<'END',
     45 Index: WebKitTools/Scripts/VCSUtils.pm
     46 ===================================================================
     47 --- WebKitTools/Scripts/VCSUtils.pm	(revision 53004)
     48 +++ WebKitTools/Scripts/VCSUtils.pm	(working copy)
     49 @@ -32,6 +32,7 @@ use strict;
     50  use warnings;
     51 END
     52     expectedReturn => [
     53 {
     54     svnConvertedText => <<'END',
     55 Index: WebKitTools/Scripts/VCSUtils.pm
     56 ===================================================================
     57 --- WebKitTools/Scripts/VCSUtils.pm	(revision 53004)
     58 +++ WebKitTools/Scripts/VCSUtils.pm	(working copy)
     59 END
     60     indexPath => "WebKitTools/Scripts/VCSUtils.pm",
     61     sourceRevision => "53004",
     62 },
     63 "@@ -32,6 +32,7 @@ use strict;\n"],
     64     expectedNextLine => " use warnings;\n",
     65 },
     66 {
     67     # New test
     68     diffName => "new file",
     69     inputText => <<'END',
     70 Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
     71 ===================================================================
     72 --- WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl	(revision 0)
     73 +++ WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl	(revision 0)
     74 @@ -0,0 +1,262 @@
     75 +#!/usr/bin/perl -w
     76 END
     77     expectedReturn => [
     78 {
     79     svnConvertedText => <<'END',
     80 Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
     81 ===================================================================
     82 --- WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl	(revision 0)
     83 +++ WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl	(revision 0)
     84 END
     85     indexPath => "WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl",
     86     isNew => 1,
     87 },
     88 "@@ -0,0 +1,262 @@\n"],
     89     expectedNextLine => "+#!/usr/bin/perl -w\n",
     90 },
     91 {
     92     # New test
     93     diffName => "copied file",
     94     inputText => <<'END',
     95 Index: index_path.py
     96 ===================================================================
     97 --- index_path.py	(revision 53048)	(from copied_from_path.py:53048)
     98 +++ index_path.py	(working copy)
     99 @@ -0,0 +1,7 @@
    100 +# Python file...
    101 END
    102     expectedReturn => [
    103 {
    104     svnConvertedText => <<'END',
    105 Index: index_path.py
    106 ===================================================================
    107 --- index_path.py	(revision 53048)	(from copied_from_path.py:53048)
    108 +++ index_path.py	(working copy)
    109 END
    110     copiedFromPath => "copied_from_path.py",
    111     indexPath => "index_path.py",
    112     sourceRevision => 53048,
    113 },
    114 "@@ -0,0 +1,7 @@\n"],
    115     expectedNextLine => "+# Python file...\n",
    116 },
    117 {
    118     # New test
    119     diffName => "contains \\r\\n lines",
    120     inputText => <<END, # No single quotes to allow interpolation of "\r"
    121 Index: index_path.py\r
    122 ===================================================================\r
    123 --- index_path.py	(revision 53048)\r
    124 +++ index_path.py	(working copy)\r
    125 @@ -0,0 +1,7 @@\r
    126 +# Python file...\r
    127 END
    128     expectedReturn => [
    129 {
    130     svnConvertedText => <<END, # No single quotes to allow interpolation of "\r"
    131 Index: index_path.py\r
    132 ===================================================================\r
    133 --- index_path.py	(revision 53048)\r
    134 +++ index_path.py	(working copy)\r
    135 END
    136     indexPath => "index_path.py",
    137     sourceRevision => 53048,
    138 },
    139 "@@ -0,0 +1,7 @@\r\n"],
    140     expectedNextLine => "+# Python file...\r\n",
    141 },
    142 {
    143     # New test
    144     diffName => "contains path corrections",
    145     inputText => <<'END',
    146 Index: index_path.py
    147 ===================================================================
    148 --- bad_path	(revision 53048)	(from copied_from_path.py:53048)
    149 +++ bad_path	(working copy)
    150 @@ -0,0 +1,7 @@
    151 +# Python file...
    152 END
    153     expectedReturn => [
    154 {
    155     svnConvertedText => <<'END',
    156 Index: index_path.py
    157 ===================================================================
    158 --- index_path.py	(revision 53048)	(from copied_from_path.py:53048)
    159 +++ index_path.py	(working copy)
    160 END
    161     copiedFromPath => "copied_from_path.py",
    162     indexPath => "index_path.py",
    163     sourceRevision => 53048,
    164 },
    165 "@@ -0,0 +1,7 @@\n"],
    166     expectedNextLine => "+# Python file...\n",
    167 },
    168 ####
    169 #    Binary test cases
    170 ##
    171 {
    172     # New test
    173     diffName => "binary file",
    174     inputText => <<'END',
    175 Index: test_file.swf
    176 ===================================================================
    177 Cannot display: file marked as a binary type.
    178 svn:mime-type = application/octet-stream
    179 
    180 Property changes on: test_file.swf
    181 ___________________________________________________________________
    182 Name: svn:mime-type
    183    + application/octet-stream
    184 
    185 
    186 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
    187 END
    188     expectedReturn => [
    189 {
    190     svnConvertedText => <<'END',
    191 Index: test_file.swf
    192 ===================================================================
    193 Cannot display: file marked as a binary type.
    194 END
    195     indexPath => "test_file.swf",
    196     isBinary => 1,
    197 },
    198 "svn:mime-type = application/octet-stream\n"],
    199     expectedNextLine => "\n",
    200 },
    201 );
    202 
    203 my $testCasesCount = @testCaseHashRefs;
    204 plan(tests => 2 * $testCasesCount); # Total number of assertions.
    205 
    206 foreach my $testCase (@testCaseHashRefs) {
    207     my $testNameStart = "parseSvnDiffHeader(): $testCase->{diffName}: comparing";
    208 
    209     my $fileHandle;
    210     open($fileHandle, "<", \$testCase->{inputText});
    211     my $line = <$fileHandle>;
    212 
    213     my @got = VCSUtils::parseSvnDiffHeader($fileHandle, $line);
    214     my $expectedReturn = $testCase->{expectedReturn};
    215 
    216     is_deeply(\@got, $expectedReturn, "$testNameStart return value.");
    217 
    218     my $gotNextLine = <$fileHandle>;
    219     is($gotNextLine, $testCase->{expectedNextLine},  "$testNameStart next read line.");
    220 }
    221