WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 #!/usr/bin/perl -w
       
     2 #
       
     3 # Copyright (C) 2010 Chris Jerdonek (chris.jerdonek@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 }