xarxaprod-wp-theme/vendor/wp-cli/php-cli-tools/tests/test-arguments.php

285 lines
7.9 KiB
PHP
Raw Permalink Normal View History

2024-01-09 16:13:20 +01:00
<?php
use cli\Arguments;
/**
* Class TestArguments
* @todo add more tests to increase coverage
*
* @backupGlobals enabled
*/
class TestArguments extends PHPUnit_Framework_TestCase
{
/**
* Array of expected settings
* @var array
*/
protected $settings = null;
/**
* Array of flags
* @var array
*/
protected $flags = null;
/**
* Array of expected options
* @var array
*/
protected $options = null;
/**
* Clear the $_SERVER['argv'] array
*/
public static function clearArgv()
{
$_SERVER['argv'] = array();
$_SERVER['argc'] = 0;
}
/**
* Add one or more element(s) at the end of the $_SERVER['argv'] array
*
* @param array $args: value(s) to add to the argv array
*/
public static function pushToArgv($args)
{
if (is_string($args)) {
$args = explode(' ', $args);
}
foreach ($args as $arg) {
array_push($_SERVER['argv'], $arg);
}
$_SERVER['argc'] += count($args);
}
/**
* Set up valid flags and options
*/
public function setUp()
{
self::clearArgv();
self::pushToArgv('my_script.php');
$this->flags = array(
'flag1' => array(
'aliases' => 'f',
'description' => 'Test flag 1'
),
'flag2' => array(
'description' => 'Test flag 2'
)
);
$this->options = array(
'option1' => array(
'aliases' => 'o',
'description' => 'Test option 1'
),
'option2' => array(
'aliases' => array('x', 'y'),
'description' => 'Test option 2 with default',
'default' => 'some default value'
)
);
$this->settings = array(
'strict' => true,
'flags' => $this->flags,
'options' => $this->options
);
}
/**
* Tear down fixtures
*/
public function tearDown()
{
$this->flags = null;
$this->options = null;
$this->settings = null;
self::clearArgv();
}
/**
* Test adding a flag, getting a flag and getting all flags
*/
public function testAddFlags()
{
$args = new cli\Arguments($this->settings);
$expectedFlags = $this->flags;
$expectedFlags['flag1']['default'] = false;
$expectedFlags['flag1']['stackable'] = false;
$expectedFlags['flag2']['default'] = false;
$expectedFlags['flag2']['stackable'] = false;
$expectedFlags['flag2']['aliases'] = array();
$this->assertSame($expectedFlags, $args->getFlags());
$this->assertSame($expectedFlags['flag1'], $args->getFlag('flag1'));
$this->assertSame($expectedFlags['flag1'], $args->getFlag('f'));
$expectedFlag1Argument = new cli\arguments\Argument('-f');
$this->assertSame($expectedFlags['flag1'], $args->getFlag($expectedFlag1Argument));
}
/**
* Test adding a option, getting a option and getting all options
*/
public function testAddOptions()
{
$args = new cli\Arguments($this->settings);
$expectedOptions = $this->options;
$expectedOptions['option1']['default'] = null;
$this->assertSame($expectedOptions, $args->getOptions());
$this->assertSame($expectedOptions['option1'], $args->getOption('option1'));
$this->assertSame($expectedOptions['option1'], $args->getOption('o'));
$expectedOption1Argument = new cli\arguments\Argument('-o');
$this->assertSame($expectedOptions['option1'], $args->getOption($expectedOption1Argument));
}
/**
* Data provider with valid args and options
*
* @return array set of args and expected parsed values
*/
public function settingsWithValidOptions()
{
return array(
array(
array('-o', 'option_value', '-f'),
array('option1' => 'option_value', 'flag1' => true)
),
array(
array('--option1', 'option_value', '--flag1'),
array('option1' => 'option_value', 'flag1' => true)
),
array(
array('-f', '--option1', 'option_value'),
array('flag1' => true, 'option1' => 'option_value')
)
);
}
/**
* Data provider with missing options
*
* @return array set of args and expected parsed values
*/
public function settingsWithMissingOptions()
{
return array(
array(
array('-f', '--option1'),
array('flag1' => true, 'option1' => 'Error should be triggered')
),
array(
array('--option1', '-f'),
array('option1' => 'Error should be triggered', 'flag1' => true)
)
);
}
/**
* Data provider with missing options. The default value should be populated
*
* @return array set of args and expected parsed values
*/
public function settingsWithMissingOptionsWithDefault()
{
return array(
array(
array('-f', '--option2'),
array('flag1' => true, 'option2' => 'some default value')
),
array(
array('--option2', '-f'),
array('option2' => 'some default value', 'flag1' => true)
)
);
}
public function settingsWithNoOptionsWithDefault()
{
return array(
array(
array(),
array('flag1' => false, 'flag2' => false, 'option2' => 'some default value')
)
);
}
/**
* Generic private testParse method.
*
* @param array $args arguments as they appear in the cli
* @param array $expectedValues expected values after parsing
*/
private function _testParse($cliParams, $expectedValues)
{
self::pushToArgv($cliParams);
$args = new cli\Arguments($this->settings);
$args->parse();
foreach ($expectedValues as $name => $value) {
if ($args->isFlag($name)) {
$this->assertEquals($value, $args[$name]);
}
if ($args->isOption($name)) {
$this->assertEquals($value, $args[$name]);
}
}
}
/**
* @param array $args arguments as they appear in the cli
* @param array $expectedValues expected values after parsing
*
* @dataProvider settingsWithValidOptions
*/
public function testParseWithValidOptions($cliParams, $expectedValues)
{
$this->_testParse($cliParams, $expectedValues);
}
/**
* @param array $args arguments as they appear in the cli
* @param array $expectedValues expected values after parsing
* @dataProvider settingsWithMissingOptions
* @expectedException PHPUnit_Framework_Error_Warning
* @expectedExceptionMessage no value given for --option1
*/
public function testParseWithMissingOptions($cliParams, $expectedValues)
{
$this->_testParse($cliParams, $expectedValues);
}
/**
* @param array $args arguments as they appear in the cli
* @param array $expectedValues expected values after parsing
* @dataProvider settingsWithMissingOptionsWithDefault
*/
public function testParseWithMissingOptionsWithDefault($cliParams, $expectedValues)
{
$this->_testParse($cliParams, $expectedValues);
}
/**
* @param array $args arguments as they appear in the cli
* @param array $expectedValues expected values after parsing
* @dataProvider settingsWithNoOptionsWithDefault
*/
public function testParseWithNoOptionsWithDefault($cliParams, $expectedValues) {
$this->_testParse($cliParams, $expectedValues);
}
}