Rename WebKitTools to Tools
[WebKit-https.git] / Tools / Scripts / webkitperl / VCSUtils_unittest / parseSvnDiffHeader.pl
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 }