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)# Copyright (C) 2012 Daniel Bates (dbates@intudata.com)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Redistribution and use in source and binary forms, with or without
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# modification, are permitted provided that the following conditions are
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# met:
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#     * Redistributions of source code must retain the above copyright
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#     * Redistributions in binary form must reproduce the above
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# copyright notice, this list of conditions and the following disclaimer
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# in the documentation and/or other materials provided with the
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# distribution.
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#     * Neither the name of Apple Computer, Inc. ("Apple") nor the names of
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# its contributors may be used to endorse or promote products derived
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# from this software without specific prior written permission.
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Unit tests of parseSvnDiffHeader().
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use strict;
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use warnings;
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use Test::More;
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use VCSUtils;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# The array of test cases.
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my @testCaseHashRefs = (
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple diff",
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: WebKitTools/Scripts/VCSUtils.pm
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- WebKitTools/Scripts/VCSUtils.pm	(revision 53004)
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ WebKitTools/Scripts/VCSUtils.pm	(working copy)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)@@ -32,6 +32,7 @@ use strict;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) use warnings;
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    svnConvertedText => <<'END',
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: WebKitTools/Scripts/VCSUtils.pm
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- WebKitTools/Scripts/VCSUtils.pm	(revision 53004)
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ WebKitTools/Scripts/VCSUtils.pm	(working copy)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    indexPath => "WebKitTools/Scripts/VCSUtils.pm",
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    sourceRevision => "53004",
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"@@ -32,6 +32,7 @@ use strict;\n"],
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => " use warnings;\n",
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "new file",
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl	(revision 0)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl	(revision 0)
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)@@ -0,0 +1,262 @@
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+#!/usr/bin/perl -w
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    svnConvertedText => <<'END',
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl	(revision 0)
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl	(revision 0)
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    indexPath => "WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl",
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isNew => 1,
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"@@ -0,0 +1,262 @@\n"],
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "+#!/usr/bin/perl -w\n",
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "new file with spaces in its name",
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme	(revision 0)
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme	(revision 0)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)@@ -0,0 +1,8 @@
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+<?xml version="1.0" encoding="UTF-8"?>
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    svnConvertedText => <<'END',
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme	(revision 0)
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme	(revision 0)
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    indexPath => "WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme",
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isNew => 1,
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"@@ -0,0 +1,8 @@\n"],
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "+<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "copied file",
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: index_path.py
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- index_path.py	(revision 53048)	(from copied_from_path.py:53048)
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ index_path.py	(working copy)
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)@@ -0,0 +1,7 @@
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+# Python file...
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    svnConvertedText => <<'END',
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: index_path.py
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- index_path.py	(revision 53048)	(from copied_from_path.py:53048)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ index_path.py	(working copy)
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    copiedFromPath => "copied_from_path.py",
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    indexPath => "index_path.py",
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    sourceRevision => 53048,
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"@@ -0,0 +1,7 @@\n"],
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "+# Python file...\n",
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "contains \\r\\n lines",
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<END, # No single quotes to allow interpolation of "\r"
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: index_path.py\r
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================\r
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- index_path.py	(revision 53048)\r
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ index_path.py	(working copy)\r
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)@@ -0,0 +1,7 @@\r
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+# Python file...\r
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    svnConvertedText => <<END, # No single quotes to allow interpolation of "\r"
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: index_path.py\r
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================\r
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- index_path.py	(revision 53048)\r
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ index_path.py	(working copy)\r
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    indexPath => "index_path.py",
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    sourceRevision => 53048,
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"@@ -0,0 +1,7 @@\r\n"],
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "+# Python file...\r\n",
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "contains path corrections",
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: index_path.py
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- bad_path	(revision 53048)	(from copied_from_path.py:53048)
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ bad_path	(working copy)
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)@@ -0,0 +1,7 @@
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+# Python file...
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    svnConvertedText => <<'END',
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: index_path.py
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- index_path.py	(revision 53048)	(from copied_from_path.py:53048)
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ index_path.py	(working copy)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    copiedFromPath => "copied_from_path.py",
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    indexPath => "index_path.py",
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    sourceRevision => 53048,
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"@@ -0,0 +1,7 @@\n"],
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "+# Python file...\n",
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)####
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#    Binary test cases
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)##
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "binary file",
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: test_file.swf
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Cannot display: file marked as a binary type.
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)svn:mime-type = application/octet-stream
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: test_file.swf
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: svn:mime-type
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + application/octet-stream
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    svnConvertedText => <<'END',
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: test_file.swf
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Cannot display: file marked as a binary type.
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)svn:mime-type = application/octet-stream
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    indexPath => "test_file.swf",
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isBinary => 1,
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"Property changes on: test_file.swf\n"],
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "___________________________________________________________________\n",
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "binary file using SVN 1.7 syntax",
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: test_file.swf
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Cannot display: file marked as a binary type.
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)svn:mime-type = application/octet-stream
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: test_file.swf
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- test_file.swf
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ test_file.swf
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: test_file.swf
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:mime-type
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## -0,0 +1 ##
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+application/octet-stream
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)\ No newline at end of property
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    svnConvertedText => <<'END',
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: test_file.swf
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Cannot display: file marked as a binary type.
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)svn:mime-type = application/octet-stream
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: test_file.swf
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)===================================================================
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)--- test_file.swf
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+++ test_file.swf
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    indexPath => "test_file.swf",
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isBinary => 1,
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Property changes on: test_file.swf\n",
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles));
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my $testCasesCount = @testCaseHashRefs;
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)plan(tests => 2 * $testCasesCount); # Total number of assertions.
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)foreach my $testCase (@testCaseHashRefs) {
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $testNameStart = "parseSvnDiffHeader(): $testCase->{diffName}: comparing";
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $fileHandle;
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    open($fileHandle, "<", \$testCase->{inputText});
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $line = <$fileHandle>;
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my @got = VCSUtils::parseSvnDiffHeader($fileHandle, $line);
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $expectedReturn = $testCase->{expectedReturn};
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    is_deeply(\@got, $expectedReturn, "$testNameStart return value.");
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $gotNextLine = <$fileHandle>;
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    is($gotNextLine, $testCase->{expectedNextLine},  "$testNameStart next read line.");
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
289