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