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 parseSvnDiffProperties(). 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)Property changes on: FileA 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "simple: add svn:mergeinfo", 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: Makefile 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:mergeinfo 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Merged /trunk/Makefile:r33020 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "Makefile", 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "simple: delete svn:mergeinfo", 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: Makefile 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Deleted: svn:mergeinfo 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Reverse-merged /trunk/Makefile:r33020 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "Makefile", 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "simple: modified svn:mergeinfo", 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: Makefile 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Modified: svn:mergeinfo 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Reverse-merged /trunk/Makefile:r33020 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Merged /trunk/Makefile:r41697 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "Makefile", 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "simple: delete svn:executable", 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Deleted: svn:executable 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) - * 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => -1, 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "simple: delete svn:executable using SVN 1.4 syntax", 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: svn:executable 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) - * 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => -1, 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#### 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Property value followed by empty line and start of next diff 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "add svn:executable, followed by empty line and start of next diff", 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: Makefile.shared 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"], 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => "Index: Makefile.shared\n", 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "add svn:executable, followed by empty line and start of next property diff", 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: Makefile.shared 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"], 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => "Property changes on: Makefile.shared\n", 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#### 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Property value followed by empty line and start of the binary contents 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "add svn:executable, followed by empty line and start of binary contents", 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"], 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\n", 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "custom property followed by svn:executable, empty line and start of binary contents", 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + This is an example sentence. 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"], 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\n", 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#### 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Successive properties 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "svn:executable followed by custom property", 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + This is an example sentence. 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "svn:executable followed by custom property using SVN 1.7 syntax", 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## -0,0 +1 ## 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+* 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)\ No newline at end of property 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## -0,0 +1 ## 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+This is an example sentence. 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "svn:executable followed by custom property without newline using SVN 1.7 syntax", 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## -0,0 +1 ## 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+* 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)\ No newline at end of property 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## -0,0 +1 ## 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)+This is an example sentence. 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)\ No newline at end of property 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "custom property followed by svn:executable", 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + This is an example sentence. 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#### 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Successive properties followed by empty line and start of next diff 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "custom property followed by svn:executable, empty line and start of next property diff", 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + This is an example sentence. 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: Makefile.shared 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"], 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => "Property changes on: Makefile.shared\n", 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "custom property followed by svn:executable, empty line and start of next index diff", 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + This is an example sentence. 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Index: Makefile.shared 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => 1, 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)"\n"], 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => "Index: Makefile.shared\n", 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#### 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Custom properties 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# FIXME: We do not support anything other than the svn:executable property. 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# We should add support for handling other properties. 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "simple: custom property", 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Name: documentation 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + This is an example sentence. 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "custom property followed by custom property", 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: copyright 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + Copyright (C) Research in Motion Limited 2010. All Rights Reserved. 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + This is an example sentence. 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#### 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Malformed property diffs 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)## 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# We shouldn't encounter such diffs in practice. 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) diffName => "svn:executable followed by custom property and svn:executable", 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputText => <<'END', 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Property changes on: FileA 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)___________________________________________________________________ 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: svn:executable 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + * 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Added: documentation 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) + This is an example sentence. 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Deleted: svn:executable 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) - * 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)END 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => [ 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) propertyPath => "FileA", 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) executableBitDelta => -1, 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)undef], 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedNextLine => undef, 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)); 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my $testCasesCount = @testCaseHashRefs; 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)plan(tests => 2 * $testCasesCount); # Total number of assertions. 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)foreach my $testCase (@testCaseHashRefs) { 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $testNameStart = "parseSvnDiffProperties(): $testCase->{diffName}: comparing"; 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $fileHandle; 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) open($fileHandle, "<", \$testCase->{inputText}); 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $line = <$fileHandle>; 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my @got = VCSUtils::parseSvnDiffProperties($fileHandle, $line); 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $expectedReturn = $testCase->{expectedReturn}; 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) is_deeply(\@got, $expectedReturn, "$testNameStart return value."); 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $gotNextLine = <$fileHandle>; 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) is($gotNextLine, $testCase->{expectedNextLine}, "$testNameStart next read line."); 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 444