blob: 06952dcb87cc92111c090e3d8ee00a268eb8313c [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',
expectedResults => {
'__VERSION_TEXT__' => '300.4.3.2.1',
'__BUILD_NUMBER__' => '300.4.3.2.1',
'__BUILD_NUMBER_SHORT__' => '300.4.3.2.1',
'__VERSION_MAJOR__' => '300',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2001',
'__VERSION_BUILD__' => '1',
'__BUILD_NUMBER_MAJOR__' => '300',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2001',
'__FULL_BUILD_MAJOR_VERSION__' => '5300',
},
},
{
'RC_ProjectSourceVersion' => '530.4.3.2.1',
expectedResults => {
'__VERSION_TEXT__' => '530.4.3.2.1',
'__BUILD_NUMBER__' => '530.4.3.2.1',
'__BUILD_NUMBER_SHORT__' => '530.4.3.2.1',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2001',
'__VERSION_BUILD__' => '1',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2001',
'__FULL_BUILD_MAJOR_VERSION__' => '530',
},
},
{
'RC_ProjectSourceVersion' => '53.4.3.2.1',
expectedResults => {
'__VERSION_TEXT__' => '53.4.3.2.1',
'__BUILD_NUMBER__' => '53.4.3.2.1',
'__BUILD_NUMBER_SHORT__' => '53.4.3.2.1',
'__VERSION_MAJOR__' => '53',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2001',
'__VERSION_BUILD__' => '1',
'__BUILD_NUMBER_MAJOR__' => '53',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2001',
'__FULL_BUILD_MAJOR_VERSION__' => '53',
},
},
{
'RC_ProjectSourceVersion' => '5.4.3.2.1',
expectedResults => {
'__VERSION_TEXT__' => '5.4.3.2.1',
'__BUILD_NUMBER__' => '5.4.3.2.1',
'__BUILD_NUMBER_SHORT__' => '5.4.3.2.1',
'__VERSION_MAJOR__' => '5',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2001',
'__VERSION_BUILD__' => '1',
'__BUILD_NUMBER_MAJOR__' => '5',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2001',
'__FULL_BUILD_MAJOR_VERSION__' => '5',
},
},
{
'RC_ProjectSourceVersion' => '5300.4.3.2',
expectedResults => {
'__VERSION_TEXT__' => '300.4.3.2',
'__BUILD_NUMBER__' => '300.4.3.2',
'__BUILD_NUMBER_SHORT__' => '300.4.3.2',
'__VERSION_MAJOR__' => '300',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2000',
'__VERSION_BUILD__' => '2',
'__BUILD_NUMBER_MAJOR__' => '300',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2000',
'__FULL_BUILD_MAJOR_VERSION__' => '5300',
},
},
{
'RC_ProjectSourceVersion' => '530.4.3.2',
expectedResults => {
'__VERSION_TEXT__' => '530.4.3.2',
'__BUILD_NUMBER__' => '530.4.3.2',
'__BUILD_NUMBER_SHORT__' => '530.4.3.2',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2000',
'__VERSION_BUILD__' => '2',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2000',
'__FULL_BUILD_MAJOR_VERSION__' => '530',
},
},
{
'RC_ProjectSourceVersion' => '53.4.3.2',
expectedResults => {
'__VERSION_TEXT__' => '53.4.3.2',
'__BUILD_NUMBER__' => '53.4.3.2',
'__BUILD_NUMBER_SHORT__' => '53.4.3.2',
'__VERSION_MAJOR__' => '53',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2000',
'__VERSION_BUILD__' => '2',
'__BUILD_NUMBER_MAJOR__' => '53',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2000',
'__FULL_BUILD_MAJOR_VERSION__' => '53',
},
},
{
'RC_ProjectSourceVersion' => '5.4.3.2',
expectedResults => {
'__VERSION_TEXT__' => '5.4.3.2',
'__BUILD_NUMBER__' => '5.4.3.2',
'__BUILD_NUMBER_SHORT__' => '5.4.3.2',
'__VERSION_MAJOR__' => '5',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2000',
'__VERSION_BUILD__' => '2',
'__BUILD_NUMBER_MAJOR__' => '5',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2000',
'__FULL_BUILD_MAJOR_VERSION__' => '5',
},
},
{
'RC_ProjectSourceVersion' => '5300.4.3',
expectedResults => {
'__VERSION_TEXT__' => '300.4.3',
'__BUILD_NUMBER__' => '300.4.3',
'__BUILD_NUMBER_SHORT__' => '300.4.3',
'__VERSION_MAJOR__' => '300',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '300',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '5300',
},
},
{
'RC_ProjectSourceVersion' => '530.4.3',
expectedResults => {
'__VERSION_TEXT__' => '530.4.3',
'__BUILD_NUMBER__' => '530.4.3',
'__BUILD_NUMBER_SHORT__' => '530.4.3',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '530',
},
},
{
'RC_ProjectSourceVersion' => '53.4.3',
expectedResults => {
'__VERSION_TEXT__' => '53.4.3',
'__BUILD_NUMBER__' => '53.4.3',
'__BUILD_NUMBER_SHORT__' => '53.4.3',
'__VERSION_MAJOR__' => '53',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '53',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '53',
},
},
{
'RC_ProjectSourceVersion' => '5.4.3',
expectedResults => {
'__VERSION_TEXT__' => '5.4.3',
'__BUILD_NUMBER__' => '5.4.3',
'__BUILD_NUMBER_SHORT__' => '5.4.3',
'__VERSION_MAJOR__' => '5',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '5',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '5',
},
},
{
'RC_ProjectSourceVersion' => '5300.4',
expectedResults => {
'__VERSION_TEXT__' => '300.4',
'__BUILD_NUMBER__' => '300.4',
'__BUILD_NUMBER_SHORT__' => '300.4',
'__VERSION_MAJOR__' => '300',
'__VERSION_MINOR__' => '4000',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '300',
'__BUILD_NUMBER_MINOR__' => '4000',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '5300',
},
},
{
'RC_ProjectSourceVersion' => '530.4',
expectedResults => {
'__VERSION_TEXT__' => '530.4',
'__BUILD_NUMBER__' => '530.4',
'__BUILD_NUMBER_SHORT__' => '530.4',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '4000',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '4000',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '530',
},
},
{
'RC_ProjectSourceVersion' => '53.4',
expectedResults => {
'__VERSION_TEXT__' => '53.4',
'__BUILD_NUMBER__' => '53.4',
'__BUILD_NUMBER_SHORT__' => '53.4',
'__VERSION_MAJOR__' => '53',
'__VERSION_MINOR__' => '4000',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '53',
'__BUILD_NUMBER_MINOR__' => '4000',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '53',
},
},
{
'RC_ProjectSourceVersion' => '5.4',
expectedResults => {
'__VERSION_TEXT__' => '5.4',
'__BUILD_NUMBER__' => '5.4',
'__BUILD_NUMBER_SHORT__' => '5.4',
'__VERSION_MAJOR__' => '5',
'__VERSION_MINOR__' => '4000',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '5',
'__BUILD_NUMBER_MINOR__' => '4000',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '5',
},
},
{
'RC_ProjectSourceVersion' => '5300',
expectedResults => {
'__VERSION_TEXT__' => '300',
'__BUILD_NUMBER__' => '300',
'__BUILD_NUMBER_SHORT__' => '300',
'__VERSION_MAJOR__' => '300',
'__VERSION_MINOR__' => '0',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '300',
'__BUILD_NUMBER_MINOR__' => '0',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '5300',
},
},
{
'RC_ProjectSourceVersion' => '530',
expectedResults => {
'__VERSION_TEXT__' => '530',
'__BUILD_NUMBER__' => '530',
'__BUILD_NUMBER_SHORT__' => '530',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '0',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '0',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '530',
},
},
{
'RC_ProjectSourceVersion' => '10530.1.1.1',
expectedResults => {
'__VERSION_TEXT__' => '530.1.1.1',
'__BUILD_NUMBER__' => '530.1.1.1',
'__BUILD_NUMBER_SHORT__' => '530.1.1.1',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '1001',
'__VERSION_TINY__' => '1000',
'__VERSION_BUILD__' => '1',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '1001',
'__BUILD_NUMBER_VARIANT__' => '1000',
'__FULL_BUILD_MAJOR_VERSION__' => '10530',
},
},
{
'RC_ProjectSourceVersion' => '10530.30.20.10',
expectedResults => {
'__VERSION_TEXT__' => '530.30.20.10',
'__BUILD_NUMBER__' => '530.30.20.10',
'__BUILD_NUMBER_SHORT__' => '530.30.20.10',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '30020',
'__VERSION_TINY__' => '10000',
'__VERSION_BUILD__' => '10',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '30020',
'__BUILD_NUMBER_VARIANT__' => '10000',
'__FULL_BUILD_MAJOR_VERSION__' => '10530',
},
},
{
'RC_ProjectSourceVersion' => '10530.64.200.64',
expectedResults => {
'__VERSION_TEXT__' => '530.64.200.64',
'__BUILD_NUMBER__' => '530.64.200.64',
'__BUILD_NUMBER_SHORT__' => '530.64.200.64',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '64200',
'__VERSION_TINY__' => '64000',
'__VERSION_BUILD__' => '64',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '64200',
'__BUILD_NUMBER_VARIANT__' => '64000',
'__FULL_BUILD_MAJOR_VERSION__' => '10530',
},
},
{
'RC_ProjectSourceVersion' => '10530.64.999.64',
expectedResults => {
'__VERSION_TEXT__' => '530.64.999.64',
'__BUILD_NUMBER__' => '530.64.999.64',
'__BUILD_NUMBER_SHORT__' => '530.64.999.64',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '64999',
'__VERSION_TINY__' => '64000',
'__VERSION_BUILD__' => '64',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '64999',
'__BUILD_NUMBER_VARIANT__' => '64000',
'__FULL_BUILD_MAJOR_VERSION__' => '10530',
},
},
{
'RC_ProjectSourceVersion' => '7530.64.99.10',
expectedResults => {
'__VERSION_TEXT__' => '530.64.99.10',
'__BUILD_NUMBER__' => '530.64.99.10',
'__BUILD_NUMBER_SHORT__' => '530.64.99.10',
'__VERSION_MAJOR__' => '530',
'__VERSION_MINOR__' => '64099',
'__VERSION_TINY__' => '10000',
'__VERSION_BUILD__' => '10',
'__BUILD_NUMBER_MAJOR__' => '530',
'__BUILD_NUMBER_MINOR__' => '64099',
'__BUILD_NUMBER_VARIANT__' => '10000',
'__FULL_BUILD_MAJOR_VERSION__' => '7530',
},
},
# Smallest "Valid" case
{
'RC_ProjectSourceVersion' => '53',
expectedResults => {
'__VERSION_TEXT__' => '53',
'__BUILD_NUMBER__' => '53',
'__BUILD_NUMBER_SHORT__' => '53',
'__VERSION_MAJOR__' => '53',
'__VERSION_MINOR__' => '0',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '53',
'__BUILD_NUMBER_MINOR__' => '0',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '53',
},
},
# We don't support 1-digit versions, but we should run without crashing
{
'RC_ProjectSourceVersion' => '5',
expectedResults => {
'__VERSION_TEXT__' => '5',
'__BUILD_NUMBER__' => '5',
'__BUILD_NUMBER_SHORT__' => '5',
'__VERSION_MAJOR__' => '5',
'__VERSION_MINOR__' => '0',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '0',
'__BUILD_NUMBER_MAJOR__' => '5',
'__BUILD_NUMBER_MINOR__' => '0',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '5',
},
},
# Largest specified version test
{
'RC_ProjectSourceVersion' => '214747.64.999.64.999',
expectedResults => {
'__VERSION_TEXT__' => '747.64.999.64.999',
'__BUILD_NUMBER__' => '747.64.999.64.999',
'__BUILD_NUMBER_SHORT__' => '747.64.999.64.999',
'__VERSION_MAJOR__' => '747',
'__VERSION_MINOR__' => '64999',
'__VERSION_TINY__' => '64999',
'__VERSION_BUILD__' => '999',
'__BUILD_NUMBER_MAJOR__' => '747',
'__BUILD_NUMBER_MINOR__' => '64999',
'__BUILD_NUMBER_VARIANT__' => '64999',
'__FULL_BUILD_MAJOR_VERSION__' => '214747',
},
},
# Leading Whitespace
{
'RC_ProjectSourceVersion' => ' 214747.64.99.64.99',
expectedResults => {
'__VERSION_TEXT__' => '747.64.99.64.99',
'__BUILD_NUMBER__' => '747.64.99.64.99',
'__BUILD_NUMBER_SHORT__' => '747.64.99.64.99',
'__VERSION_MAJOR__' => '747',
'__VERSION_MINOR__' => '64099',
'__VERSION_TINY__' => '64099',
'__VERSION_BUILD__' => '99',
'__BUILD_NUMBER_MAJOR__' => '747',
'__BUILD_NUMBER_MINOR__' => '64099',
'__BUILD_NUMBER_VARIANT__' => '64099',
'__FULL_BUILD_MAJOR_VERSION__' => '214747',
},
},
# Trailing Whitespace
{
'RC_ProjectSourceVersion' => '214747.64.99.64.99 ',
expectedResults => {
'__VERSION_TEXT__' => '747.64.99.64.99',
'__BUILD_NUMBER__' => '747.64.99.64.99',
'__BUILD_NUMBER_SHORT__' => '747.64.99.64.99',
'__VERSION_MAJOR__' => '747',
'__VERSION_MINOR__' => '64099',
'__VERSION_TINY__' => '64099',
'__VERSION_BUILD__' => '99',
'__BUILD_NUMBER_MAJOR__' => '747',
'__BUILD_NUMBER_MINOR__' => '64099',
'__BUILD_NUMBER_VARIANT__' => '64099',
'__FULL_BUILD_MAJOR_VERSION__' => '214747',
},
},
# Leading and Trailing Whitespace
{
'RC_ProjectSourceVersion' => ' 214747.64.99.64.99 ',
expectedResults => {
'__VERSION_TEXT__' => '747.64.99.64.99',
'__BUILD_NUMBER__' => '747.64.99.64.99',
'__BUILD_NUMBER_SHORT__' => '747.64.99.64.99',
'__VERSION_MAJOR__' => '747',
'__VERSION_MINOR__' => '64099',
'__VERSION_TINY__' => '64099',
'__VERSION_BUILD__' => '99',
'__BUILD_NUMBER_MAJOR__' => '747',
'__BUILD_NUMBER_MINOR__' => '64099',
'__BUILD_NUMBER_VARIANT__' => '64099',
'__FULL_BUILD_MAJOR_VERSION__' => '214747',
},
},
# Use RC_PROJECTBUILDVERSION or RC_ProjectBuildVersion if our submission version
# does not have 4 or more tuples.
{
'RC_ProjectSourceVersion' => '7600.1',
'RC_ProjectBuildVersion' => '26',
expectedResults => {
'__VERSION_TEXT__' => '600.1',
'__BUILD_NUMBER__' => '600.1',
'__BUILD_NUMBER_SHORT__' => '600.1',
'__VERSION_MAJOR__' => '600',
'__VERSION_MINOR__' => '1000',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '26',
'__BUILD_NUMBER_MAJOR__' => '600',
'__BUILD_NUMBER_MINOR__' => '1000',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '7600',
},
},
{
'RC_ProjectSourceVersion' => '27',
'RC_ProjectBuildVersion' => '14',
expectedResults => {
'__VERSION_TEXT__' => '27',
'__BUILD_NUMBER__' => '27',
'__BUILD_NUMBER_SHORT__' => '27',
'__VERSION_MAJOR__' => '27',
'__VERSION_MINOR__' => '0',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '14',
'__BUILD_NUMBER_MAJOR__' => '27',
'__BUILD_NUMBER_MINOR__' => '0',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '27',
},
},
{
'RC_ProjectSourceVersion' => '27',
'RC_PROJECTBUILDVERSION' => '14',
expectedResults => {
'__VERSION_TEXT__' => '27',
'__BUILD_NUMBER__' => '27',
'__BUILD_NUMBER_SHORT__' => '27',
'__VERSION_MAJOR__' => '27',
'__VERSION_MINOR__' => '0',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '14',
'__BUILD_NUMBER_MAJOR__' => '27',
'__BUILD_NUMBER_MINOR__' => '0',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '27',
},
},
{
'RC_PROJECTSOURCEVERSION' => '27',
'RC_ProjectBuildVersion' => '14',
expectedResults => {
'__VERSION_TEXT__' => '27',
'__BUILD_NUMBER__' => '27',
'__BUILD_NUMBER_SHORT__' => '27',
'__VERSION_MAJOR__' => '27',
'__VERSION_MINOR__' => '0',
'__VERSION_TINY__' => '0',
'__VERSION_BUILD__' => '14',
'__BUILD_NUMBER_MAJOR__' => '27',
'__BUILD_NUMBER_MINOR__' => '0',
'__BUILD_NUMBER_VARIANT__' => '0',
'__FULL_BUILD_MAJOR_VERSION__' => '27',
},
},
{
'RC_ProjectSourceVersion' => '5300.4.3.2.1',
'RC_ProjectBuildVersion' => '14',
expectedResults => {
'__VERSION_TEXT__' => '300.4.3.2.1',
'__BUILD_NUMBER__' => '300.4.3.2.1',
'__BUILD_NUMBER_SHORT__' => '300.4.3.2.1',
'__VERSION_MAJOR__' => '300',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2001',
'__VERSION_BUILD__' => '1',
'__BUILD_NUMBER_MAJOR__' => '300',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2001',
'__FULL_BUILD_MAJOR_VERSION__' => '5300',
},
},
{
'RC_ProjectSourceVersion' => '5300.4.3.2.1',
'RC_PROJECTBUILDVERSION' => '14',
expectedResults => {
'__VERSION_TEXT__' => '300.4.3.2.1',
'__BUILD_NUMBER__' => '300.4.3.2.1',
'__BUILD_NUMBER_SHORT__' => '300.4.3.2.1',
'__VERSION_MAJOR__' => '300',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2001',
'__VERSION_BUILD__' => '1',
'__BUILD_NUMBER_MAJOR__' => '300',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2001',
'__FULL_BUILD_MAJOR_VERSION__' => '5300',
},
},
{
'RC_PROJECTSOURCEVERSION' => '5300.4.3.2.1',
'RC_ProjectBuildVersion' => '14',
expectedResults => {
'__VERSION_TEXT__' => '300.4.3.2.1',
'__BUILD_NUMBER__' => '300.4.3.2.1',
'__BUILD_NUMBER_SHORT__' => '300.4.3.2.1',
'__VERSION_MAJOR__' => '300',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2001',
'__VERSION_BUILD__' => '1',
'__BUILD_NUMBER_MAJOR__' => '300',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2001',
'__FULL_BUILD_MAJOR_VERSION__' => '5300',
},
},
{
'RC_PROJECTSOURCEVERSION' => '5300.4.3.2.1',
'RC_PROJECTBUILDVERSION' => '14',
expectedResults => {
'__VERSION_TEXT__' => '300.4.3.2.1',
'__BUILD_NUMBER__' => '300.4.3.2.1',
'__BUILD_NUMBER_SHORT__' => '300.4.3.2.1',
'__VERSION_MAJOR__' => '300',
'__VERSION_MINOR__' => '4003',
'__VERSION_TINY__' => '2001',
'__VERSION_BUILD__' => '1',
'__BUILD_NUMBER_MAJOR__' => '300',
'__BUILD_NUMBER_MINOR__' => '4003',
'__BUILD_NUMBER_VARIANT__' => '2001',
'__FULL_BUILD_MAJOR_VERSION__' => '5300',
},
},
);
# This test should only be run on Windows
if ($^O ne 'MSWin32' && $^O ne 'cygwin') {
plan(tests => 1);
is(1, 1, 'do nothing for non-Windows builds.');
exit 0;
}
my $toolsPath = $ENV{'WEBKIT_LIBRARIES'};
my $autoVersionScript = File::Spec->catfile($toolsPath, 'tools', 'scripts', 'auto-version.pl');
# Test can only be run if auto-version.pl exists
unless (-e $autoVersionScript) {
plan skip_all => 'do nothing for Windows builds lacking the auto version script.';
exit 0;
}
my $testCasesCount = scalar(@testCases) * 11; # 11 expected results
plan(tests => $testCasesCount);
foreach my $testCase (@testCases) {
my $testOutputDir = tempdir(CLEANUP => 1);
if ($testCase->{'RC_ProjectSourceVersion'}) {
$ENV{RC_ProjectSourceVersion} = $testCase->{'RC_ProjectSourceVersion'};
} elsif ($testCase->{'RC_PROJECTSOURCEVERSION'}) {
$ENV{RC_PROJECTSOURCEVERSION} = $testCase->{'RC_PROJECTSOURCEVERSION'};
} else {
die ("Missing the RC_ProjectSourceVersion environment variable.\n");
}
if ($testCase->{'RC_ProjectBuildVersion'}) {
$ENV{RC_ProjectBuildVersion} = $testCase->{'RC_ProjectBuildVersion'};
} elsif ($testCase->{'RC_PROJECTBUILDVERSION'}) {
$ENV{RC_PROJECTBUILDVERSION} = $testCase->{'RC_PROJECTBUILDVERSION'};
}
`perl $autoVersionScript $testOutputDir`;
delete $ENV{RC_ProjectSourceVersion};
delete $ENV{RC_PROJECTSOURCEVERSION};
delete $ENV{RC_ProjectBuildVersion};
delete $ENV{RC_PROJECTBUILDVERSION};
my $expectedResults = $testCase->{expectedResults};
my $outputFile = File::Spec->catfile($testOutputDir, 'include', 'autoversion.h');
open(TEST_OUTPUT, '<', $outputFile) or die "Unable to open $outputFile: $!";
while (my $line = <TEST_OUTPUT>) {
foreach my $expectedResultKey (keys %$expectedResults) {
if ($line !~ m/$expectedResultKey/) {
next;
}
$line =~ s/#define $expectedResultKey//;
$line =~ s/^\s*(.*)\s*$/$1/;
$line =~ s/^"(.*)"$/$1/;
chomp($line);
my $expectedResultValue = $expectedResults->{$expectedResultKey};
if ($testCase->{'RC_ProjectSourceVersion'}) {
is($line, $expectedResultValue, "$testCase->{'RC_ProjectSourceVersion'}: $expectedResultKey");
} else {
is($line, $expectedResultValue, "$testCase->{'RC_PROJECTSOURCEVERSION'}: $expectedResultKey");
}
}
}
close(TEST_OUTPUT);
}