1d0825bca7fe65beaee391d30da42e937db621564Steve Block#!/usr/bin/perl -w
2d0825bca7fe65beaee391d30da42e937db621564Steve Block#
3d0825bca7fe65beaee391d30da42e937db621564Steve Block# Copyright (C) 2010 Chris Jerdonek (chris.jerdonek@gmail.com)
4d0825bca7fe65beaee391d30da42e937db621564Steve Block#
5d0825bca7fe65beaee391d30da42e937db621564Steve Block# Redistribution and use in source and binary forms, with or without
6d0825bca7fe65beaee391d30da42e937db621564Steve Block# modification, are permitted provided that the following conditions
7d0825bca7fe65beaee391d30da42e937db621564Steve Block# are met:
8d0825bca7fe65beaee391d30da42e937db621564Steve Block# 1.  Redistributions of source code must retain the above copyright
9d0825bca7fe65beaee391d30da42e937db621564Steve Block#     notice, this list of conditions and the following disclaimer.
10d0825bca7fe65beaee391d30da42e937db621564Steve Block# 2.  Redistributions in binary form must reproduce the above copyright
11d0825bca7fe65beaee391d30da42e937db621564Steve Block#     notice, this list of conditions and the following disclaimer in the
12d0825bca7fe65beaee391d30da42e937db621564Steve Block#     documentation and/or other materials provided with the distribution.
13d0825bca7fe65beaee391d30da42e937db621564Steve Block#
14d0825bca7fe65beaee391d30da42e937db621564Steve Block# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
15d0825bca7fe65beaee391d30da42e937db621564Steve Block# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16d0825bca7fe65beaee391d30da42e937db621564Steve Block# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17d0825bca7fe65beaee391d30da42e937db621564Steve Block# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18d0825bca7fe65beaee391d30da42e937db621564Steve Block# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19d0825bca7fe65beaee391d30da42e937db621564Steve Block# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20d0825bca7fe65beaee391d30da42e937db621564Steve Block# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21d0825bca7fe65beaee391d30da42e937db621564Steve Block# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22d0825bca7fe65beaee391d30da42e937db621564Steve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23d0825bca7fe65beaee391d30da42e937db621564Steve Block# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24d0825bca7fe65beaee391d30da42e937db621564Steve Block
25d0825bca7fe65beaee391d30da42e937db621564Steve Block# Unit tests of parseDiffHeader().
26d0825bca7fe65beaee391d30da42e937db621564Steve Block
27d0825bca7fe65beaee391d30da42e937db621564Steve Blockuse strict;
28d0825bca7fe65beaee391d30da42e937db621564Steve Blockuse warnings;
29d0825bca7fe65beaee391d30da42e937db621564Steve Block
30d0825bca7fe65beaee391d30da42e937db621564Steve Blockuse Test::More;
31d0825bca7fe65beaee391d30da42e937db621564Steve Blockuse VCSUtils;
32d0825bca7fe65beaee391d30da42e937db621564Steve Block
33d0825bca7fe65beaee391d30da42e937db621564Steve Blockmy @diffHashRefKeys = ( # The hash reference keys to check per diff.
34d0825bca7fe65beaee391d30da42e937db621564Steve Block    "copiedFromPath",
35d0825bca7fe65beaee391d30da42e937db621564Steve Block    "indexPath",
36d0825bca7fe65beaee391d30da42e937db621564Steve Block    "sourceRevision",
37d0825bca7fe65beaee391d30da42e937db621564Steve Block    "svnConvertedText",
38d0825bca7fe65beaee391d30da42e937db621564Steve Block);
39d0825bca7fe65beaee391d30da42e937db621564Steve Block
40d0825bca7fe65beaee391d30da42e937db621564Steve Block# New test
41d0825bca7fe65beaee391d30da42e937db621564Steve Blockmy $testNameStart = "parsePatch(): [SVN: Rename] ";
42d0825bca7fe65beaee391d30da42e937db621564Steve Blockmy $patch = <<'END',
43d0825bca7fe65beaee391d30da42e937db621564Steve BlockIndex: Makefile
44d0825bca7fe65beaee391d30da42e937db621564Steve Block===================================================================
45d0825bca7fe65beaee391d30da42e937db621564Steve Block--- Makefile	(revision 53131)
46d0825bca7fe65beaee391d30da42e937db621564Steve Block+++ Makefile	(working copy)
47d0825bca7fe65beaee391d30da42e937db621564Steve Block@@ -1,1 +0,0 @@
48d0825bca7fe65beaee391d30da42e937db621564Steve Block-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
49d0825bca7fe65beaee391d30da42e937db621564Steve BlockIndex: Makefile_new
50d0825bca7fe65beaee391d30da42e937db621564Steve Block===================================================================
51d0825bca7fe65beaee391d30da42e937db621564Steve Block--- Makefile_new	(revision 53131)	(from Makefile:53131)
52d0825bca7fe65beaee391d30da42e937db621564Steve Block+++ Makefile_new	(working copy)
53d0825bca7fe65beaee391d30da42e937db621564Steve Block@@ -0,0 +1,1 @@
54d0825bca7fe65beaee391d30da42e937db621564Steve Block+MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
55d0825bca7fe65beaee391d30da42e937db621564Steve BlockEND
56d0825bca7fe65beaee391d30da42e937db621564Steve Block
57d0825bca7fe65beaee391d30da42e937db621564Steve Blockmy @expectedDiffHashRefs = (
58d0825bca7fe65beaee391d30da42e937db621564Steve Block{
59d0825bca7fe65beaee391d30da42e937db621564Steve Block    svnConvertedText => <<'END',
60d0825bca7fe65beaee391d30da42e937db621564Steve BlockIndex: Makefile
61d0825bca7fe65beaee391d30da42e937db621564Steve Block===================================================================
62d0825bca7fe65beaee391d30da42e937db621564Steve Block--- Makefile	(revision 53131)
63d0825bca7fe65beaee391d30da42e937db621564Steve Block+++ Makefile	(working copy)
64d0825bca7fe65beaee391d30da42e937db621564Steve Block@@ -1,1 +0,0 @@
65d0825bca7fe65beaee391d30da42e937db621564Steve Block-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
66d0825bca7fe65beaee391d30da42e937db621564Steve BlockEND
67d0825bca7fe65beaee391d30da42e937db621564Steve Block    copiedFromPath => undef,
68d0825bca7fe65beaee391d30da42e937db621564Steve Block    indexPath => "Makefile",
69d0825bca7fe65beaee391d30da42e937db621564Steve Block    sourceRevision => "53131",
70d0825bca7fe65beaee391d30da42e937db621564Steve Block},
71d0825bca7fe65beaee391d30da42e937db621564Steve Block{
72d0825bca7fe65beaee391d30da42e937db621564Steve Block    copiedFromPath => "Makefile",
73d0825bca7fe65beaee391d30da42e937db621564Steve Block    indexPath => "Makefile_new",
74d0825bca7fe65beaee391d30da42e937db621564Steve Block    sourceRevision => "53131",
75d0825bca7fe65beaee391d30da42e937db621564Steve Block},
76d0825bca7fe65beaee391d30da42e937db621564Steve Block);
77d0825bca7fe65beaee391d30da42e937db621564Steve Block
78d0825bca7fe65beaee391d30da42e937db621564Steve Blockplan(tests => @expectedDiffHashRefs * @diffHashRefKeys);
79d0825bca7fe65beaee391d30da42e937db621564Steve Block
80d0825bca7fe65beaee391d30da42e937db621564Steve Blockmy $fileHandle;
81d0825bca7fe65beaee391d30da42e937db621564Steve Blockopen($fileHandle, "<", \$patch);
82d0825bca7fe65beaee391d30da42e937db621564Steve Block
83d0825bca7fe65beaee391d30da42e937db621564Steve Blockmy @gotDiffHashRefs = parsePatch($fileHandle);
84d0825bca7fe65beaee391d30da42e937db621564Steve Block
85d0825bca7fe65beaee391d30da42e937db621564Steve Blockmy $i = 0;
86d0825bca7fe65beaee391d30da42e937db621564Steve Blockforeach my $expectedDiffHashRef (@expectedDiffHashRefs) {
87d0825bca7fe65beaee391d30da42e937db621564Steve Block
88d0825bca7fe65beaee391d30da42e937db621564Steve Block    my $gotDiffHashRef = $gotDiffHashRefs[$i++];
89d0825bca7fe65beaee391d30da42e937db621564Steve Block
90d0825bca7fe65beaee391d30da42e937db621564Steve Block    foreach my $diffHashRefKey (@diffHashRefKeys) {
91d0825bca7fe65beaee391d30da42e937db621564Steve Block        my $testName = "${testNameStart}[diff $i] key=\"$diffHashRefKey\"";
92d0825bca7fe65beaee391d30da42e937db621564Steve Block        is($gotDiffHashRef->{$diffHashRefKey}, $expectedDiffHashRef->{$diffHashRefKey}, $testName);
93d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
94d0825bca7fe65beaee391d30da42e937db621564Steve Block}
95