[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.19-706-ge5415e9

cjerdonek at webkit.org cjerdonek at webkit.org
Thu Feb 4 21:24:12 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit 258326406b2f6b88d241e6d76a48f350296e2da7
Author: cjerdonek at webkit.org <cjerdonek at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Jan 22 02:35:12 2010 +0000

    Create a unit-tested subroutine to parse patch files created
    by svn-create-patch.
    
    Reviewed by David Kilzer.
    
    https://bugs.webkit.org/show_bug.cgi?id=33475
    
    * Scripts/VCSUtils.pm:
      - Added parseDiff().
      - Added parsePatch().
    
    * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl: Added.
      - Added unit tests for parseDiff().
    
    * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
      - Total number of tests now computed dynamically.
    
    * Scripts/webkitperl/VCSUtils_unittest/parsePatch.pl: Added.
      - Added unit tests for parsePatch().
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53667 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index b7aa46b..ed48a2b 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,25 @@
+2010-01-21  Chris Jerdonek  <cjerdonek at webkit.org>
+
+        Reviewed by David Kilzer.
+
+        Create a unit-tested subroutine to parse patch files created
+        by svn-create-patch.
+
+        https://bugs.webkit.org/show_bug.cgi?id=33475
+
+        * Scripts/VCSUtils.pm:
+          - Added parseDiff().
+          - Added parsePatch().
+
+        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl: Added.
+          - Added unit tests for parseDiff().
+
+        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
+          - Total number of tests now computed dynamically.
+
+        * Scripts/webkitperl/VCSUtils_unittest/parsePatch.pl: Added.
+          - Added unit tests for parsePatch().
+
 2010-01-21  Kevin Ollivier  <kevino at theolliviers.com>
 
         [wx] Build fix, add new directory to dir list.
diff --git a/WebKitTools/Scripts/VCSUtils.pm b/WebKitTools/Scripts/VCSUtils.pm
index 764fdbd..022c72a 100644
--- a/WebKitTools/Scripts/VCSUtils.pm
+++ b/WebKitTools/Scripts/VCSUtils.pm
@@ -62,6 +62,7 @@ BEGIN {
         &isSVNVersion16OrNewer
         &makeFilePathRelative
         &normalizePath
+        &parsePatch
         &pathRelativeToSVNRepositoryRootForPath
         &runPatchCommand
         &svnRevisionForDirectory
@@ -480,6 +481,98 @@ sub parseDiffHeader($$)
     return (\%header, $lastReadLine);
 }
 
+# Parse one diff from a patch file created by svn-create-patch, and
+# advance the file handle so the last line read is the first line
+# of the next header block.
+#
+# This subroutine preserves any leading junk encountered before the header.
+#
+# Args:
+#   $fileHandle: a file handle advanced to the first line of the next
+#                header block. Leading junk is okay.
+#   $line: the line last read from $fileHandle.
+#
+# Returns ($diffHashRef, $lastReadLine):
+#   $diffHashRef:
+#     copiedFromPath: if a file copy, the path from which the file was
+#                     copied. Otherwise, undefined.
+#     indexPath: the path in the "Index:" line.
+#     sourceRevision: the revision number of the source. This is the same
+#                     as the revision number the file was copied from, in
+#                     the case of a file copy.
+#     svnConvertedText: the diff converted to SVN format.
+#   $lastReadLine: the line last read from $fileHandle
+sub parseDiff($$)
+{
+    my ($fileHandle, $line) = @_;
+
+    my $headerStartRegEx = qr#^Index: #; # SVN-style header for the default
+    my $gitHeaderStartRegEx = qr#^diff --git \w/#;
+
+    my $headerHashRef; # Last header found, as returned by parseDiffHeader().
+    my $svnText;
+    while (defined($line)) {
+        if (!$headerHashRef && ($line =~ $gitHeaderStartRegEx)) {
+            # Then assume all diffs in the patch are Git-formatted. This
+            # block was made to be enterable at most once since we assume
+            # all diffs in the patch are formatted the same (SVN or Git).
+            $headerStartRegEx = $gitHeaderStartRegEx;
+        }
+
+        if ($line !~ $headerStartRegEx) {
+            # Then we are in the body of the diff.
+            $svnText .= $line;
+            $line = <$fileHandle>;
+            next;
+        } # Otherwise, we found a diff header.
+
+        if ($headerHashRef) {
+            # Then this is the second diff header of this while loop.
+            last;
+        }
+
+        ($headerHashRef, $line) = parseDiffHeader($fileHandle, $line);
+
+        $svnText .= $headerHashRef->{svnConvertedText};
+    }
+
+    my %diffHashRef;
+    $diffHashRef{copiedFromPath} = $headerHashRef->{copiedFromPath};
+    $diffHashRef{indexPath} = $headerHashRef->{indexPath};
+    $diffHashRef{sourceRevision} = $headerHashRef->{sourceRevision};
+    $diffHashRef{svnConvertedText} = $svnText;
+
+    return (\%diffHashRef, $line);
+}
+
+# Parse a patch file created by svn-create-patch.
+#
+# Args:
+#   $fileHandle: A file handle to the patch file that has not yet been
+#                read from.
+#
+# Returns:
+#   @diffHashRefs: an array of diff hash references. See parseDiff() for
+#                  a description of each $diffHashRef.
+sub parsePatch($)
+{
+    my ($fileHandle) = @_;
+
+    my @diffHashRefs; # return value
+
+    my $line = <$fileHandle>;
+
+    while (defined($line)) { # Otherwise, at EOF.
+
+        my $diffHashRef;
+        ($diffHashRef, $line) = parseDiff($fileHandle, $line);
+
+        push @diffHashRefs, $diffHashRef;
+    }
+
+    return @diffHashRefs;
+}
+
 # If possible, returns a ChangeLog patch equivalent to the given one,
 # but with the newest ChangeLog entry inserted at the top of the
 # file -- i.e. no leading context and all lines starting with "+".
diff --git a/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl
new file mode 100644
index 0000000..2507d2d
--- /dev/null
+++ b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl
@@ -0,0 +1,328 @@
+#!/usr/bin/perl -w
+#
+# Copyright (C) 2010 Chris Jerdonek (chris.jerdonek at 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;
+
+my @diffHashRefKeys = ( # The $diffHashRef keys to check.
+    "copiedFromPath",
+    "indexPath",
+    "sourceRevision",
+    "svnConvertedText",
+);
+
+# 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
+    # Header keys to check
+    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
+    copiedFromPath => undef,
+    indexPath => "Makefile",
+    sourceRevision => "53052",
+    # Other values to check
+    lastReadLine => undef,
+    nextLine => 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
+    # Header keys to check
+    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
+    copiedFromPath => undef,
+    indexPath => "Makefile",
+    sourceRevision => "53052",
+    # Other values to check
+    lastReadLine => undef,
+    nextLine => 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
+    # Header keys to check
+    svnConvertedText =>  <<'END', # Same as input text
+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
+    copiedFromPath => "Makefile",
+    indexPath => "Makefile_new",
+    sourceRevision => "53131",
+    # Other values to check
+    lastReadLine => undef,
+    nextLine => 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
+    # Header keys to check
+    svnConvertedText =>  <<'END',
+Index: Makefile
+===================================================================
+--- Makefile	(revision 53131)
++++ Makefile	(working copy)
+@@ -1,1 +0,0 @@
+-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
+END
+    copiedFromPath => undef,
+    indexPath => "Makefile",
+    sourceRevision => "53131",
+    # Other values to check
+    lastReadLine => "Index: Makefile_new\n",
+    nextLine => "===================================================================\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
+    # Header keys to check
+    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
+    copiedFromPath => undef,
+    indexPath => "Makefile",
+    sourceRevision => "53131",
+    # Other values to check
+    lastReadLine => undef,
+    nextLine => undef,
+},
+{
+    # 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
+    # Header keys to check
+    svnConvertedText =>  <<'END',
+Index: Makefile
+===================================================================
+--- Makefile
++++ Makefile
+@@ -1,1 1,1 @@ public:
+END
+    copiedFromPath => undef,
+    indexPath => "Makefile",
+    sourceRevision => undef,
+    # Other values to check
+    lastReadLine => undef,
+    nextLine => undef,
+},
+{
+    # 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
+    # Header keys to check
+    svnConvertedText =>  <<'END',
+Index: Makefile
+===================================================================
+--- Makefile
++++ Makefile
+@@ -1,1 1,1 @@ public:
+Index: Makefile_new
+===================================================================
+--- Makefile_new	(revision 53131)	(from Makefile:53131)
+END
+    copiedFromPath => undef,
+    indexPath => "Makefile",
+    sourceRevision => undef,
+    # Other values to check
+    lastReadLine => undef,
+    nextLine => undef,
+},
+);
+
+# Return the arguments for each assertion per test case.
+#
+# In particular, the number of assertions per test case is the length
+# of the return value of this subroutine on a sample input.
+#
+# Returns @assertionArgsArrayRefs:
+#   $assertionArgsArrayRef: A reference to an array of parameters to pass
+#                           to each call to is(). The parameters are--
+#                             $got: The value obtained
+#                             $expected: The expected value
+#                             $testName: The name of the test
+sub testParseDiffAssertionArgs($)
+{
+    my ($testCaseHashRef) = @_;
+
+    my $fileHandle;
+    open($fileHandle, "<", \$testCaseHashRef->{inputText});
+
+    my $line = <$fileHandle>;
+
+    my ($diffHashRef, $lastReadLine) = VCSUtils::parseDiff($fileHandle, $line);
+
+    my $testNameStart = "parseDiff(): [$testCaseHashRef->{diffName}] ";
+
+    my @assertionArgsArrayRefs; # Return value
+    my @assertionArgs;
+    foreach my $diffHashRefKey (@diffHashRefKeys) {
+        my $testName = "${testNameStart}key=\"$diffHashRefKey\"";
+        @assertionArgs = ($diffHashRef->{$diffHashRefKey}, $testCaseHashRef->{$diffHashRefKey}, $testName);
+        push(@assertionArgsArrayRefs, \@assertionArgs);
+    }
+
+    @assertionArgs = ($lastReadLine, $testCaseHashRef->{lastReadLine}, "${testNameStart}lastReadLine");
+    push(@assertionArgsArrayRefs, \@assertionArgs);
+
+    my $nextLine = <$fileHandle>;
+    @assertionArgs = ($nextLine, $testCaseHashRef->{nextLine}, "${testNameStart}nextLine");
+    push(@assertionArgsArrayRefs, \@assertionArgs);
+
+    return @assertionArgsArrayRefs;
+}
+
+# Test parseDiff() for the given test case.
+sub testParseDiff($)
+{
+    my ($testCaseHashRef) = @_;
+
+    my @assertionArgsArrayRefs = testParseDiffAssertionArgs($testCaseHashRef);
+
+    foreach my $arrayRef (@assertionArgsArrayRefs) {
+        # The parameters are -- is($got, $expected, $testName).
+        is($arrayRef->[0], $arrayRef->[1], $arrayRef->[2]);
+    }
+}
+
+# Count the number of assertions per test case, using a sample test case.
+my $assertionCount = testParseDiffAssertionArgs($testCaseHashRefs[0]);
+
+plan(tests => @testCaseHashRefs * $assertionCount); # Total number of tests
+
+foreach my $testCaseHashRef (@testCaseHashRefs) {
+    testParseDiff($testCaseHashRef);
+}
diff --git a/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
index d095dc0..a7a3c26 100644
--- a/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
+++ b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl
@@ -36,40 +36,15 @@ use warnings;
 use Test::More;
 use VCSUtils;
 
