16c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#!/usr/bin/perl -w 26c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# 36c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Copyright (C) Research in Motion Limited 2010. All Rights Reserved. 46c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Copyright (C) 2010 Chris Jerdonek (chris.jerdonek@gmail.com) 56c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# 66c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Redistribution and use in source and binary forms, with or without 76c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# modification, are permitted provided that the following conditions are 86c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# met: 96c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# 106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# * Redistributions of source code must retain the above copyright 116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# notice, this list of conditions and the following disclaimer. 126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# * Redistributions in binary form must reproduce the above 136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# copyright notice, this list of conditions and the following disclaimer 146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# in the documentation and/or other materials provided with the 156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# distribution. 166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# * Neither the name of Apple Computer, Inc. ("Apple") nor the names of 176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# its contributors may be used to endorse or promote products derived 186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# from this software without specific prior written permission. 196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# 206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Unit tests of parseSvnProperty(). 336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenuse strict; 356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenuse warnings; 366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenuse Test::More; 386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenuse VCSUtils; 396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmy @testCaseHashRefs = ( 416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#### 426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Simple test cases 436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen## 446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "simple: add svn:executable", 476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenAdded: svn:executable 496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + * 506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "svn:executable", 546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "*", 566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenundef], 586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => undef, 596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "simple: delete svn:executable", 636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenDeleted: svn:executable 656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen - * 666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "svn:executable", 706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => -1, 716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "*", 726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenundef], 746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => undef, 756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 765abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 775abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick # New test 785abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick diffName => "simple: add svn:mergeinfo", 795abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick inputText => <<'END', 805abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickAdded: svn:mergeinfo 815abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Merged /trunk/Makefile:r33020 825abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickEND 835abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedReturn => [ 845abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 855abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick name => "svn:mergeinfo", 865abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick propertyChangeDelta => 1, 875abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick value => "/trunk/Makefile:r33020", 885abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 895abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickundef], 905abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedNextLine => undef, 915abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 925abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 935abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick # New test 945abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick diffName => "simple: delete svn:mergeinfo", 955abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick inputText => <<'END', 965abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickDeleted: svn:mergeinfo 975abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Reverse-merged /trunk/Makefile:r33020 985abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickEND 995abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedReturn => [ 1005abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1015abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick name => "svn:mergeinfo", 1025abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick propertyChangeDelta => -1, 1035abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick value => "/trunk/Makefile:r33020", 1045abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 1055abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickundef], 1065abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedNextLine => undef, 1075abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 1085abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1095abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick # New test 1105abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick diffName => "simple: modified svn:mergeinfo", 1115abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick inputText => <<'END', 1125abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickModified: svn:mergeinfo 1135abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Reverse-merged /trunk/Makefile:r33020 1145abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Merged /trunk/Makefile:r41697 1155abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickEND 1165abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedReturn => [ 1175abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1185abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick name => "svn:mergeinfo", 1195abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick propertyChangeDelta => 1, 1205abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick value => "/trunk/Makefile:r41697", 1215abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 1225abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickundef], 1235abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedNextLine => undef, 1245abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 1256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#### 1266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Using SVN 1.4 syntax 1276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen## 1286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 1296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 1305abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick diffName => "simple: modified svn:mergeinfo using SVN 1.4 syntax", 1315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick inputText => <<'END', 1325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickName: svn:mergeinfo 1335abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Reverse-merged /trunk/Makefile:r33020 1345abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Merged /trunk/Makefile:r41697 1355abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickEND 1365abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedReturn => [ 1375abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1385abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick name => "svn:mergeinfo", 1395abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick propertyChangeDelta => 1, 1405abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick value => "/trunk/Makefile:r41697", 1415abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 1425abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickundef], 1435abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedNextLine => undef, 1445abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 1455abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick # New test 1476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "simple: delete svn:executable using SVN 1.4 syntax", 1486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 1496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenName: svn:executable 1506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen - * 1516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 1526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 1536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 1546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "svn:executable", 1556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => -1, 1566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "*", 1576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenundef], 1596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => undef, 1606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 1626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 1636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "simple: add svn:executable using SVN 1.4 syntax", 1646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 1656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenName: svn:executable 1666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + * 1676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 1686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 1696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 1706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "svn:executable", 1716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 1726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "*", 1736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenundef], 1756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => undef, 1766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#### 1786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Property value followed by empty line and start of next diff 1796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen## 1806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 1816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 1826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "add svn:executable, followed by empty line and start of next diff", 1836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 1846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenAdded: svn:executable 1856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + * 1866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenIndex: Makefile.shared 1886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 1896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 1906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 1916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "svn:executable", 1926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 1936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "*", 1946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 1966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "Index: Makefile.shared\n", 1976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 1986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 1996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 200e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "add svn:executable, followed by empty line and start of next diff using Windows line endings", 201e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 202e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockAdded: svn:executable 203e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + * 204e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 205e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockIndex: Makefile.shared 206e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 207e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 208e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 209e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 210e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "svn:executable", 211e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => 1, 212e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "*", 213e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 214e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 215e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => "Index: Makefile.shared\r\n", 216e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 217e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 218e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 2196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "add svn:executable, followed by empty line and start of next property diff", 2206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 2216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenAdded: svn:executable 2226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + * 2236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 2246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenProperty changes on: Makefile.shared 2256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 2266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 2276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 2286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "svn:executable", 2296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 2306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "*", 2316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 2326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 2336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "Property changes on: Makefile.shared\n", 2346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 2356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 2366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 237e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "add svn:executable, followed by empty line and start of next property diff using Windows line endings", 238e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 239e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockAdded: svn:executable 240e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + * 241e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 242e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockProperty changes on: Makefile.shared 243e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 244e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 245e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 246e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 247e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "svn:executable", 248e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => 1, 249e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "*", 250e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 251e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 252e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => "Property changes on: Makefile.shared\r\n", 253e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 254e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 255e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 2566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "multi-line '+' change, followed by empty line and start of next diff", 2576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 2586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenName: documentation 2596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + A 2606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 2616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 2626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 2636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenIndex: Makefile.shared 2646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 2656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 2666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 2676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 2686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 2696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "A\nlong sentence that spans\nmultiple lines.", 2706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 2716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 2726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "Index: Makefile.shared\n", 2736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 2746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 2756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 276e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "multi-line '+' change, followed by empty line and start of next diff using Windows line endings", 277e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 278e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockName: documentation 279e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + A 280e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocklong sentence that spans 281e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockmultiple lines. 282e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 283e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockIndex: Makefile.shared 284e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 285e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 286e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 287e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 288e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "documentation", 289e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => 1, 290e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "A\r\nlong sentence that spans\r\nmultiple lines.", 291e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 292e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 293e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => "Index: Makefile.shared\r\n", 294e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 295e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 296e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 2976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "multi-line '+' change, followed by empty line and start of next property diff", 2986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 2996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenName: documentation 3006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + A 3016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 3026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 3036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 3046c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenProperty changes on: Makefile.shared 3056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 3066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 3076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 3086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 3096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 3106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "A\nlong sentence that spans\nmultiple lines.", 3116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 3126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 3136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "Property changes on: Makefile.shared\n", 3146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 315e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 316e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 317e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "multi-line '+' change, followed by empty line and start of next property diff using Windows line endings", 318e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 319e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockName: documentation 320e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + A 321e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocklong sentence that spans 322e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockmultiple lines. 323e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 324e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockProperty changes on: Makefile.shared 325e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 326e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 327e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 328e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 329e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "documentation", 330e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => 1, 331e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "A\r\nlong sentence that spans\r\nmultiple lines.", 332e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 333e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 334e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => "Property changes on: Makefile.shared\r\n", 335e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 3366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#### 3376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Property value followed by empty line and start of binary patch 3386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen## 3396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 3406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 3416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "add svn:executable, followed by empty line and start of binary patch", 3426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 3436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenAdded: svn:executable 3446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + * 3456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 3466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenQ1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 3476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 3486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 3496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 3506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "svn:executable", 3516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 3526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "*", 3536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 3546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 3556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\n", 3566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 3576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 3586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 359e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "add svn:executable, followed by empty line and start of binary patch using Windows line endings", 360e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 361e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockAdded: svn:executable 362e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + * 363e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 364e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockQ1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 365e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 366e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 367e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 368e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 369e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "svn:executable", 370e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => 1, 371e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "*", 372e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 373e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 374e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\r\n", 375e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 376e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 377e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 3786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "multi-line '+' change, followed by empty line and start of binary patch", 3796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 3806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenName: documentation 3816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + A 3826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 3836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 3846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 3856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenQ1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 3866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 3876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 3886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 3896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 3906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 3916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "A\nlong sentence that spans\nmultiple lines.", 3926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 3936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 3946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\n", 3956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 3966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 3976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 398e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "multi-line '+' change, followed by empty line and start of binary patch using Windows line endings", 399e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 400e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockName: documentation 401e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + A 402e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocklong sentence that spans 403e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockmultiple lines. 404e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 405e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockQ1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 406e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 407e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 408e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 409e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 410e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "documentation", 411e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => 1, 412e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "A\r\nlong sentence that spans\r\nmultiple lines.", 413e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 414e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 415e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\r\n", 416e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 417e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 418e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 4196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "multi-line '-' change, followed by multi-line '+' change, empty line, and start of binary patch", 4206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 4216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenModified: documentation 4226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen - A 4236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 4246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 4256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + Another 4266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 4276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 4286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 4296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenQ1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 4306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 4316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 4326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 4336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 4346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 4356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "Another\nlong sentence that spans\nmultiple lines.", 4366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 4376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 4386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\n", 4396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 440e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 441e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 442e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "multi-line '-' change, followed by multi-line '+' change, empty line, and start of binary patch using Windows line endings", 443e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 444e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockModified: documentation 445e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block - A 446e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocklong sentence that spans 447e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockmultiple lines. 448e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + Another 449e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocklong sentence that spans 450e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockmultiple lines. 451e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 452e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockQ1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 453e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 454e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 455e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 456e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 457e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "documentation", 458e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => 1, 459e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "Another\r\nlong sentence that spans\r\nmultiple lines.", 460e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 461e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 462e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => "Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==\r\n", 463e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 4646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#### 4656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Successive properties 4666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen## 4676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 4686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 4696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "single-line '+' change followed by custom property with single-line '+' change", 4706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 4716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenAdded: svn:executable 4726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + * 4736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenAdded: documentation 4746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + A sentence. 4756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 4766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 4776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 4786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "svn:executable", 4796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 4806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "*", 4816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 4826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"Added: documentation\n"], 4836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => " + A sentence.\n", 4846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 4856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 4866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 4876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "multi-line '+' change, followed by svn:executable", 4886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 4896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenName: documentation 4906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + A 4916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 4926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 4936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenName: svn:executable 4946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + * 4956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 4966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 4976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 4986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 4996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 5006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "A\nlong sentence that spans\nmultiple lines.", 5016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 5026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"Name: svn:executable\n"], 5036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => " + *\n", 5046c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 5056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 5066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 5076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "multi-line '-' change, followed by multi-line '+' change and add svn:executable", 5086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 5096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenModified: documentation 5106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen - A 5116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 5126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 5136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + Another 5146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 5156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 5166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenAdded: svn:executable 5176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + * 5186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 5196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 5206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 5216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 5226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 5236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "Another\nlong sentence that spans\nmultiple lines.", 5246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 5256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"Added: svn:executable\n"], 5266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => " + *\n", 5276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 5285abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 5295abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick # New test 5305abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick diffName => "'Merged' change followed by 'Merged' change", 5315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick inputText => <<'END', 5325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickAdded: svn:mergeinfo 5335abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Merged /trunk/Makefile:r33020 5345abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Merged /trunk/Makefile.shared:r58350 5355abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickEND 5365abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedReturn => [ 5375abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 5385abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick name => "svn:mergeinfo", 5395abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick propertyChangeDelta => 1, 5405abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick value => "/trunk/Makefile.shared:r58350", 5415abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 5425abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickundef], 5435abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedNextLine => undef, 5445abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 5455abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 5465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick # New test 5475abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick diffName => "'Reverse-merged' change followed by 'Reverse-merged' change", 5485abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick inputText => <<'END', 5495abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickDeleted: svn:mergeinfo 5505abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Reverse-merged /trunk/Makefile:r33020 5515abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Reverse-merged /trunk/Makefile.shared:r58350 5525abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickEND 5535abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedReturn => [ 5545abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 5555abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick name => "svn:mergeinfo", 5565abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick propertyChangeDelta => -1, 5575abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick value => "/trunk/Makefile.shared:r58350", 5585abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 5595abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickundef], 5605abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick expectedNextLine => undef, 5615abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}, 5626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#### 5636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# Property values with trailing new lines. 5646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen## 5656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# FIXME: We do not support property values with trailing new lines, since it is difficult to 5666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# disambiguate them from the empty line that preceeds the contents of a binary patch as 5676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen# in the test case (above): "multi-line '+' change, followed by empty line and start of binary patch". 5686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 5696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 5706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "single-line '+' with trailing new line", 5716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 5726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenAdded: documentation 5736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + A sentence. 5746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 5766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 5776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 5786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 5796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 5806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "A sentence.", 5816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 5826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 5836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => undef, 5846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 5856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 5866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 587e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "single-line '+' with trailing new line using Windows line endings", 588e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 589e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockAdded: documentation 590e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + A sentence. 591e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 592e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 593e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 594e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 595e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 596e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "documentation", 597e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => 1, 598e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "A sentence.", 599e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 600e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 601e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => undef, 602e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 603e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 604e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 6056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "single-line '+' with trailing new line, followed by empty line and start of binary patch", 6066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 6076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenAdded: documentation 6086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + A sentence. 6096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 6106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 6116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenQ1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 6126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 6136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 6146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 6156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 6166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => 1, 6176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "A sentence.", 6186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 6196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 6206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => "\n", 6216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 6226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 6236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 624e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "single-line '+' with trailing new line, followed by empty line and start of binary patch using Windows line endings", 625e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 626e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockAdded: documentation 627e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + A sentence. 628e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 629e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 630e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockQ1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 631e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 632e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 633e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 634e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 635e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "documentation", 636e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => 1, 637e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "A sentence.", 638e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 639e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 640e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => "\r\n", 641e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 642e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 643e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 6446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "single-line '-' change with trailing new line, and single-line '+' change", 6456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 6466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenModified: documentation 6476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen - A long sentence. 6486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 6496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + A sentence. 6506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 6516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 6526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 6536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 6546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => -1, # Since we only interpret the '-' property. 6556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "A long sentence.", 6566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 6576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 6586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => " + A sentence.\n", 6596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 6606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 6616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen # New test 662e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "single-line '-' change with trailing new line, and single-line '+' change using Windows line endings", 663e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 664e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockModified: documentation 665e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block - A long sentence. 666e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 667e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + A sentence. 668e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 669e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 670e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 671e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 672e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "documentation", 673e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => -1, # Since we only interpret the '-' property. 674e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "A long sentence.", 675e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 676e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 677e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => " + A sentence.\r\n", 678e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 679e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 680e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 6816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen diffName => "multi-line '-' change with trailing new line, and multi-line '+' change", 6826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen inputText => <<'END', 6836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenModified: documentation 6846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen - A 6856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 6866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 6876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 6886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen + Another 6896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenlong sentence that spans 6906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmultiple lines. 6916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenEND 6926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedReturn => [ 6936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 6946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen name => "documentation", 6956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen propertyChangeDelta => -1, # Since we only interpret the '-' property. 6966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen value => "A\nlong sentence that spans\nmultiple lines.", 6976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 6986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen"\n"], 6996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expectedNextLine => " + Another\n", 7006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}, 701e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 702e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block # New test 703e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block diffName => "multi-line '-' change with trailing new line, and multi-line '+' change using Windows line endings", 704e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block inputText => toWindowsLineEndings(<<'END', 705e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockModified: documentation 706e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block - A 707e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocklong sentence that spans 708e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockmultiple lines. 709e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 710e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block + Another 711e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocklong sentence that spans 712e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockmultiple lines. 713e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockEND 714e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block), 715e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedReturn => [ 716e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 717e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block name => "documentation", 718e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block propertyChangeDelta => -1, # Since we only interpret the '-' property. 719e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block value => "A\r\nlong sentence that spans\r\nmultiple lines.", 720e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 721e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"\r\n"], 722e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block expectedNextLine => " + Another\r\n", 723e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}, 7246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen); 7256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 7266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenmy $testCasesCount = @testCaseHashRefs; 7276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenplan(tests => 2 * $testCasesCount); # Total number of assertions. 7286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 7296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenforeach my $testCase (@testCaseHashRefs) { 7306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen my $testNameStart = "parseSvnProperty(): $testCase->{diffName}: comparing"; 7316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 7326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen my $fileHandle; 7336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen open($fileHandle, "<", \$testCase->{inputText}); 7346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen my $line = <$fileHandle>; 7356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 7366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen my @got = VCSUtils::parseSvnProperty($fileHandle, $line); 7376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen my $expectedReturn = $testCase->{expectedReturn}; 7386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 7396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen is_deeply(\@got, $expectedReturn, "$testNameStart return value."); 7406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 7416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen my $gotNextLine = <$fileHandle>; 7426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen is($gotNextLine, $testCase->{expectedNextLine}, "$testNameStart next read line."); 7436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen} 744