blob: 1b7e3f49168ee7b90f99752d52feb7c28280c582 [file] [log] [blame]
#!/usr/bin/env perl
# Copyright (C) 2014 Apple Inc. All rights reserved.
#
# 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.
use strict;
use warnings;
use File::Spec;
use File::Temp qw/ tempdir /;
use Test::More;
my @testCases =
(
{
'RC_ProjectSourceVersion' => '5300.4.3.2.1',
'RC_PROJECTBUILDVERSION' => undef,
'expectedVersionResult' => '5300.4003.2001',
'expectedBuildVersionResult' => 1,
},
{
'RC_ProjectSourceVersion' => '5300.4.3.2.1',
'RC_PROJECTBUILDVERSION' => 156,
'expectedVersionResult' => '5300.4003.2001',
'expectedBuildVersionResult' => 156,
},
);
# This test should only be run on Windows
if ($^O ne 'MSWin32' && $^O ne 'cygwin') {
plan skip_all => 'do nothing for non-Windows builds.';
exit 0;
}
my $TOOLS_PATH = $ENV{'WEBKIT_LIBRARIES'};
my $AUTO_VERSION_SCRIPT = File::Spec->catfile($TOOLS_PATH, 'tools', 'scripts', 'auto-version.pl');
my $VERSION_STAMP_SCRIPT = File::Spec->catfile($TOOLS_PATH, 'tools', 'scripts', 'version-stamp.pl');
my $VERSION_STAMP_EXEC = File::Spec->catfile($TOOLS_PATH, 'tools', 'VersionStamper', 'VersionStamper.exe');
# Test can only be run if VersionStamper.exe exists
unless (-e $VERSION_STAMP_EXEC) {
plan skip_all => 'do nothing for Windows builds lacking the VersionStamp.exe utility.';
exit 0;
}
my $testCasesCount = scalar(@testCases) * 2;
plan(tests => $testCasesCount);
foreach my $testCase (@testCases) {
my $testOutputDir = tempdir(CLEANUP => 1);
$ENV{RC_ProjectSourceVersion} = $testCase->{'RC_ProjectSourceVersion'};
`perl $AUTO_VERSION_SCRIPT $testOutputDir`;
delete $ENV{RC_ProjectSourceVersion};
$ENV{RC_PROJECTBUILDVERSION} = $testCase->{'RC_PROJECTBUILDVERSION'} if defined($testCase->{'RC_PROJECTBUILDVERSION'});
my @versionStamperOutput = qx(perl $VERSION_STAMP_SCRIPT $testOutputDir $testOutputDir 2>&1);
delete $ENV{RC_PROJECTBUILDVERSION};
foreach my $line (@versionStamperOutput) {
if ($line !~ m/RC_PROJECTBUILDVERSION/) {
next;
}
chomp($line);
$line =~ m/RC_PROJECTSOURCEVERSION=([^\s]+) and RC_PROJECTBUILDVERSION=(.*)$/;
my $projectSourceResult=$1;
my $buildVersionResult=$2;
is($projectSourceResult, $testCase->{expectedVersionResult}, "$testCase->{'RC_ProjectSourceVersion'}: $testCase->{expectedVersionResult}");
my $testCaseInput = $testCase->{'RC_PROJECTBUILDVERSION'} || 'undefined';
is($buildVersionResult, $testCase->{expectedBuildVersionResult}, "$testCaseInput: $testCase->{expectedBuildVersionResult}");
}
}