|
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 parseDiffHeader(). |
|
32 |
|
33 use strict; |
|
34 use warnings; |
|
35 |
|
36 use Test::More; |
|
37 use VCSUtils; |
|
38 |
|
39 # The unit tests for parseGitDiffHeader() and parseSvnDiffHeader() |
|
40 # already thoroughly test parsing each format. |
|
41 # |
|
42 # For parseDiffHeader(), it should suffice to verify that -- (1) for each |
|
43 # format, the method can return non-trivial values back for each key |
|
44 # supported by that format (e.g. "sourceRevision" for SVN), (2) the method |
|
45 # correctly sets default values when specific key-values are not set |
|
46 # (e.g. undef for "sourceRevision" for Git), and (3) key-values unique to |
|
47 # this method are set correctly (e.g. "scmFormat"). |
|
48 my @testCaseHashRefs = ( |
|
49 #### |
|
50 # SVN test cases |
|
51 ## |
|
52 { # New test |
|
53 diffName => "SVN: non-trivial copiedFromPath and sourceRevision values", |
|
54 inputText => <<'END', |
|
55 Index: index_path.py |
|
56 =================================================================== |
|
57 --- index_path.py (revision 53048) (from copied_from_path.py:53048) |
|
58 +++ index_path.py (working copy) |
|
59 @@ -0,0 +1,7 @@ |
|
60 +# Python file... |
|
61 END |
|
62 expectedReturn => [ |
|
63 { |
|
64 svnConvertedText => <<'END', |
|
65 Index: index_path.py |
|
66 =================================================================== |
|
67 --- index_path.py (revision 53048) (from copied_from_path.py:53048) |
|
68 +++ index_path.py (working copy) |
|
69 END |
|
70 copiedFromPath => "copied_from_path.py", |
|
71 indexPath => "index_path.py", |
|
72 isSvn => 1, |
|
73 sourceRevision => 53048, |
|
74 }, |
|
75 "@@ -0,0 +1,7 @@\n"], |
|
76 expectedNextLine => "+# Python file...\n", |
|
77 }, |
|
78 #### |
|
79 # Git test cases |
|
80 ## |
|
81 { # New test case |
|
82 diffName => "Git: Non-zero executable bit", |
|
83 inputText => <<'END', |
|
84 diff --git a/foo.exe b/foo.exe |
|
85 old mode 100644 |
|
86 new mode 100755 |
|
87 END |
|
88 expectedReturn => [ |
|
89 { |
|
90 svnConvertedText => <<'END', |
|
91 Index: foo.exe |
|
92 old mode 100644 |
|
93 new mode 100755 |
|
94 END |
|
95 executableBitDelta => 1, |
|
96 indexPath => "foo.exe", |
|
97 isGit => 1, |
|
98 }, |
|
99 undef], |
|
100 expectedNextLine => undef, |
|
101 }, |
|
102 ); |
|
103 |
|
104 my $testCasesCount = @testCaseHashRefs; |
|
105 plan(tests => 2 * $testCasesCount); # Total number of assertions. |
|
106 |
|
107 foreach my $testCase (@testCaseHashRefs) { |
|
108 my $testNameStart = "parseDiffHeader(): $testCase->{diffName}: comparing"; |
|
109 |
|
110 my $fileHandle; |
|
111 open($fileHandle, "<", \$testCase->{inputText}); |
|
112 my $line = <$fileHandle>; |
|
113 |
|
114 my @got = VCSUtils::parseDiffHeader($fileHandle, $line); |
|
115 my $expectedReturn = $testCase->{expectedReturn}; |
|
116 |
|
117 is_deeply(\@got, $expectedReturn, "$testNameStart return value."); |
|
118 |
|
119 my $gotNextLine = <$fileHandle>; |
|
120 is($gotNextLine, $testCase->{expectedNextLine}, "$testNameStart next read line."); |
|
121 } |