|
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 } |