15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#!/usr/bin/perl -w 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Copyright (C) 2010 Chris Jerdonek (chris.jerdonek@gmail.com) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# modification, are permitted provided that the following conditions 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# are met: 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 2. Redistributions in binary form must reproduce the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer in the 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# documentation and/or other materials provided with the distribution. 13fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch# 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Unit tests of parseDiffHeader(). 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use strict; 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use warnings; 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use Test::More; 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use VCSUtils; 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my @diffHashRefKeys = ( # The hash reference keys to check per diff. 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "copiedFromPath", 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "indexPath", 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "sourceRevision", 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "svnConvertedText", 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)); 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# New test 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my $testNameStart = "parsePatch(): [SVN: Rename] "; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my $patch = <<'END', 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: Makefile 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)=================================================================== 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- Makefile (revision 53131) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ Makefile (working copy) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)@@ -1,1 +0,0 @@ 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: Makefile_new 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)=================================================================== 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- Makefile_new (revision 53131) (from Makefile:53131) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ Makefile_new (working copy) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)@@ -0,0 +1,1 @@ 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my @expectedDiffHashRefs = ( 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) svnConvertedText => <<'END', 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: Makefile 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)=================================================================== 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- Makefile (revision 53131) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ Makefile (working copy) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)@@ -1,1 +0,0 @@ 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) copiedFromPath => undef, 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) indexPath => "Makefile", 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sourceRevision => "53131", 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) copiedFromPath => "Makefile", 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) indexPath => "Makefile_new", 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sourceRevision => "53131", 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)plan(tests => @expectedDiffHashRefs * @diffHashRefKeys); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my $fileHandle; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)open($fileHandle, "<", \$patch); 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my @gotDiffHashRefs = parsePatch($fileHandle); 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my $i = 0; 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)foreach my $expectedDiffHashRef (@expectedDiffHashRefs) { 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $gotDiffHashRef = $gotDiffHashRefs[$i++]; 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) foreach my $diffHashRefKey (@diffHashRefKeys) { 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $testName = "${testNameStart}[diff $i] key=\"$diffHashRefKey\""; 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) is($gotDiffHashRef->{$diffHashRefKey}, $expectedDiffHashRef->{$diffHashRefKey}, $testName); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 95