-my @headerKeys = ( # The $headerHashRef keys to check.
+my @diffHeaderHashRefKeys = ( # The $diffHeaderHashRef keys to check.
     "copiedFromPath",
     "indexPath",
     "sourceRevision",
     "svnConvertedText",
 );
 
-# Test parseDiffHeader() for the given $diffTestHashRef.
-sub doDiffTest($)
-{
-    my ($diffTestHashRef) = @_;
-
-    my $fileHandle;
-    open($fileHandle, "<", \$diffTestHashRef->{inputText});
-
-    my $line = <$fileHandle>;
-
-    my ($headerHashRef, $lastReadLine) = VCSUtils::parseDiffHeader($fileHandle, $line);
-
-    my $titleHeader = "parseDiffHeader(): [$diffTestHashRef->{diffName}] ";
-    my $title;
-
-    foreach my $headerKey (@headerKeys) {
-        my $title = "${titleHeader}key=\"$headerKey\"";
-        is($headerHashRef->{$headerKey}, $diffTestHashRef->{$headerKey}, $title);
-    }
-
-    is($lastReadLine, $diffTestHashRef->{lastReadLine}, "${titleHeader}lastReadLine");
-
-    my $nextLine = <$fileHandle>;
-    is($nextLine, $diffTestHashRef->{nextLine}, "${titleHeader}nextLine");
-}
-
-my @diffTests = (
+# The array of test cases.
+my @testCaseHashRefs = (
 {
     # New test
     diffName => "SVN: simple",
@@ -247,8 +222,67 @@ END
 },
 );
 
-plan(tests => @diffTests * 6); # Multiply by number of assertions per call to doDiffTest().
+# Return the arguments for each assertion per test case.
+#
+# In particular, the number of assertions per test case is the length
+# of the return value of this subroutine on a sample input.
+#
+# Returns @assertionArgsArrayRefs:
+#   $assertionArgsArrayRef: A reference to an array of parameters to pass
+#                           to each call to is(). The parameters are--
+#                             $got: The value obtained
+#                             $expected: The expected value
+#                             $testName: The name of the test
+sub testParseDiffHeaderAssertionArgs($)
+{
+    my ($testCaseHashRef) = @_;
+
+    my $fileHandle;
+    open($fileHandle, "<", \$testCaseHashRef->{inputText});
+
+    my $line = <$fileHandle>;
+
+    my ($headerHashRef, $lastReadLine) = VCSUtils::parseDiffHeader($fileHandle, $line);
+
+    my $testNameStart = "parseDiffHeader(): [$testCaseHashRef->{diffName}] ";
+
+    my @assertionArgsArrayRefs; # Return value
+    my @assertionArgs;
+    foreach my $diffHeaderHashRefKey (@diffHeaderHashRefKeys) {
+        my $testName = "${testNameStart}key=\"$diffHeaderHashRefKey\"";
+        @assertionArgs = ($headerHashRef->{$diffHeaderHashRefKey}, $testCaseHashRef->{$diffHeaderHashRefKey}, $testName);
+        push(@assertionArgsArrayRefs, \@assertionArgs);
+    }
+
+    @assertionArgs = ($lastReadLine, $testCaseHashRef->{lastReadLine}, "${testNameStart}lastReadLine");
+    push(@assertionArgsArrayRefs, \@assertionArgs);
+
+    my $nextLine = <$fileHandle>;
+    @assertionArgs = ($nextLine, $testCaseHashRef->{nextLine}, "${testNameStart}nextLine");
+    push(@assertionArgsArrayRefs, \@assertionArgs);
+
+    return @assertionArgsArrayRefs;
+}
+
+# Test parseDiffHeader() for the given test case.
+sub testParseDiffHeader($)
+{
+    my ($testCaseHashRef) = @_;
+
+    my @assertionArgsArrayRefs = testParseDiffHeaderAssertionArgs($testCaseHashRef);
+
+    foreach my $arrayRef (@assertionArgsArrayRefs) {
+        # The parameters are -- is($got, $expected, $testName).
+        is($arrayRef->[0], $arrayRef->[1], $arrayRef->[2]);
+    }
+}
+
+# Count the number of assertions per test case to calculate the total number
+# of Test::More tests. We could have used any test case for the count.
+my $assertionCount = testParseDiffHeaderAssertionArgs($testCaseHashRefs[0]);
+
+plan(tests => @testCaseHashRefs * $assertionCount); # Total number of tests
 
-foreach my $diffTestHashRef (@diffTests) {
-    doDiffTest($diffTestHashRef);
+foreach my $testCaseHashRef (@testCaseHashRefs) {
+    testParseDiffHeader($testCaseHashRef);
 }
diff --git a/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parsePatch.pl b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parsePatch.pl
new file mode 100644
index 0000000..e6f82ca
--- /dev/null
+++ b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parsePatch.pl
@@ -0,0 +1,102 @@
+#!/usr/bin/perl -w
+#
+# Copyright (C) 2010 Chris Jerdonek (chris.jerdonek at 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 parseDiffHeader().
+
+use strict;
+use warnings;
+
+use Test::More;
+use VCSUtils;
+
+my @diffHashRefKeys = ( # The hash reference keys to check per diff.
+    "copiedFromPath",
+    "indexPath",
+    "sourceRevision",
+    "svnConvertedText",
+);
+
+# New test
+my $testNameStart = "parsePatch(): [SVN: Rename] ";
+my $patch = <<'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)
++++ Makefile_new	(working copy)
+@@ -0,0 +1,1 @@
++MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
+END
+
+my @expectedDiffHashRefs = (
+{
+    svnConvertedText => <<'END',
+Index: Makefile
+===================================================================
+--- Makefile	(revision 53131)
++++ Makefile	(working copy)
+@@ -1,1 +0,0 @@
+-MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
+END
+    copiedFromPath => undef,
+    indexPath => "Makefile",
+    sourceRevision => "53131",
+},
+{
+    svnConvertedText => <<'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
+    copiedFromPath => "Makefile",
+    indexPath => "Makefile_new",
+    sourceRevision => "53131",
+},
+);
+
+plan(tests => @expectedDiffHashRefs * @diffHashRefKeys);
+
+my $fileHandle;
+open($fileHandle, "<", \$patch);
+
+my @gotDiffHashRefs = parsePatch($fileHandle);
+
+my $i = 0;
+foreach my $expectedDiffHashRef (@expectedDiffHashRefs) {
+
+    my $gotDiffHashRef = $gotDiffHashRefs[$i++];
+
+    foreach my $diffHashRefKey (@diffHashRefKeys) {
+        my $testName = "${testNameStart}[diff $i] key=\"$diffHashRefKey\"";
+        is($gotDiffHashRef->{$diffHashRefKey}, $expectedDiffHashRef->{$diffHashRefKey}, $testName);
+    }
+}

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list