#!/usr/bin/env perl
#
# Copyright (C) 2010 Chris Jerdonek (chris.jerdonek@gmail.com)
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
# 
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Unit tests of parseDiff().

use strict;
use warnings;

use Test::More;
use VCSUtils;

# The array of test cases.
my @testCaseHashRefs = (
{
    # New test
    diffName => "SVN: simple",
    inputText => <<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 53052)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
 
 all:
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: Makefile
===================================================================
--- Makefile	(revision 53052)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
 
 all:
END
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "53052",
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "SVN: binary file (isBinary true)",
    inputText => <<'END',
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: test_file.swf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream


Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream



Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
END
    indexPath => "test_file.swf",
    isBinary => 1,
    isSvn => 1,
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "SVN: binary file (isBinary true) using Windows line endings",
    inputText => toWindowsLineEndings(<<'END',
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: test_file.swf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream


Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
END
),
    expectedReturn => [
[{
    svnConvertedText =>  toWindowsLineEndings(<<'END', # Same as input text
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream



Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
END
),
    indexPath => "test_file.swf",
    isBinary => 1,
    isSvn => 1,
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "SVN: leading junk",
    inputText => <<'END',

LEADING JUNK

Index: Makefile
===================================================================
--- Makefile	(revision 53052)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
 
 all:
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text

LEADING JUNK

Index: Makefile
===================================================================
--- Makefile	(revision 53052)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
 
 all:
END
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "53052",
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "SVN: copied file",
    inputText => <<'END',
Index: Makefile_new
===================================================================
--- Makefile_new	(revision 53131)	(from Makefile:53131)
+++ Makefile_new	(working copy)
@@ -0,0 +1,1 @@
+MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
END
    expectedReturn => [
[{
    copiedFromPath => "Makefile",
    indexPath => "Makefile_new",
    sourceRevision => "53131",
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "SVN: two diffs",
    inputText => <<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 53131)
+++ Makefile	(working copy)
@@ -1,1 +0,0 @@
-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
Index: Makefile_new
===================================================================
--- Makefile_new	(revision 53131)	(from Makefile:53131)
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 53131)
+++ Makefile	(working copy)
@@ -1,1 +0,0 @@
-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
END
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "53131",
}],
"Index: Makefile_new\n"],
    expectedNextLine => "===================================================================\n",
},
{
    # New test
    diffName => "SVN: SVN diff followed by Git diff", # Should not recognize Git start
    inputText => <<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 53131)
+++ Makefile	(working copy)
@@ -1,1 +0,0 @@
-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
diff --git a/Makefile b/Makefile
index f5d5e74..3b6aa92 100644
--- a/Makefile
+++ b/Makefile
@@ -1,1 1,1 @@ public:
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: Makefile
===================================================================
--- Makefile	(revision 53131)
+++ Makefile	(working copy)
@@ -1,1 +0,0 @@
-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
diff --git a/Makefile b/Makefile
index f5d5e74..3b6aa92 100644
--- a/Makefile
+++ b/Makefile
@@ -1,1 1,1 @@ public:
END
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "53131",
}],
undef],
    expectedNextLine => undef,
},
####
# Property Changes: Simple
##
{
    # New test
    diffName => "SVN: file change diff with property change diff",
    inputText => <<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:

Property changes on: Makefile
___________________________________________________________________
Name: svn:executable
   + *
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:

END
    executableBitDelta => 1,
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "60021",
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "SVN: file change diff, followed by property change diff on different file",
    inputText => <<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:

Property changes on: Makefile.shared
___________________________________________________________________
Name: svn:executable
   + *
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:

END
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "60021",
}],
"Property changes on: Makefile.shared\n"],
    expectedNextLine => "___________________________________________________________________\n",
},
{
    # New test
    diffName => "SVN: property diff, followed by file change diff",
    inputText => <<'END',
Property changes on: Makefile
___________________________________________________________________
Deleted: svn:executable
   - *

Index: Makefile.shared
===================================================================
--- Makefile.shared	(revision 60021)
+++ Makefile.shared	(working copy)
@@ -1,3 +1,4 @@
+
SCRIPTS_PATH ?= ../WebKitTools/Scripts
XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS)
END
    expectedReturn => [
[{
    executableBitDelta => -1,
    indexPath => "Makefile",
    isSvn => 1,
}],
"Index: Makefile.shared\n"],
    expectedNextLine => "===================================================================\n",
},
{
    # New test
    diffName => "SVN: property diff, followed by file change diff using Windows line endings",
    inputText => toWindowsLineEndings(<<'END',
Property changes on: Makefile
___________________________________________________________________
Deleted: svn:executable
   - *

Index: Makefile.shared
===================================================================
--- Makefile.shared	(revision 60021)
+++ Makefile.shared	(working copy)
@@ -1,3 +1,4 @@
+
SCRIPTS_PATH ?= ../WebKitTools/Scripts
XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS)
END
),
    expectedReturn => [
[{
    executableBitDelta => -1,
    indexPath => "Makefile",
    isSvn => 1,
}],
"Index: Makefile.shared\r\n"],
    expectedNextLine => "===================================================================\r\n",
},
{
    # New test
    diffName => "SVN: copied file with property change",
    inputText => <<'END',
Index: NMakefile
===================================================================
--- NMakefile	(revision 60021)	(from Makefile:60021)
+++ NMakefile	(working copy)
@@ -0,0 +1,1 @@
+MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

Property changes on: NMakefile
___________________________________________________________________
Added: svn:executable
   + *
END
    expectedReturn => [
[{
    copiedFromPath => "Makefile",
    executableBitDelta => 1,
    indexPath => "NMakefile",
    sourceRevision => "60021",
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "SVN: two consecutive property diffs",
    inputText => <<'END',
Property changes on: Makefile
___________________________________________________________________
Added: svn:executable
   + *


Property changes on: Makefile.shared
___________________________________________________________________
Added: svn:executable
   + *
END
    expectedReturn => [
[{
    executableBitDelta => 1,
    indexPath => "Makefile",
    isSvn => 1,
}],
"Property changes on: Makefile.shared\n"],
    expectedNextLine => "___________________________________________________________________\n",
},
{
    # New test
    diffName => "SVN: two consecutive property diffs using Windows line endings",
    inputText => toWindowsLineEndings(<<'END',
Property changes on: Makefile
___________________________________________________________________
Added: svn:executable
   + *


Property changes on: Makefile.shared
___________________________________________________________________
Added: svn:executable
   + *
END
),
    expectedReturn => [
[{
    executableBitDelta => 1,
    indexPath => "Makefile",
    isSvn => 1,
}],
"Property changes on: Makefile.shared\r\n"],
    expectedNextLine => "___________________________________________________________________\r\n",
},
####
# Property Changes: Binary files
##
{
    # New test
    diffName => "SVN: binary file with executable bit change",
    inputText => <<'END',
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: test_file.swf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream
Name: svn:executable
   + *


Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream



Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
END
    executableBitDelta => 1,
    indexPath => "test_file.swf",
    isBinary => 1,
    isSvn => 1,
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "SVN: binary file with executable bit change usng Windows line endings",
    inputText => toWindowsLineEndings(<<'END',
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: test_file.swf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream
Name: svn:executable
   + *


Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
END
),
    expectedReturn => [
[{
    svnConvertedText =>  toWindowsLineEndings(<<'END', # Same as input text
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream



Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
END
),
    executableBitDelta => 1,
    indexPath => "test_file.swf",
    isBinary => 1,
    isSvn => 1,
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "SVN: binary file followed by property change on different file",
    inputText => <<'END',
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: test_file.swf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream


Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==

Property changes on: Makefile
___________________________________________________________________
Added: svn:executable
   + *
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream



Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==

END
    indexPath => "test_file.swf",
    isBinary => 1,
    isSvn => 1,
}],
"Property changes on: Makefile\n"],
    expectedNextLine => "___________________________________________________________________\n",
},
{
    # New test
    diffName => "SVN: binary file followed by property change on different file using Windows line endings",
    inputText => toWindowsLineEndings(<<'END',
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: test_file.swf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream


Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==

Property changes on: Makefile
___________________________________________________________________
Added: svn:executable
   + *
END
),
    expectedReturn => [
[{
    svnConvertedText =>  toWindowsLineEndings(<<'END', # Same as input text
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream



Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==

END
),
    indexPath => "test_file.swf",
    isBinary => 1,
    isSvn => 1,
}],
"Property changes on: Makefile\r\n"],
    expectedNextLine => "___________________________________________________________________\r\n",
},
{
    # New test
    diffName => "SVN: binary file followed by file change on different file",
    inputText => <<'END',
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: test_file.swf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream


Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==

Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream



Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==

END
    indexPath => "test_file.swf",
    isBinary => 1,
    isSvn => 1,
}],
"Index: Makefile\n"],
    expectedNextLine => "===================================================================\n",
},
{
    # New test
    diffName => "SVN: binary file followed by file change on different file using Windows line endings",
    inputText => toWindowsLineEndings(<<'END',
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: test_file.swf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream


Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==

Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:
END
),
    expectedReturn => [
[{
    svnConvertedText =>  toWindowsLineEndings(<<'END', # Same as input text
Index: test_file.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream



Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==

END
),
    indexPath => "test_file.swf",
    isBinary => 1,
    isSvn => 1,
}],
"Index: Makefile\r\n"],
    expectedNextLine => "===================================================================\r\n",
},
####
# Property Changes: File change with property change
##
{
    # New test
    diffName => "SVN: file change diff with property change, followed by property change diff",
    inputText => <<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:

Property changes on: Makefile
___________________________________________________________________
Added: svn:executable
   + *


Property changes on: Makefile.shared
___________________________________________________________________
Deleted: svn:executable
   - *
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:



END
    executableBitDelta => 1,
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "60021",
}],
"Property changes on: Makefile.shared\n"],
    expectedNextLine => "___________________________________________________________________\n",
},
{
    # New test
    diffName => "SVN: file change diff with property change, followed by property change diff using Windows line endings",
    inputText => toWindowsLineEndings(<<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:

Property changes on: Makefile
___________________________________________________________________
Added: svn:executable
   + *


Property changes on: Makefile.shared
___________________________________________________________________
Deleted: svn:executable
   - *
END
),
    expectedReturn => [
[{
    svnConvertedText =>  toWindowsLineEndings(<<'END', # Same as input text
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:



END
),
    executableBitDelta => 1,
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "60021",
}],
"Property changes on: Makefile.shared\r\n"],
    expectedNextLine => "___________________________________________________________________\r\n",
},
{
    # New test
    diffName => "SVN: file change diff with property change, followed by file change diff",
    inputText => <<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:

Property changes on: Makefile
___________________________________________________________________
Name: svn:executable
   - *

Index: Makefile.shared
===================================================================
--- Makefile.shared	(revision 60021)
+++ Makefile.shared	(working copy)
@@ -1,3 +1,4 @@
+
SCRIPTS_PATH ?= ../WebKitTools/Scripts
XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS)
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END', # Same as input text
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:


