diff options
Diffstat (limited to 'Tools/Scripts/webkitperl')
5 files changed, 377 insertions, 9 deletions
diff --git a/Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl b/Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl index 9fe077f..e195023 100644 --- a/Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl +++ b/Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl @@ -1198,7 +1198,7 @@ foreach my $testCase (@testCaseHashRefs) { open($fileHandle, "<", \$testCase->{inputText}); my $line = <$fileHandle>; - my @got = VCSUtils::parseDiff($fileHandle, $line); + my @got = VCSUtils::parseDiff($fileHandle, $line, {"shouldNotUseIndexPathEOL" => 1}); my $expectedReturn = $testCase->{expectedReturn}; is_deeply(\@got, $expectedReturn, "$testNameStart return value."); diff --git a/Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl b/Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl new file mode 100644 index 0000000..307f3a7 --- /dev/null +++ b/Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl @@ -0,0 +1,305 @@ +#!/usr/bin/perl -w +# +# Copyright (C) 2011 Research In Motion Limited. All rights reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +# Unit tests of parseDiff() with mock files; test override of patch EOL with EOL of target file. + +use strict; +use warnings; + +use File::Temp; +use POSIX qw/getcwd/; +use Test::More; +use VCSUtils; + +my $gitDiffHeaderForNewFile = <<EOF; +diff --git a/Makefile b/Makefile +new file mode 100644 +index 0000000..756e864 +--- /dev/null ++++ b/Makefile +@@ -0,0 +1,17 @@ +EOF + +my $gitDiffHeader = <<EOF; +diff --git a/Makefile b/Makefile +index 756e864..04d2ae1 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,3 +1,4 @@ +EOF + +my $svnConvertedGitDiffHeader = <<EOF; +Index: Makefile +index 756e864..04d2ae1 100644 +--- Makefile ++++ Makefile +@@ -1,3 +1,4 @@ +EOF + +my $svnConvertedGitDiffHeaderForNewFile = <<EOF; +Index: Makefile +new file mode 100644 +index 0000000..756e864 +--- Makefile ++++ Makefile +@@ -0,0 +1,17 @@ +EOF + +my $svnDiffHeaderForNewFile = <<EOF; +Index: Makefile +=================================================================== +--- Makefile (revision 0) ++++ Makefile (revision 0) +@@ -0,0 +1,17 @@ +EOF + +my $svnDiffHeader = <<EOF; +Index: Makefile +=================================================================== +--- Makefile (revision 53052) ++++ Makefile (working copy) +@@ -1,3 +1,4 @@ +EOF + +my $diffBody = <<EOF; ++ + MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools + + all: +EOF + +my $MakefileContents = <<EOF; +MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools + +all: +EOF + +my $mockDir = File::Temp->tempdir("parseDiffXXXX", CLEANUP => 1); +writeToFile(File::Spec->catfile($mockDir, "MakefileWithUnixEOL"), $MakefileContents); +writeToFile(File::Spec->catfile($mockDir, "MakefileWithWindowsEOL"), toWindowsLineEndings($MakefileContents)); + +# The array of test cases. +my @testCaseHashRefs = ( +### +# SVN test cases +## +{ + # New test + diffName => "SVN: Patch with Unix line endings and IndexPath has Unix line endings", + inputText => substituteString($svnDiffHeader, "Makefile", "MakefileWithUnixEOL") . $diffBody, + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnDiffHeader, "Makefile", "MakefileWithUnixEOL") . $diffBody, # Same as input text + indexPath => "MakefileWithUnixEOL", + isSvn => 1, + sourceRevision => "53052", +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "SVN: Patch with Windows line endings and IndexPath has Unix line endings", + inputText => substituteString($svnDiffHeader, "Makefile", "MakefileWithUnixEOL") . toWindowsLineEndings($diffBody), + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnDiffHeader, "Makefile", "MakefileWithUnixEOL") . $diffBody, + indexPath => "MakefileWithUnixEOL", + isSvn => 1, + sourceRevision => "53052", +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "SVN: Patch with Windows line endings and IndexPath has Windows line endings", + inputText => substituteString($svnDiffHeader, "Makefile", "MakefileWithWindowsEOL") . toWindowsLineEndings($diffBody), + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnDiffHeader, "Makefile", "MakefileWithWindowsEOL") . toWindowsLineEndings($diffBody), # Same as input text + indexPath => "MakefileWithWindowsEOL", + isSvn => 1, + sourceRevision => "53052", +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "SVN: Patch with Unix line endings and IndexPath has Windows line endings", + inputText => substituteString($svnDiffHeader, "Makefile", "MakefileWithWindowsEOL") . $diffBody, + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnDiffHeader, "Makefile", "MakefileWithWindowsEOL") . toWindowsLineEndings($diffBody), + indexPath => "MakefileWithWindowsEOL", + isSvn => 1, + sourceRevision => "53052", +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "SVN: Patch with Unix line endings and nonexistent IndexPath", + inputText => substituteString($svnDiffHeaderForNewFile, "Makefile", "NonexistentFile") . $diffBody, + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnDiffHeaderForNewFile, "Makefile", "NonexistentFile") . $diffBody, # Same as input text + indexPath => "NonexistentFile", + isSvn => 1, + isNew => 1, +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "SVN: Patch with Windows line endings and nonexistent IndexPath", + inputText => substituteString($svnDiffHeaderForNewFile, "Makefile", "NonexistentFile") . toWindowsLineEndings($diffBody), + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnDiffHeaderForNewFile, "Makefile", "NonexistentFile") . toWindowsLineEndings($diffBody), # Same as input text + indexPath => "NonexistentFile", + isSvn => 1, + isNew => 1, +}], +undef], + expectedNextLine => undef, +}, +### +# Git test cases +## +{ + # New test + diffName => "Git: Patch with Unix line endings and IndexPath has Unix line endings", + inputText => substituteString($gitDiffHeader, "Makefile", "MakefileWithUnixEOL") . $diffBody, + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnConvertedGitDiffHeader, "Makefile", "MakefileWithUnixEOL") . $diffBody, # Same as input text + indexPath => "MakefileWithUnixEOL", + isGit => 1, +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "Git: Patch with Windows line endings and IndexPath has Unix line endings", + inputText => substituteString($gitDiffHeader, "Makefile", "MakefileWithUnixEOL") . toWindowsLineEndings($diffBody), + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnConvertedGitDiffHeader, "Makefile", "MakefileWithUnixEOL") . $diffBody, + indexPath => "MakefileWithUnixEOL", + isGit => 1, +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "Git: Patch with Windows line endings and IndexPath has Windows line endings", + inputText => substituteString($gitDiffHeader, "Makefile", "MakefileWithWindowsEOL") . toWindowsLineEndings($diffBody), + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnConvertedGitDiffHeader, "Makefile", "MakefileWithWindowsEOL") . toWindowsLineEndings($diffBody), # Same as input text + indexPath => "MakefileWithWindowsEOL", + isGit => 1, +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "Git: Patch with Unix line endings and IndexPath has Windows line endings", + inputText => substituteString($gitDiffHeader, "Makefile", "MakefileWithWindowsEOL") . $diffBody, + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnConvertedGitDiffHeader, "Makefile", "MakefileWithWindowsEOL") . toWindowsLineEndings($diffBody), + indexPath => "MakefileWithWindowsEOL", + isGit => 1, +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "Git: Patch with Unix line endings and nonexistent IndexPath", + inputText => substituteString($gitDiffHeaderForNewFile, "Makefile", "NonexistentFile") . $diffBody, + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnConvertedGitDiffHeaderForNewFile, "Makefile", "NonexistentFile") . $diffBody, # Same as input text + indexPath => "NonexistentFile", + isGit => 1, + isNew => 1, +}], +undef], + expectedNextLine => undef, +}, +{ + # New test + diffName => "Git: Patch with Windows line endings and nonexistent IndexPath", + inputText => substituteString($gitDiffHeaderForNewFile, "Makefile", "NonexistentFile") . toWindowsLineEndings($diffBody), + expectedReturn => [ +[{ + svnConvertedText => substituteString($svnConvertedGitDiffHeaderForNewFile, "Makefile", "NonexistentFile") . toWindowsLineEndings($diffBody), # Same as input text + indexPath => "NonexistentFile", + isGit => 1, + isNew => 1, +}], +undef], + expectedNextLine => undef, +}, +); + +my $testCasesCount = @testCaseHashRefs; +plan(tests => 2 * $testCasesCount); # Total number of assertions. + +my $savedCWD = getcwd(); +chdir($mockDir) or die; +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); + my $expectedReturn = $testCase->{expectedReturn}; + + is_deeply(\@got, $expectedReturn, "$testNameStart return value."); + + my $gotNextLine = <$fileHandle>; + is($gotNextLine, $testCase->{expectedNextLine}, "$testNameStart next read line."); +} +chdir($savedCWD); + +sub substituteString +{ + my ($string, $searchString, $replacementString) = @_; + $string =~ s/$searchString/$replacementString/g; + return $string; +} + +sub writeToFile +{ + my ($file, $text) = @_; + open(FILE, ">$file") or die; + print FILE $text; + close(FILE); +} diff --git a/Tools/Scripts/webkitperl/VCSUtils_unittest/parseFirstEOL.pl b/Tools/Scripts/webkitperl/VCSUtils_unittest/parseFirstEOL.pl new file mode 100644 index 0000000..367ad1d --- /dev/null +++ b/Tools/Scripts/webkitperl/VCSUtils_unittest/parseFirstEOL.pl @@ -0,0 +1,63 @@ +#!/usr/bin/perl -w +# +# Copyright (C) 2011 Research In Motion Limited. All rights reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +# Unit tests of VCSUtils::parseFirstEOL(). + +use strict; +use warnings; + +use Test::Simple tests => 7; +use VCSUtils; + +my $title; + +# New test +$title = "parseFirstEOL: Empty string."; +ok(!defined(firstEOLInString("")), $title); + +# New test +$title = "parseFirstEOL: Line without a line ending character"; +ok(!defined(firstEOLInString("This line doesn't have a line ending character.")), $title); + +# New test +$title = "parseFirstEOL: Line with Windows line ending."; +ok(firstEOLInString("This line ends with a Windows line ending.\r\n") eq "\r\n", $title); + +# New test +$title = "parseFirstEOL: Line with Unix line ending."; +ok(firstEOLInString("This line ends with a Unix line ending.\n") eq "\n", $title); + +# New test +$title = "parseFirstEOL: Line with Mac line ending."; +ok(firstEOLInString("This line ends with a Mac line ending.\r") eq "\r", $title); + +# New test +$title = "parseFirstEOL: Line with Mac line ending followed by line without a line ending."; +ok(firstEOLInString("This line ends with a Mac line ending.\rThis line doesn't have a line ending.") eq "\r", $title); + +# New test +$title = "parseFirstEOL: Line with a mix of line endings."; +ok(firstEOLInString("This line contains a mix of line endings.\r\n\r\n\r\r\n\n\n\n") eq "\r\n", $title); + +sub firstEOLInString +{ + my ($string) = @_; + my $fileHandle; + open($fileHandle, "<", \$string); + return parseFirstEOL($fileHandle); +} diff --git a/Tools/Scripts/webkitperl/VCSUtils_unittest/removeEOL.pl b/Tools/Scripts/webkitperl/VCSUtils_unittest/removeEOL.pl index 8bd8e90..6880214 100644 --- a/Tools/Scripts/webkitperl/VCSUtils_unittest/removeEOL.pl +++ b/Tools/Scripts/webkitperl/VCSUtils_unittest/removeEOL.pl @@ -37,20 +37,20 @@ my $title; # New test $title = "removeEOL: Undefined argument."; -ok(removeEOL(undef) eq ""); +ok(removeEOL(undef) eq "", $title); # New test $title = "removeEOL: Line with Windows line ending."; -ok(removeEOL("This line ends with a Windows line ending.\r\n") eq "This line ends with a Windows line ending."); +ok(removeEOL("This line ends with a Windows line ending.\r\n") eq "This line ends with a Windows line ending.", $title); # New test $title = "removeEOL: Line with Unix line ending."; -ok(removeEOL("This line ends with a Unix line ending.\n") eq "This line ends with a Unix line ending."); +ok(removeEOL("This line ends with a Unix line ending.\n") eq "This line ends with a Unix line ending.", $title); # New test $title = "removeEOL: Line with Mac line ending."; -ok(removeEOL("This line ends with a Mac line ending.\r") eq "This line ends with a Mac line ending."); +ok(removeEOL("This line ends with a Mac line ending.\r") eq "This line ends with a Mac line ending.", $title); # New test $title = "removeEOL: Line with a mix of line endings."; -ok(removeEOL("This line contains a mix of line endings.\r\n\r\n\r\r\n\n\n\n") eq "This line contains a mix of line endings."); +ok(removeEOL("This line contains a mix of line endings.\r\n\r\n\r\r\n\n\n\n") eq "This line contains a mix of line endings.", $title); diff --git a/Tools/Scripts/webkitperl/httpd.pm b/Tools/Scripts/webkitperl/httpd.pm index 5795340..3a40b4e 100644 --- a/Tools/Scripts/webkitperl/httpd.pm +++ b/Tools/Scripts/webkitperl/httpd.pm @@ -63,7 +63,6 @@ $tmpDir = convertMsysPath($tmpDir) if isMsys(); my $httpdLockPrefix = "WebKitHttpd.lock."; my $myLockFile; my $exclusiveLockFile = File::Spec->catfile($tmpDir, "WebKit.lock"); -my $httpdPath; my $httpdPidDir = File::Spec->catfile($tmpDir, "WebKit"); my $httpdPidFile = File::Spec->catfile($httpdPidDir, "httpd.pid"); my $httpdPid; @@ -76,6 +75,7 @@ $SIG{'TERM'} = 'handleInterrupt'; sub getHTTPDPath { + my $httpdPath; if (isDebianBased()) { $httpdPath = "/usr/sbin/apache2"; } elsif (isMsys()) { @@ -130,7 +130,7 @@ sub getHTTPDConfigPathForTestDirectory my ($testDirectory) = @_; die "No test directory has been specified." unless ($testDirectory); my $httpdConfig; - getHTTPDPath(); + my $httpdPath = getHTTPDPath(); if (isCygwin()) { my $windowsConfDirectory = "$testDirectory/http/conf/"; unless (-x "/usr/lib/apache/libphp4.dll") { @@ -173,7 +173,7 @@ sub openHTTPD(@) unlink $httpdPidFile; } - $httpdPath = "/usr/sbin/httpd" unless ($httpdPath); + my $httpdPath = getHTTPDPath(); open2(">&1", \*HTTPDIN, $httpdPath, @args); |