15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/perl -w 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org) 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Redistribution and use in source and binary forms, with or without 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# modification, are permitted provided that the following conditions 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# are met: 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 1. Redistributions of source code must retain the above copyright 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# notice, this list of conditions and the following disclaimer. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 2. Redistributions in binary form must reproduce the above copyright 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# notice, this list of conditions and the following disclaimer in the 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# documentation and/or other materials provided with the distribution. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Unit tests of parseGitDiffHeader(). 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)use strict; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)use warnings; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)use Test::More; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)use VCSUtils; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The array of test cases. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)my @testCaseHashRefs = ( 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ # New test 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) diffName => "Modified file", 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputText => <<'END', 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/foo.h b/foo.h 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index f5d5e74..3b6aa92 100644 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/foo.h 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/foo.h 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -1 +1 @@ 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-file contents 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+new file contents 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)END 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expectedReturn => [ 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) svnConvertedText => <<'END', 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Index: foo.h 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index f5d5e74..3b6aa92 100644 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- foo.h 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ foo.h 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)END 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indexPath => "foo.h", 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"@@ -1 +1 @@\n"], 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expectedNextLine => "-file contents\n", 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ # New test 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) diffName => "new file", 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputText => <<'END', 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/foo.h b/foo.h 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)new file mode 100644 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 0000000..3c9f114 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- /dev/null 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/foo.h 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -0,0 +1,34 @@ 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+<html> 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)END 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expectedReturn => [ 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) svnConvertedText => <<'END', 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Index: foo.h 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)new file mode 100644 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 0000000..3c9f114 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- foo.h 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ foo.h 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)END 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indexPath => "foo.h", 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isNew => 1, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch"@@ -0,0 +1,34 @@\n"], 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expectedNextLine => "+<html>\n", 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ # New test 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) diffName => "file deletion", 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputText => <<'END', 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/foo b/foo 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)deleted file mode 100644 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 1e50d1d..0000000 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/foo 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ /dev/null 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -1,1 +0,0 @@ 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-line1 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/configure.ac b/configure.ac 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index d45dd40..3494526 100644 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)END 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expectedReturn => [ 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) svnConvertedText => <<'END', 101116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIndex: foo 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)deleted file mode 100644 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdochindex 1e50d1d..0000000 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- foo 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch+++ foo 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)END 107424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) indexPath => "foo", 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isDeletion => 1, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch"@@ -1,1 +0,0 @@\n"], 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expectedNextLine => "-line1\n", 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ # New test 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) diffName => "using --no-prefix", 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputText => <<'END', 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git foo.h foo.h 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index c925780..9e65c43 100644 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- foo.h 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ foo.h 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -1,3 +1,17 @@ 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+contents 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)END 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expectedReturn => [ 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) svnConvertedText => <<'END', 126116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIndex: foo.h 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdochindex c925780..9e65c43 100644 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch--- foo.h 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch+++ foo.h 130116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch indexPath => "foo.h", 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}, 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch"@@ -1,3 +1,17 @@\n"], 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expectedNextLine => "+contents\n", 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}, 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#### 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Copy operations 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch## 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch{ # New test 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch diffName => "copy (with similarity index 100%)", 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch inputText => <<'END', 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdiff --git a/foo b/foo_new 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsimilarity index 100% 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcopy from foo 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcopy to foo_new 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdiff --git a/bar b/bar 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdochindex d45dd40..3494526 100644 148116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expectedReturn => [ 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch{ 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch svnConvertedText => <<'END', 152116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIndex: foo_new 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsimilarity index 100% 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcopy from foo 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcopy to foo_new 156116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch copiedFromPath => "foo", 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch indexPath => "foo_new", 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}, 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch"diff --git a/bar b/bar\n"], 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expectedNextLine => "index d45dd40..3494526 100644\n", 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}, 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch{ # New test 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch diffName => "copy (with similarity index < 100%)", 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch inputText => <<'END', 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdiff --git a/foo b/foo_new 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsimilarity index 99% 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcopy from foo 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcopy to foo_new 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdiff --git a/bar b/bar 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdochindex d45dd40..3494526 100644 172116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expectedReturn => [ 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch{ 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch svnConvertedText => <<'END', 176116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIndex: foo_new 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsimilarity index 99% 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcopy from foo 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcopy to foo_new 180116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch copiedFromPath => "foo", 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch indexPath => "foo_new", 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch isCopyWithChanges => 1, 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}, 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch"diff --git a/bar b/bar\n"], 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expectedNextLine => "index d45dd40..3494526 100644\n", 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}, 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch{ # New test 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch diffName => "rename (with similarity index 100%)", 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch inputText => <<'END', 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdiff --git a/foo b/foo_new 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsimilarity index 100% 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrename from foo 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrename to foo_new 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdiff --git a/bar b/bar 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdochindex d45dd40..3494526 100644 197116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expectedReturn => [ 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch{ 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch svnConvertedText => <<'END', 201116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIndex: foo_new 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsimilarity index 100% 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrename from foo 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrename to foo_new 205116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) copiedFromPath => "foo", 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indexPath => "foo_new", 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shouldDeleteSource => 1, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"diff --git a/bar b/bar\n"], 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expectedNextLine => "index d45dd40..3494526 100644\n", 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ # New test 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) diffName => "rename (with similarity index < 100%)", 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputText => <<'END', 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/foo b/foo_new 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)similarity index 99% 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)rename from foo 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)rename to foo_new 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 1e50d1d..1459d21 100644 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- a/foo 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ b/foo_new 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -15,3 +15,4 @@ release r deployment dep deploy: 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line1 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line2 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line3 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+line4 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)diff --git a/bar b/bar 22968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)index d45dd40..3494526 100644 23068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)END 23168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) expectedReturn => [ 23268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles){ 23368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) svnConvertedText => <<'END', 23468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)Index: foo_new 23568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)similarity index 99% 23668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)rename from foo 23768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)rename to foo_new 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 1e50d1d..1459d21 100644 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--- foo_new 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+++ foo_new 241END 242 copiedFromPath => "foo", 243 indexPath => "foo_new", 244 isCopyWithChanges => 1, 245 shouldDeleteSource => 1, 246}, 247"@@ -15,3 +15,4 @@ release r deployment dep deploy:\n"], 248 expectedNextLine => " line1\n", 249}, 250{ # New test 251 diffName => "rename (with executable bit change)", 252 inputText => <<'END', 253diff --git a/foo b/foo_new 254old mode 100644 255new mode 100755 256similarity index 100% 257rename from foo 258rename to foo_new 259diff --git a/bar b/bar 260index d45dd40..3494526 100644 261END 262 expectedReturn => [ 263{ 264 svnConvertedText => <<'END', 265Index: foo_new 266old mode 100644 267new mode 100755 268similarity index 100% 269rename from foo 270rename to foo_new 271END 272 copiedFromPath => "foo", 273 executableBitDelta => 1, 274 indexPath => "foo_new", 275 isCopyWithChanges => 1, 276 shouldDeleteSource => 1, 277}, 278"diff --git a/bar b/bar\n"], 279 expectedNextLine => "index d45dd40..3494526 100644\n", 280}, 281#### 282# Binary file test cases 283## 284{ 285 # New test case 286 diffName => "New binary file", 287 inputText => <<'END', 288diff --git a/foo.gif b/foo.gif 289new file mode 100644 290index 0000000000000000000000000000000000000000..64a9532e7794fcd791f6f12157406d9060151690 291GIT binary patch 292literal 7 293OcmYex&reDa;sO8*F9L)B 294 295literal 0 296HcmV?d00001 297 298END 299 expectedReturn => [ 300{ 301 svnConvertedText => <<'END', 302Index: foo.gif 303new file mode 100644 304index 0000000000000000000000000000000000000000..64a9532e7794fcd791f6f12157406d9060151690 305GIT binary patch 306END 307 indexPath => "foo.gif", 308 isBinary => 1, 309 isNew => 1, 310}, 311"literal 7\n"], 312 expectedNextLine => "OcmYex&reDa;sO8*F9L)B\n", 313}, 314{ 315 # New test case 316 diffName => "Deleted binary file", 317 inputText => <<'END', 318diff --git a/foo.gif b/foo.gif 319deleted file mode 100644 320index 323fae0..0000000 321GIT binary patch 322literal 0 323HcmV?d00001 324 325literal 7 326OcmYex&reDa;sO8*F9L)B 327 328END 329 expectedReturn => [ 330{ 331 svnConvertedText => <<'END', 332Index: foo.gif 333deleted file mode 100644 334index 323fae0..0000000 335GIT binary patch 336END 337 indexPath => "foo.gif", 338 isBinary => 1, 339 isDeletion => 1, 340}, 341"literal 0\n"], 342 expectedNextLine => "HcmV?d00001\n", 343}, 344#### 345# Executable bit test cases 346## 347{ 348 # New test case 349 diffName => "Modified executable file", 350 inputText => <<'END', 351diff --git a/foo b/foo 352index d03e242..435ad3a 100755 353--- a/foo 354+++ b/foo 355@@ -1 +1 @@ 356-file contents 357+new file contents 358 359END 360 expectedReturn => [ 361{ 362 svnConvertedText => <<'END', 363Index: foo 364index d03e242..435ad3a 100755 365--- foo 366+++ foo 367END 368 indexPath => "foo", 369}, 370"@@ -1 +1 @@\n"], 371 expectedNextLine => "-file contents\n", 372}, 373{ 374 # New test case 375 diffName => "Making file executable (last diff)", 376 inputText => <<'END', 377diff --git a/foo.exe b/foo.exe 378old mode 100644 379new mode 100755 380END 381 expectedReturn => [ 382{ 383 svnConvertedText => <<'END', 384Index: foo.exe 385old mode 100644 386new mode 100755 387END 388 executableBitDelta => 1, 389 indexPath => "foo.exe", 390}, 391undef], 392 expectedNextLine => undef, 393}, 394{ 395 # New test case 396 diffName => "Making file executable (not last diff)", 397 inputText => <<'END', 398diff --git a/foo.exe b/foo.exe 399old mode 100644 400new mode 100755 401diff --git a/another_file.txt b/another_file.txt 402index d03e242..435ad3a 100755 403END 404 expectedReturn => [ 405{ 406 svnConvertedText => <<'END', 407Index: foo.exe 408old mode 100644 409new mode 100755 410END 411 executableBitDelta => 1, 412 indexPath => "foo.exe", 413}, 414"diff --git a/another_file.txt b/another_file.txt\n"], 415 expectedNextLine => "index d03e242..435ad3a 100755\n", 416}, 417{ 418 # New test case 419 diffName => "New executable file", 420 inputText => <<'END', 421diff --git a/foo b/foo 422new file mode 100755 423index 0000000..d03e242 424--- /dev/null 425+++ b/foo 426@@ -0,0 +1 @@ 427+file contents 428 429END 430 expectedReturn => [ 431{ 432 svnConvertedText => <<'END', 433Index: foo 434new file mode 100755 435index 0000000..d03e242 436--- foo 437+++ foo 438END 439 executableBitDelta => 1, 440 indexPath => "foo", 441 isNew => 1, 442}, 443"@@ -0,0 +1 @@\n"], 444 expectedNextLine => "+file contents\n", 445}, 446{ 447 # New test case 448 diffName => "Deleted executable file", 449 inputText => <<'END', 450diff --git a/foo b/foo 451deleted file mode 100755 452index d03e242..0000000 453--- a/foo 454+++ /dev/null 455@@ -1 +0,0 @@ 456-file contents 457 458END 459 expectedReturn => [ 460{ 461 svnConvertedText => <<'END', 462Index: foo 463deleted file mode 100755 464index d03e242..0000000 465--- foo 466+++ foo 467END 468 executableBitDelta => -1, 469 indexPath => "foo", 470 isDeletion => 1, 471}, 472"@@ -1 +0,0 @@\n"], 473 expectedNextLine => "-file contents\n", 474}, 475); 476 477my $testCasesCount = @testCaseHashRefs; 478plan(tests => 2 * $testCasesCount); # Total number of assertions. 479 480foreach my $testCase (@testCaseHashRefs) { 481 my $testNameStart = "parseGitDiffHeader(): $testCase->{diffName}: comparing"; 482 483 my $fileHandle; 484 open($fileHandle, "<", \$testCase->{inputText}); 485 my $line = <$fileHandle>; 486 487 my @got = VCSUtils::parseGitDiffHeader($fileHandle, $line); 488 my $expectedReturn = $testCase->{expectedReturn}; 489 490 is_deeply(\@got, $expectedReturn, "$testNameStart return value."); 491 492 my $gotNextLine = <$fileHandle>; 493 is($gotNextLine, $testCase->{expectedNextLine}, "$testNameStart next read line."); 494} 495