blob: c0b39260aa3292299f29af3ee1d921629317580e [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.
# Unit tests of webkitdirs::checkForArgumentAndRemoveFromArrayRefGettingValue
use strict;
use warnings;
use Test::More;
use webkitdirs;
my @testCases = (
{
description => "empty string in empty array",
argToCheck => "",
args => [],
expectedArgs => [],
expectedReturn => undef,
},
{
description => "non-existent option in empty array",
argToCheck => "--sdk",
args => [],
expectedArgs => [],
expectedReturn => undef,
},
{
description => "non-existent option in non-empty array",
argToCheck => "--sdk",
args => ["--clean", "--debug"],
expectedArgs => ["--clean", "--debug"],
expectedReturn => undef,
},
{
description => "option with specified value",
argToCheck => "--sdk",
args => ["--clean", "--debug", "--sdk", "iphonesimulator"],
expectedArgs => ["--clean", "--debug"],
expectedReturn => "iphonesimulator",
},
{
description => "option with specified value whose value follows an equal sign",
argToCheck => "--sdk",
args => ["--clean", "--debug", "--sdk=iphonesimulator"],
expectedArgs => ["--clean", "--debug"],
expectedReturn => "iphonesimulator",
},
{
description => "option whose value is the empty string and follows an equal sign", # Unrecognized argument; no change
argToCheck => "--sdk",
args => ["--clean", "--debug", "--sdk="],
expectedArgs => ["--clean", "--debug", "--sdk="],
expectedReturn => undef,
},
{
description => "multiple options of the same name",
argToCheck => "--sdk",
args => ["--clean", "--debug", "--sdk=iphonesimulator", "--sdk=macosx"],
expectedArgs => ["--clean", "--debug", "--sdk=macosx"],
expectedReturn => "iphonesimulator",
},
####
# Malformed input
##
# We shouldn't encounter such input in practice.
{
description => "malformed: option with unspecified value at the end of the array",
argToCheck => "--sdk",
args => ["--clean", "--debug", "--sdk"],
expectedArgs => ["--clean", "--debug"],
expectedReturn => undef,
},
{
description => "malformed: option with unspecified value",
argToCheck => "--sdk",
args => ["--clean", "--debug", "--sdk", "--no-webkit2"],
expectedArgs => ["--clean", "--debug"],
expectedReturn => "--no-webkit2",
},
{
description => "malformed: multiple options of the same name; first occurrence has unspecified value",
argToCheck => "--sdk",
args => ["--clean", "--debug", "--sdk", "--sdk=iphonesimulator", "--sdk=macosx"],
expectedArgs => ["--clean", "--debug", "--sdk=macosx"],
expectedReturn => "--sdk=iphonesimulator",
},
);
plan(tests => 3 * @testCases);
foreach my $testCase (@testCases) {
my $testNameStart = "checkForArgumentAndRemoveFromArrayRef(): $testCase->{description}: comparing";
my $actualValue;
my @shadowArgs = @{$testCase->{args}}; # Copy the arguments since checkForArgumentAndRemoveFromArrayRefGettingValue() mutates the specified array.
is(checkForArgumentAndRemoveFromArrayRefGettingValue($testCase->{argToCheck}, \$actualValue, \@shadowArgs), $testCase->{expectedReturn}, "$testNameStart return value");
is($actualValue, $testCase->{expectedReturn}, "$testNameStart out parameter");
is_deeply(\@shadowArgs, $testCase->{expectedArgs}, "$testNameStart array");
}