15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#!/usr/bin/perl -w
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Copyright (C) Research in Motion Limited 2010. All Rights Reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Copyright (C) 2010 Chris Jerdonek (chris.jerdonek@gmail.com)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Copyright (C) 2012 Daniel Bates (dbates@intudata.com)
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Redistribution and use in source and binary forms, with or without
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# modification, are permitted provided that the following conditions are
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# met:
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#     * Redistributions of source code must retain the above copyright
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#     * Redistributions in binary form must reproduce the above
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# copyright notice, this list of conditions and the following disclaimer
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# in the documentation and/or other materials provided with the
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# distribution.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#     * Neither the name of Apple Computer, Inc. ("Apple") nor the names of
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# its contributors may be used to endorse or promote products derived
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# from this software without specific prior written permission.
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Unit tests of parseSvnProperty().
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use strict;
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use warnings;
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use Test::More;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use VCSUtils;
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my @testCaseHashRefs = (
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)####
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Simple test cases
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)##
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: add svn:executable",
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: delete svn:executable",
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Deleted: svn:executable
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   - *
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => -1,
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: add svn:mergeinfo",
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:mergeinfo
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Merged /trunk/Makefile:r33020
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:mergeinfo",
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "/trunk/Makefile:r33020",
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: delete svn:mergeinfo",
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Deleted: svn:mergeinfo
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Reverse-merged /trunk/Makefile:r33020
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:mergeinfo",
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => -1,
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "/trunk/Makefile:r33020",
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: modified svn:mergeinfo",
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Modified: svn:mergeinfo
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Reverse-merged /trunk/Makefile:r33020
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Merged /trunk/Makefile:r41697
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:mergeinfo",
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "/trunk/Makefile:r41697",
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)####
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Using SVN 1.4 syntax
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)##
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: modified svn:mergeinfo using SVN 1.4 syntax",
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: svn:mergeinfo
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Reverse-merged /trunk/Makefile:r33020
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Merged /trunk/Makefile:r41697
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:mergeinfo",
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "/trunk/Makefile:r41697",
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: delete svn:executable using SVN 1.4 syntax",
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: svn:executable
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   - *
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => -1,
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: add svn:executable using SVN 1.4 syntax",
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: svn:executable
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)####
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Using SVN 1.7 syntax
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)##
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: add svn:executable using SVN 1.7 syntax",
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## -0,0 +1 ##
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+*
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)\ No newline at end of property
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "simple: delete svn:executable using SVN 1.7 syntax",
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Deleted: svn:executable
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## -1 +0,0 ##
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)-*
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)\ No newline at end of property
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => -1,
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "add svn:mime-type and add svn:executable using SVN 1.7 syntax",
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:mime-type
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## -0,0 +1 ##
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+image/png
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)\ No newline at end of property
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## -0,0 +1 ##
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+*
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)\ No newline at end of property
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:mime-type",
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "image/png",
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"Added: svn:executable\n"],
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "## -0,0 +1 ##\n",
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)####
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Property value followed by empty line and start of next diff
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)##
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "add svn:executable, followed by empty line and start of next diff",
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: Makefile.shared
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Index: Makefile.shared\n",
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "add svn:executable, followed by empty line and start of next diff using Windows line endings",
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: Makefile.shared
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Index: Makefile.shared\r\n",
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "add svn:executable, followed by empty line and start of next property diff",
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: Makefile.shared
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Property changes on: Makefile.shared\n",
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "add svn:executable, followed by empty line and start of next property diff using Windows line endings",
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: Makefile.shared
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Property changes on: Makefile.shared\r\n",
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '+' change, followed by empty line and start of next diff",
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: documentation
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: Makefile.shared
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A\nlong sentence that spans\nmultiple lines.",
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Index: Makefile.shared\n",
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '+' change, followed by empty line and start of next diff using Windows line endings",
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: documentation
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: Makefile.shared
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A\r\nlong sentence that spans\r\nmultiple lines.",
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Index: Makefile.shared\r\n",
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '+' change, followed by empty line and start of next property diff",
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: documentation
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: Makefile.shared
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A\nlong sentence that spans\nmultiple lines.",
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Property changes on: Makefile.shared\n",
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '+' change, followed by empty line and start of next property diff using Windows line endings",
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: documentation
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: Makefile.shared
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A\r\nlong sentence that spans\r\nmultiple lines.",
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Property changes on: Makefile.shared\r\n",
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)####
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Property value followed by empty line and start of binary patch
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)##
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "add svn:executable, followed by empty line and start of binary patch",
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\n",
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "add svn:executable, followed by empty line and start of binary patch using Windows line endings",
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\r\n",
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '+' change, followed by empty line and start of binary patch",
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: documentation
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A\nlong sentence that spans\nmultiple lines.",
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\n",
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '+' change, followed by empty line and start of binary patch using Windows line endings",
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: documentation
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A\r\nlong sentence that spans\r\nmultiple lines.",
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\r\n",
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '-' change, followed by multi-line '+' change, empty line, and start of binary patch",
4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Modified: documentation
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   - A
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + Another
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "Another\nlong sentence that spans\nmultiple lines.",
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\n",
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '-' change, followed by multi-line '+' change, empty line, and start of binary patch using Windows line endings",
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Modified: documentation
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   - A
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + Another
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "Another\r\nlong sentence that spans\r\nmultiple lines.",
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\r\n",
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)####
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Successive properties
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)##
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "single-line '+' change followed by custom property with single-line '+' change",
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A sentence.
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:executable",
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "*",
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"Added: documentation\n"],
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "   + A sentence.\n",
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '+' change, followed by svn:executable",
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: documentation
5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A
5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: svn:executable
5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A\nlong sentence that spans\nmultiple lines.",
5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"Name: svn:executable\n"],
5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "   + *\n",
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '-' change, followed by multi-line '+' change and add svn:executable",
5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Modified: documentation
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   - A
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + Another
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + *
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "Another\nlong sentence that spans\nmultiple lines.",
5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"Added: svn:executable\n"],
5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "   + *\n",
5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "'Merged' change followed by 'Merged' change",
5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:mergeinfo
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Merged /trunk/Makefile:r33020
5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Merged /trunk/Makefile.shared:r58350
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:mergeinfo",
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "/trunk/Makefile.shared:r58350",
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "'Reverse-merged' change followed by 'Reverse-merged' change",
6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Deleted: svn:mergeinfo
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Reverse-merged /trunk/Makefile:r33020
6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   Reverse-merged /trunk/Makefile.shared:r58350
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "svn:mergeinfo",
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => -1,
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "/trunk/Makefile.shared:r58350",
6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef],
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)####
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Property values with trailing new lines.
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)##
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# FIXME: We do not support property values with trailing new lines, since it is difficult to
6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#        disambiguate them from the empty line that preceeds the contents of a binary patch as
6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#        in the test case (above): "multi-line '+' change, followed by empty line and start of binary patch".
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "single-line '+' with trailing new line",
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A sentence.
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A sentence.",
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "single-line '+' with trailing new line using Windows line endings",
6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A sentence.
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A sentence.",
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => undef,
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "single-line '+' with trailing new line, followed by empty line and start of binary patch",
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A sentence.
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A sentence.",
6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "\n",
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "single-line '+' with trailing new line, followed by empty line and start of binary patch using Windows line endings",
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A sentence.
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => 1,
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A sentence.",
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "\r\n",
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "single-line '-' change with trailing new line, and single-line '+' change",
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Modified: documentation
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   - A long sentence.
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A sentence.
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => -1, # Since we only interpret the '-' property.
7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A long sentence.",
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "   + A sentence.\n",
7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "single-line '-' change with trailing new line, and single-line '+' change using Windows line endings",
7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Modified: documentation
7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   - A long sentence.
7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + A sentence.
7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => -1, # Since we only interpret the '-' property.
7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A long sentence.",
7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "   + A sentence.\r\n",
7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '-' change with trailing new line, and multi-line '+' change",
7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => <<'END',
7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Modified: documentation
7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   - A
7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + Another
7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => -1, # Since we only interpret the '-' property.
7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A\nlong sentence that spans\nmultiple lines.",
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"],
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "   + Another\n",
7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    # New test
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    diffName => "multi-line '-' change with trailing new line, and multi-line '+' change using Windows line endings",
7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inputText => toWindowsLineEndings(<<'END',
7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Modified: documentation
7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   - A
7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   + Another
7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)long sentence that spans
7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)multiple lines.
7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END
7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)),
7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedReturn => [
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    name => "documentation",
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyChangeDelta => -1, # Since we only interpret the '-' property.
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    value => "A\r\nlong sentence that spans\r\nmultiple lines.",
7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\r\n"],
7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    expectedNextLine => "   + Another\r\n",
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)},
7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles));
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my $testCasesCount = @testCaseHashRefs;
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)plan(tests => 2 * $testCasesCount); # Total number of assertions.
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)foreach my $testCase (@testCaseHashRefs) {
7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $testNameStart = "parseSvnProperty(): $testCase->{diffName}: comparing";
7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $fileHandle;
7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    open($fileHandle, "<", \$testCase->{inputText});
7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $line = <$fileHandle>;
7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my @got = VCSUtils::parseSvnProperty($fileHandle, $line);
7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $expectedReturn = $testCase->{expectedReturn};
8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    is_deeply(\@got, $expectedReturn, "$testNameStart return value.");
8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $gotNextLine = <$fileHandle>;
8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    is($gotNextLine, $testCase->{expectedNextLine},  "$testNameStart next read line.");
8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
806