121939df44de1705786c545cd1bf519d47250322dBen Murdoch#!/usr/bin/perl -w 221939df44de1705786c545cd1bf519d47250322dBen Murdoch# 321939df44de1705786c545cd1bf519d47250322dBen Murdoch# Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org) 421939df44de1705786c545cd1bf519d47250322dBen Murdoch# 521939df44de1705786c545cd1bf519d47250322dBen Murdoch# Redistribution and use in source and binary forms, with or without 621939df44de1705786c545cd1bf519d47250322dBen Murdoch# modification, are permitted provided that the following conditions 721939df44de1705786c545cd1bf519d47250322dBen Murdoch# are met: 821939df44de1705786c545cd1bf519d47250322dBen Murdoch# 1. Redistributions of source code must retain the above copyright 921939df44de1705786c545cd1bf519d47250322dBen Murdoch# notice, this list of conditions and the following disclaimer. 1021939df44de1705786c545cd1bf519d47250322dBen Murdoch# 2. Redistributions in binary form must reproduce the above copyright 1121939df44de1705786c545cd1bf519d47250322dBen Murdoch# notice, this list of conditions and the following disclaimer in the 1221939df44de1705786c545cd1bf519d47250322dBen Murdoch# documentation and/or other materials provided with the distribution. 1321939df44de1705786c545cd1bf519d47250322dBen Murdoch# 1421939df44de1705786c545cd1bf519d47250322dBen Murdoch# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND 1521939df44de1705786c545cd1bf519d47250322dBen Murdoch# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1621939df44de1705786c545cd1bf519d47250322dBen Murdoch# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1721939df44de1705786c545cd1bf519d47250322dBen Murdoch# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR 1821939df44de1705786c545cd1bf519d47250322dBen Murdoch# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1921939df44de1705786c545cd1bf519d47250322dBen Murdoch# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 2021939df44de1705786c545cd1bf519d47250322dBen Murdoch# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 2121939df44de1705786c545cd1bf519d47250322dBen Murdoch# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 2221939df44de1705786c545cd1bf519d47250322dBen Murdoch# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2321939df44de1705786c545cd1bf519d47250322dBen Murdoch# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2421939df44de1705786c545cd1bf519d47250322dBen Murdoch 2521939df44de1705786c545cd1bf519d47250322dBen Murdoch# Unit tests of parseGitDiffHeader(). 2621939df44de1705786c545cd1bf519d47250322dBen Murdoch 2721939df44de1705786c545cd1bf519d47250322dBen Murdochuse strict; 2821939df44de1705786c545cd1bf519d47250322dBen Murdochuse warnings; 2921939df44de1705786c545cd1bf519d47250322dBen Murdoch 3021939df44de1705786c545cd1bf519d47250322dBen Murdochuse Test::More; 3121939df44de1705786c545cd1bf519d47250322dBen Murdochuse VCSUtils; 3221939df44de1705786c545cd1bf519d47250322dBen Murdoch 3321939df44de1705786c545cd1bf519d47250322dBen Murdoch# The array of test cases. 3421939df44de1705786c545cd1bf519d47250322dBen Murdochmy @testCaseHashRefs = ( 3521939df44de1705786c545cd1bf519d47250322dBen Murdoch{ # New test 3621939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "Modified file", 3721939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 3821939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo.h b/foo.h 3921939df44de1705786c545cd1bf519d47250322dBen Murdochindex f5d5e74..3b6aa92 100644 4021939df44de1705786c545cd1bf519d47250322dBen Murdoch--- a/foo.h 4121939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ b/foo.h 4221939df44de1705786c545cd1bf519d47250322dBen Murdoch@@ -1 +1 @@ 4321939df44de1705786c545cd1bf519d47250322dBen Murdoch-file contents 4421939df44de1705786c545cd1bf519d47250322dBen Murdoch+new file contents 4521939df44de1705786c545cd1bf519d47250322dBen MurdochEND 4621939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 4721939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 4821939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 4921939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo.h 5021939df44de1705786c545cd1bf519d47250322dBen Murdochindex f5d5e74..3b6aa92 100644 5121939df44de1705786c545cd1bf519d47250322dBen Murdoch--- foo.h 5221939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ foo.h 5321939df44de1705786c545cd1bf519d47250322dBen MurdochEND 5421939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo.h", 5521939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 5621939df44de1705786c545cd1bf519d47250322dBen Murdoch"@@ -1 +1 @@\n"], 5721939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "-file contents\n", 5821939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 5921939df44de1705786c545cd1bf519d47250322dBen Murdoch{ # New test 606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "new file", 6121939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 6221939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo.h b/foo.h 6321939df44de1705786c545cd1bf519d47250322dBen Murdochnew file mode 100644 6421939df44de1705786c545cd1bf519d47250322dBen Murdochindex 0000000..3c9f114 6521939df44de1705786c545cd1bf519d47250322dBen Murdoch--- /dev/null 6621939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ b/foo.h 6721939df44de1705786c545cd1bf519d47250322dBen Murdoch@@ -0,0 +1,34 @@ 6821939df44de1705786c545cd1bf519d47250322dBen Murdoch+<html> 6921939df44de1705786c545cd1bf519d47250322dBen MurdochEND 7021939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 7121939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 7221939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 7321939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo.h 7421939df44de1705786c545cd1bf519d47250322dBen Murdochnew file mode 100644 7521939df44de1705786c545cd1bf519d47250322dBen Murdochindex 0000000..3c9f114 7621939df44de1705786c545cd1bf519d47250322dBen Murdoch--- foo.h 7721939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ foo.h 7821939df44de1705786c545cd1bf519d47250322dBen MurdochEND 7921939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo.h", 806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen isNew => 1, 8121939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 8221939df44de1705786c545cd1bf519d47250322dBen Murdoch"@@ -0,0 +1,34 @@\n"], 8321939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "+<html>\n", 8421939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 8521939df44de1705786c545cd1bf519d47250322dBen Murdoch{ # New test 866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "file deletion", 876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendiff --git a/foo b/foo 896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendeleted file mode 100644 906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenindex 1e50d1d..0000000 916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen--- a/foo 926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen+++ /dev/null 936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen@@ -1,1 +0,0 @@ 946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen-line1 956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendiff --git a/configure.ac b/configure.ac 966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenindex d45dd40..3494526 100644 976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 1006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen svnConvertedText => <<'END', 1016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenIndex: foo 1026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendeleted file mode 100644 1036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenindex 1e50d1d..0000000 1046c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen--- foo 1056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen+++ foo 1066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 1076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen indexPath => "foo", 1086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen isDeletion => 1, 1096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"@@ -1,1 +0,0 @@\n"], 1116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "-line1\n", 1126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ # New test 11421939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "using --no-prefix", 11521939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 11621939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git foo.h foo.h 11721939df44de1705786c545cd1bf519d47250322dBen Murdochindex c925780..9e65c43 100644 11821939df44de1705786c545cd1bf519d47250322dBen Murdoch--- foo.h 11921939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ foo.h 12021939df44de1705786c545cd1bf519d47250322dBen Murdoch@@ -1,3 +1,17 @@ 12121939df44de1705786c545cd1bf519d47250322dBen Murdoch+contents 12221939df44de1705786c545cd1bf519d47250322dBen MurdochEND 12321939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 12421939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 12521939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 12621939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo.h 12721939df44de1705786c545cd1bf519d47250322dBen Murdochindex c925780..9e65c43 100644 12821939df44de1705786c545cd1bf519d47250322dBen Murdoch--- foo.h 12921939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ foo.h 13021939df44de1705786c545cd1bf519d47250322dBen MurdochEND 13121939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo.h", 13221939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 13321939df44de1705786c545cd1bf519d47250322dBen Murdoch"@@ -1,3 +1,17 @@\n"], 13421939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "+contents\n", 13521939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 13621939df44de1705786c545cd1bf519d47250322dBen Murdoch#### 13721939df44de1705786c545cd1bf519d47250322dBen Murdoch# Copy operations 13821939df44de1705786c545cd1bf519d47250322dBen Murdoch## 13921939df44de1705786c545cd1bf519d47250322dBen Murdoch{ # New test 14021939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "copy (with similarity index 100%)", 14121939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 14221939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo b/foo_new 14321939df44de1705786c545cd1bf519d47250322dBen Murdochsimilarity index 100% 14421939df44de1705786c545cd1bf519d47250322dBen Murdochcopy from foo 14521939df44de1705786c545cd1bf519d47250322dBen Murdochcopy to foo_new 14621939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/bar b/bar 14721939df44de1705786c545cd1bf519d47250322dBen Murdochindex d45dd40..3494526 100644 14821939df44de1705786c545cd1bf519d47250322dBen MurdochEND 14921939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 15021939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 15121939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 15221939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo_new 15321939df44de1705786c545cd1bf519d47250322dBen Murdochsimilarity index 100% 15421939df44de1705786c545cd1bf519d47250322dBen Murdochcopy from foo 15521939df44de1705786c545cd1bf519d47250322dBen Murdochcopy to foo_new 15621939df44de1705786c545cd1bf519d47250322dBen MurdochEND 15721939df44de1705786c545cd1bf519d47250322dBen Murdoch copiedFromPath => "foo", 15821939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo_new", 15921939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 16021939df44de1705786c545cd1bf519d47250322dBen Murdoch"diff --git a/bar b/bar\n"], 16121939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "index d45dd40..3494526 100644\n", 16221939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 16321939df44de1705786c545cd1bf519d47250322dBen Murdoch{ # New test 16421939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "copy (with similarity index < 100%)", 16521939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 16621939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo b/foo_new 16721939df44de1705786c545cd1bf519d47250322dBen Murdochsimilarity index 99% 16821939df44de1705786c545cd1bf519d47250322dBen Murdochcopy from foo 16921939df44de1705786c545cd1bf519d47250322dBen Murdochcopy to foo_new 17021939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/bar b/bar 17121939df44de1705786c545cd1bf519d47250322dBen Murdochindex d45dd40..3494526 100644 17221939df44de1705786c545cd1bf519d47250322dBen MurdochEND 17321939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 17421939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 17521939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 17621939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo_new 17721939df44de1705786c545cd1bf519d47250322dBen Murdochsimilarity index 99% 17821939df44de1705786c545cd1bf519d47250322dBen Murdochcopy from foo 17921939df44de1705786c545cd1bf519d47250322dBen Murdochcopy to foo_new 18021939df44de1705786c545cd1bf519d47250322dBen MurdochEND 1816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen copiedFromPath => "foo", 1826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen indexPath => "foo_new", 1836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen isCopyWithChanges => 1, 1846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"diff --git a/bar b/bar\n"], 1866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "index d45dd40..3494526 100644\n", 1876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ # New test 1896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "rename (with similarity index 100%)", 1906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 1916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendiff --git a/foo b/foo_new 1926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsensimilarity index 100% 1936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename from foo 1946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename to foo_new 1956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendiff --git a/bar b/bar 1966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenindex d45dd40..3494526 100644 1976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 1986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 1996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 2006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen svnConvertedText => <<'END', 2016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenIndex: foo_new 2026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsensimilarity index 100% 2036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename from foo 2046c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename to foo_new 2056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 2066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen copiedFromPath => "foo", 2076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen indexPath => "foo_new", 2086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shouldDeleteSource => 1, 2096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 2106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"diff --git a/bar b/bar\n"], 2116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "index d45dd40..3494526 100644\n", 2126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 2136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ # New test 2146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "rename (with similarity index < 100%)", 2156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 2166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendiff --git a/foo b/foo_new 2176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsensimilarity index 99% 2186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename from foo 2196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename to foo_new 2206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenindex 1e50d1d..1459d21 100644 2216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen--- a/foo 2226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen+++ b/foo_new 2236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen@@ -15,3 +15,4 @@ release r deployment dep deploy: 2246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen line1 2256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen line2 2266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen line3 2276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen+line4 2286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendiff --git a/bar b/bar 2296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenindex d45dd40..3494526 100644 2306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 2316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 2326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 2336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen svnConvertedText => <<'END', 2346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenIndex: foo_new 2356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsensimilarity index 99% 2366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename from foo 2376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename to foo_new 2386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenindex 1e50d1d..1459d21 100644 2396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen--- foo_new 2406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen+++ foo_new 2416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 2426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen copiedFromPath => "foo", 2436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen indexPath => "foo_new", 2446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen isCopyWithChanges => 1, 2456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shouldDeleteSource => 1, 2466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 2476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"@@ -15,3 +15,4 @@ release r deployment dep deploy:\n"], 2486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => " line1\n", 2496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 2506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ # New test 2516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "rename (with executable bit change)", 2526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 2536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendiff --git a/foo b/foo_new 2546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenold mode 100644 2556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsennew mode 100755 2566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsensimilarity index 100% 2576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename from foo 2586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename to foo_new 2596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendiff --git a/bar b/bar 2606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenindex d45dd40..3494526 100644 2616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 2626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 2636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 2646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen svnConvertedText => <<'END', 2656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenIndex: foo_new 2666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenold mode 100644 2676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsennew mode 100755 2686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsensimilarity index 100% 2696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename from foo 2706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenrename to foo_new 2716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 2726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen copiedFromPath => "foo", 2736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen executableBitDelta => 1, 27421939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo_new", 2756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen isCopyWithChanges => 1, 2766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shouldDeleteSource => 1, 27721939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 27821939df44de1705786c545cd1bf519d47250322dBen Murdoch"diff --git a/bar b/bar\n"], 27921939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "index d45dd40..3494526 100644\n", 28021939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 28121939df44de1705786c545cd1bf519d47250322dBen Murdoch#### 28221939df44de1705786c545cd1bf519d47250322dBen Murdoch# Binary file test cases 28321939df44de1705786c545cd1bf519d47250322dBen Murdoch## 28421939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 28521939df44de1705786c545cd1bf519d47250322dBen Murdoch # New test case 28621939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "New binary file", 28721939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 28821939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo.gif b/foo.gif 28921939df44de1705786c545cd1bf519d47250322dBen Murdochnew file mode 100644 29021939df44de1705786c545cd1bf519d47250322dBen Murdochindex 0000000000000000000000000000000000000000..64a9532e7794fcd791f6f12157406d9060151690 29121939df44de1705786c545cd1bf519d47250322dBen MurdochGIT binary patch 29221939df44de1705786c545cd1bf519d47250322dBen Murdochliteral 7 29321939df44de1705786c545cd1bf519d47250322dBen MurdochOcmYex&reDa;sO8*F9L)B 29421939df44de1705786c545cd1bf519d47250322dBen Murdoch 29521939df44de1705786c545cd1bf519d47250322dBen Murdochliteral 0 29621939df44de1705786c545cd1bf519d47250322dBen MurdochHcmV?d00001 29721939df44de1705786c545cd1bf519d47250322dBen Murdoch 29821939df44de1705786c545cd1bf519d47250322dBen MurdochEND 29921939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 30021939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 30121939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 30221939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo.gif 30321939df44de1705786c545cd1bf519d47250322dBen Murdochnew file mode 100644 30421939df44de1705786c545cd1bf519d47250322dBen Murdochindex 0000000000000000000000000000000000000000..64a9532e7794fcd791f6f12157406d9060151690 30521939df44de1705786c545cd1bf519d47250322dBen MurdochGIT binary patch 30621939df44de1705786c545cd1bf519d47250322dBen MurdochEND 30721939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo.gif", 30821939df44de1705786c545cd1bf519d47250322dBen Murdoch isBinary => 1, 3096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen isNew => 1, 31021939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 31121939df44de1705786c545cd1bf519d47250322dBen Murdoch"literal 7\n"], 31221939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "OcmYex&reDa;sO8*F9L)B\n", 31321939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 31421939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 31521939df44de1705786c545cd1bf519d47250322dBen Murdoch # New test case 31621939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "Deleted binary file", 31721939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 31821939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo.gif b/foo.gif 31921939df44de1705786c545cd1bf519d47250322dBen Murdochdeleted file mode 100644 32021939df44de1705786c545cd1bf519d47250322dBen Murdochindex 323fae0..0000000 32121939df44de1705786c545cd1bf519d47250322dBen MurdochGIT binary patch 32221939df44de1705786c545cd1bf519d47250322dBen Murdochliteral 0 32321939df44de1705786c545cd1bf519d47250322dBen MurdochHcmV?d00001 32421939df44de1705786c545cd1bf519d47250322dBen Murdoch 32521939df44de1705786c545cd1bf519d47250322dBen Murdochliteral 7 32621939df44de1705786c545cd1bf519d47250322dBen MurdochOcmYex&reDa;sO8*F9L)B 32721939df44de1705786c545cd1bf519d47250322dBen Murdoch 32821939df44de1705786c545cd1bf519d47250322dBen MurdochEND 32921939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 33021939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 33121939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 33221939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo.gif 33321939df44de1705786c545cd1bf519d47250322dBen Murdochdeleted file mode 100644 33421939df44de1705786c545cd1bf519d47250322dBen Murdochindex 323fae0..0000000 33521939df44de1705786c545cd1bf519d47250322dBen MurdochGIT binary patch 33621939df44de1705786c545cd1bf519d47250322dBen MurdochEND 33721939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo.gif", 33821939df44de1705786c545cd1bf519d47250322dBen Murdoch isBinary => 1, 3396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen isDeletion => 1, 34021939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 34121939df44de1705786c545cd1bf519d47250322dBen Murdoch"literal 0\n"], 34221939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "HcmV?d00001\n", 34321939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 34421939df44de1705786c545cd1bf519d47250322dBen Murdoch#### 34521939df44de1705786c545cd1bf519d47250322dBen Murdoch# Executable bit test cases 34621939df44de1705786c545cd1bf519d47250322dBen Murdoch## 34721939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 34821939df44de1705786c545cd1bf519d47250322dBen Murdoch # New test case 34921939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "Modified executable file", 35021939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 35121939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo b/foo 35221939df44de1705786c545cd1bf519d47250322dBen Murdochindex d03e242..435ad3a 100755 35321939df44de1705786c545cd1bf519d47250322dBen Murdoch--- a/foo 35421939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ b/foo 35521939df44de1705786c545cd1bf519d47250322dBen Murdoch@@ -1 +1 @@ 35621939df44de1705786c545cd1bf519d47250322dBen Murdoch-file contents 35721939df44de1705786c545cd1bf519d47250322dBen Murdoch+new file contents 35821939df44de1705786c545cd1bf519d47250322dBen Murdoch 35921939df44de1705786c545cd1bf519d47250322dBen MurdochEND 36021939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 36121939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 36221939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 36321939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo 36421939df44de1705786c545cd1bf519d47250322dBen Murdochindex d03e242..435ad3a 100755 36521939df44de1705786c545cd1bf519d47250322dBen Murdoch--- foo 36621939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ foo 36721939df44de1705786c545cd1bf519d47250322dBen MurdochEND 36821939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo", 36921939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 37021939df44de1705786c545cd1bf519d47250322dBen Murdoch"@@ -1 +1 @@\n"], 37121939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "-file contents\n", 37221939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 37321939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 37421939df44de1705786c545cd1bf519d47250322dBen Murdoch # New test case 37521939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "Making file executable (last diff)", 37621939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 37721939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo.exe b/foo.exe 37821939df44de1705786c545cd1bf519d47250322dBen Murdochold mode 100644 37921939df44de1705786c545cd1bf519d47250322dBen Murdochnew mode 100755 38021939df44de1705786c545cd1bf519d47250322dBen MurdochEND 38121939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 38221939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 38321939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 38421939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo.exe 38521939df44de1705786c545cd1bf519d47250322dBen Murdochold mode 100644 38621939df44de1705786c545cd1bf519d47250322dBen Murdochnew mode 100755 38721939df44de1705786c545cd1bf519d47250322dBen MurdochEND 38821939df44de1705786c545cd1bf519d47250322dBen Murdoch executableBitDelta => 1, 38921939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo.exe", 39021939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 39121939df44de1705786c545cd1bf519d47250322dBen Murdochundef], 39221939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => undef, 39321939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 39421939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 39521939df44de1705786c545cd1bf519d47250322dBen Murdoch # New test case 39621939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "Making file executable (not last diff)", 39721939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 39821939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo.exe b/foo.exe 39921939df44de1705786c545cd1bf519d47250322dBen Murdochold mode 100644 40021939df44de1705786c545cd1bf519d47250322dBen Murdochnew mode 100755 40121939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/another_file.txt b/another_file.txt 40221939df44de1705786c545cd1bf519d47250322dBen Murdochindex d03e242..435ad3a 100755 40321939df44de1705786c545cd1bf519d47250322dBen MurdochEND 40421939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 40521939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 40621939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 40721939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo.exe 40821939df44de1705786c545cd1bf519d47250322dBen Murdochold mode 100644 40921939df44de1705786c545cd1bf519d47250322dBen Murdochnew mode 100755 41021939df44de1705786c545cd1bf519d47250322dBen MurdochEND 41121939df44de1705786c545cd1bf519d47250322dBen Murdoch executableBitDelta => 1, 41221939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo.exe", 41321939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 41421939df44de1705786c545cd1bf519d47250322dBen Murdoch"diff --git a/another_file.txt b/another_file.txt\n"], 41521939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "index d03e242..435ad3a 100755\n", 41621939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 41721939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 41821939df44de1705786c545cd1bf519d47250322dBen Murdoch # New test case 41921939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "New executable file", 42021939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 42121939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo b/foo 42221939df44de1705786c545cd1bf519d47250322dBen Murdochnew file mode 100755 42321939df44de1705786c545cd1bf519d47250322dBen Murdochindex 0000000..d03e242 42421939df44de1705786c545cd1bf519d47250322dBen Murdoch--- /dev/null 42521939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ b/foo 42621939df44de1705786c545cd1bf519d47250322dBen Murdoch@@ -0,0 +1 @@ 42721939df44de1705786c545cd1bf519d47250322dBen Murdoch+file contents 42821939df44de1705786c545cd1bf519d47250322dBen Murdoch 42921939df44de1705786c545cd1bf519d47250322dBen MurdochEND 43021939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 43121939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 43221939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 43321939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo 43421939df44de1705786c545cd1bf519d47250322dBen Murdochnew file mode 100755 43521939df44de1705786c545cd1bf519d47250322dBen Murdochindex 0000000..d03e242 43621939df44de1705786c545cd1bf519d47250322dBen Murdoch--- foo 43721939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ foo 43821939df44de1705786c545cd1bf519d47250322dBen MurdochEND 43921939df44de1705786c545cd1bf519d47250322dBen Murdoch executableBitDelta => 1, 44021939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo", 4416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen isNew => 1, 44221939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 44321939df44de1705786c545cd1bf519d47250322dBen Murdoch"@@ -0,0 +1 @@\n"], 44421939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "+file contents\n", 44521939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 44621939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 44721939df44de1705786c545cd1bf519d47250322dBen Murdoch # New test case 44821939df44de1705786c545cd1bf519d47250322dBen Murdoch diffName => "Deleted executable file", 44921939df44de1705786c545cd1bf519d47250322dBen Murdoch inputText => <<'END', 45021939df44de1705786c545cd1bf519d47250322dBen Murdochdiff --git a/foo b/foo 45121939df44de1705786c545cd1bf519d47250322dBen Murdochdeleted file mode 100755 45221939df44de1705786c545cd1bf519d47250322dBen Murdochindex d03e242..0000000 45321939df44de1705786c545cd1bf519d47250322dBen Murdoch--- a/foo 45421939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ /dev/null 45521939df44de1705786c545cd1bf519d47250322dBen Murdoch@@ -1 +0,0 @@ 45621939df44de1705786c545cd1bf519d47250322dBen Murdoch-file contents 45721939df44de1705786c545cd1bf519d47250322dBen Murdoch 45821939df44de1705786c545cd1bf519d47250322dBen MurdochEND 45921939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedReturn => [ 46021939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 46121939df44de1705786c545cd1bf519d47250322dBen Murdoch svnConvertedText => <<'END', 46221939df44de1705786c545cd1bf519d47250322dBen MurdochIndex: foo 46321939df44de1705786c545cd1bf519d47250322dBen Murdochdeleted file mode 100755 46421939df44de1705786c545cd1bf519d47250322dBen Murdochindex d03e242..0000000 46521939df44de1705786c545cd1bf519d47250322dBen Murdoch--- foo 46621939df44de1705786c545cd1bf519d47250322dBen Murdoch+++ foo 46721939df44de1705786c545cd1bf519d47250322dBen MurdochEND 46821939df44de1705786c545cd1bf519d47250322dBen Murdoch executableBitDelta => -1, 46921939df44de1705786c545cd1bf519d47250322dBen Murdoch indexPath => "foo", 4706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen isDeletion => 1, 47121939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 47221939df44de1705786c545cd1bf519d47250322dBen Murdoch"@@ -1 +0,0 @@\n"], 47321939df44de1705786c545cd1bf519d47250322dBen Murdoch expectedNextLine => "-file contents\n", 47421939df44de1705786c545cd1bf519d47250322dBen Murdoch}, 47521939df44de1705786c545cd1bf519d47250322dBen Murdoch); 47621939df44de1705786c545cd1bf519d47250322dBen Murdoch 47721939df44de1705786c545cd1bf519d47250322dBen Murdochmy $testCasesCount = @testCaseHashRefs; 47821939df44de1705786c545cd1bf519d47250322dBen Murdochplan(tests => 2 * $testCasesCount); # Total number of assertions. 47921939df44de1705786c545cd1bf519d47250322dBen Murdoch 48021939df44de1705786c545cd1bf519d47250322dBen Murdochforeach my $testCase (@testCaseHashRefs) { 48121939df44de1705786c545cd1bf519d47250322dBen Murdoch my $testNameStart = "parseGitDiffHeader(): $testCase->{diffName}: comparing"; 48221939df44de1705786c545cd1bf519d47250322dBen Murdoch 48321939df44de1705786c545cd1bf519d47250322dBen Murdoch my $fileHandle; 48421939df44de1705786c545cd1bf519d47250322dBen Murdoch open($fileHandle, "<", \$testCase->{inputText}); 48521939df44de1705786c545cd1bf519d47250322dBen Murdoch my $line = <$fileHandle>; 48621939df44de1705786c545cd1bf519d47250322dBen Murdoch 48721939df44de1705786c545cd1bf519d47250322dBen Murdoch my @got = VCSUtils::parseGitDiffHeader($fileHandle, $line); 48821939df44de1705786c545cd1bf519d47250322dBen Murdoch my $expectedReturn = $testCase->{expectedReturn}; 48921939df44de1705786c545cd1bf519d47250322dBen Murdoch 49021939df44de1705786c545cd1bf519d47250322dBen Murdoch is_deeply(\@got, $expectedReturn, "$testNameStart return value."); 49121939df44de1705786c545cd1bf519d47250322dBen Murdoch 49221939df44de1705786c545cd1bf519d47250322dBen Murdoch my $gotNextLine = <$fileHandle>; 49321939df44de1705786c545cd1bf519d47250322dBen Murdoch is($gotNextLine, $testCase->{expectedNextLine}, "$testNameStart next read line."); 49421939df44de1705786c545cd1bf519d47250322dBen Murdoch} 495