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