END
    executableBitDelta => -1,
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "60021",
}],
"Index: Makefile.shared\n"],
    expectedNextLine => "===================================================================\n",
},
{
    # New test
    diffName => "SVN: file change diff with property change, followed by file change diff using Windows line endings",
    inputText => toWindowsLineEndings(<<'END',
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:

Property changes on: Makefile
___________________________________________________________________
Name: svn:executable
   - *

Index: Makefile.shared
===================================================================
--- Makefile.shared	(revision 60021)
+++ Makefile.shared	(working copy)
@@ -1,3 +1,4 @@
+
SCRIPTS_PATH ?= ../WebKitTools/Scripts
XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS)
END
),
    expectedReturn => [
[{
    svnConvertedText =>  toWindowsLineEndings(<<'END', # Same as input text
Index: Makefile
===================================================================
--- Makefile	(revision 60021)
+++ Makefile	(working copy)
@@ -1,3 +1,4 @@
+
 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 

 all:


END
),
    executableBitDelta => -1,
    indexPath => "Makefile",
    isSvn => 1,
    numTextChunks => 1,
    sourceRevision => "60021",
}],
"Index: Makefile.shared\r\n"],
    expectedNextLine => "===================================================================\r\n",
},
####
#    Git test cases
##
{
    # New test
    diffName => "Git: simple",
    inputText => <<'END',
diff --git a/Makefile b/Makefile
index f5d5e74..3b6aa92 100644
--- a/Makefile
+++ b/Makefile
@@ -1,1 +1,1 @@ public:
END
    expectedReturn => [
[{
    svnConvertedText =>  <<"END",
Index: Makefile
index f5d5e74..3b6aa92 100644
--- Makefile\t(revision 0)
+++ Makefile\t(working copy)
@@ -1,1 +1,1 @@ public:
END
    indexPath => "Makefile",
    isGit => 1,
    numTextChunks => 1,
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "Git: Append new line to the end of an existing file",
    inputText => <<'END',
diff --git a/foo b/foo
index 863339f..db418b2 100644
--- a/foo
+++ b/foo
@@ -1 +1,2 @@
 Passed
+
END
    expectedReturn => [
[{
    svnConvertedText =>  <<"END",
Index: foo
index 863339f..db418b2 100644
--- foo\t(revision 0)
+++ foo\t(working copy)
@@ -1 +1,2 @@
 Passed
+
END
    indexPath => "foo",
    isGit => 1,
    numTextChunks => 1,
}],
undef],
    expectedNextLine => undef,
},
{   # New test
    diffName => "Git: new file",
    inputText => <<'END',
diff --git a/foo.h b/foo.h
new file mode 100644
index 0000000..3c9f114
--- /dev/null
+++ b/foo.h
@@ -0,0 +1,34 @@
+<html>
diff --git a/bar b/bar
index d45dd40..3494526 100644
END
    expectedReturn => [
[{
    svnConvertedText => <<"END",
Index: foo.h
new file mode 100644
index 0000000..3c9f114
--- foo.h\t(revision 0)
+++ foo.h\t(working copy)
@@ -0,0 +1,34 @@
+<html>
END
    indexPath => "foo.h",
    isGit => 1,
    isNew => 1,
    numTextChunks => 1,
}],
"diff --git a/bar b/bar\n"],
    expectedNextLine => "index d45dd40..3494526 100644\n",
},
{   # New test
    diffName => "Git: file deletion",
    inputText => <<'END',
diff --git a/foo b/foo
deleted file mode 100644
index 1e50d1d..0000000
--- a/foo
+++ /dev/null
@@ -1,1 +0,0 @@
-line1
diff --git a/bar b/bar
index d45dd40..3494526 100644
END
    expectedReturn => [
[{
    svnConvertedText => <<"END",
Index: foo
deleted file mode 100644
index 1e50d1d..0000000
--- foo\t(revision 0)
+++ foo\t(working copy)
@@ -1,1 +0,0 @@
-line1
END
    indexPath => "foo",
    isDeletion => 1,
    isGit => 1,
    numTextChunks => 1,
}],
"diff --git a/bar b/bar\n"],
    expectedNextLine => "index d45dd40..3494526 100644\n",
},
{
    # New test
    diffName => "Git: Git diff followed by SVN diff", # Should not recognize SVN start
    inputText => <<'END',
diff --git a/Makefile b/Makefile
index f5d5e74..3b6aa92 100644
--- a/Makefile
+++ b/Makefile
@@ -1,1 +1,1 @@ public:
Index: Makefile_new
===================================================================
--- Makefile_new	(revision 53131)	(from Makefile:53131)
END
    expectedReturn => [
[{
    svnConvertedText =>  <<"END",
Index: Makefile
index f5d5e74..3b6aa92 100644
--- Makefile\t(revision 0)
+++ Makefile\t(working copy)
@@ -1,1 +1,1 @@ public:
Index: Makefile_new
===================================================================
--- Makefile_new	(revision 53131)	(from Makefile:53131)
END
    indexPath => "Makefile",
    isGit => 1,
    numTextChunks => 1,
}],
undef],
    expectedNextLine => undef,
},
{
    # New test
    diffName => "Git: file that only has an executable bit change",
    inputText => <<'END',
diff --git a/foo b/foo
old mode 100644
new mode 100755
END
    expectedReturn => [
[{
    svnConvertedText =>  <<'END',
Index: foo
old mode 100644
new mode 100755
END
    executableBitDelta => 1,
    indexPath => "foo",
    isGit => 1,
    numTextChunks => 0,
}],
undef],
    expectedNextLine => undef,
},
####
#    Git test cases: file moves (multiple return values)
##
{
    diffName => "Git: rename (with similarity index 100%)",
    inputText => <<'END',
diff --git a/foo b/foo_new
similarity index 100%
rename from foo
rename to foo_new
diff --git a/bar b/bar
index d45dd40..3494526 100644
END
    expectedReturn => [
[{
    indexPath => "foo",
    isDeletion => 1,
},
{
    copiedFromPath => "foo",
    indexPath => "foo_new",
}],
"diff --git a/bar b/bar\n"],
    expectedNextLine => "index d45dd40..3494526 100644\n",
},
{
    diffName => "rename (with similarity index < 100%)",
    inputText => <<'END',
diff --git a/foo b/foo_new
similarity index 99%
rename from foo
rename to foo_new
index 1e50d1d..1459d21 100644
--- a/foo
+++ b/foo_new
@@ -15,3 +15,4 @@ release r deployment dep deploy:
 line1
 line2
 line3
+line4
diff --git a/bar b/bar
index d45dd40..3494526 100644
END
    expectedReturn => [
[{
    indexPath => "foo",
    isDeletion => 1,
},
{
    copiedFromPath => "foo",
    indexPath => "foo_new",
},
{
    indexPath => "foo_new",
    isGit => 1,
    numTextChunks => 1,
    svnConvertedText => <<"END",
Index: foo_new
similarity index 99%
rename from foo
rename to foo_new
index 1e50d1d..1459d21 100644
--- foo_new\t(revision 0)
+++ foo_new\t(working copy)
@@ -15,3 +15,4 @@ release r deployment dep deploy:
 line1
 line2
 line3
+line4
END
}],
"diff --git a/bar b/bar\n"],
    expectedNextLine => "index d45dd40..3494526 100644\n",
},
{
    diffName => "rename (with executable bit change)",
    inputText => <<'END',
diff --git a/foo b/foo_new
old mode 100644
new mode 100755
similarity index 100%
rename from foo
rename to foo_new
diff --git a/bar b/bar
index d45dd40..3494526 100644
END
    expectedReturn => [
[{
    indexPath => "foo",
    isDeletion => 1,
},
{
    copiedFromPath => "foo",
    indexPath => "foo_new",
},
{
    executableBitDelta => 1,
    indexPath => "foo_new",
    isGit => 1,
    numTextChunks => 0,
    svnConvertedText => <<'END',
Index: foo_new
old mode 100644
new mode 100755
similarity index 100%
rename from foo
rename to foo_new
END
}],
"diff --git a/bar b/bar\n"],
    expectedNextLine => "index d45dd40..3494526 100644\n",
},
);

my $testCasesCount = @testCaseHashRefs;
plan(tests => 2 * $testCasesCount); # Total number of assertions.

foreach my $testCase (@testCaseHashRefs) {
    my $testNameStart = "parseDiff(): $testCase->{diffName}: comparing";

    my $fileHandle;
    open($fileHandle, "<", \$testCase->{inputText});
    my $line = <$fileHandle>;

    my @got = VCSUtils::parseDiff($fileHandle, $line, {"shouldNotUseIndexPathEOL" => 1});
    my $expectedReturn = $testCase->{expectedReturn};

    is_deeply(\@got, $expectedReturn, "$testNameStart return value.");

    my $gotNextLine = <$fileHandle>;
    is($gotNextLine, $testCase->{expectedNextLine},  "$testNameStart next read line.");
}
