[OptionsParser] Added method replaceDefaults()
This commit is contained in:
parent
b9d053edb2
commit
04522ca4ed
@ -72,6 +72,29 @@ class OptionsParser
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces default option values.
|
||||
*
|
||||
* Old defaults are erased, which means that closures passed here can't
|
||||
* access the previous default value. This may be useful to improve
|
||||
* performance if the previous default value is calculated by an expensive
|
||||
* closure.
|
||||
*
|
||||
* @param array $options A list of option names as keys and default values
|
||||
* as values. The option values may be closures
|
||||
* of the following signature:
|
||||
*
|
||||
* - function (Options $options)
|
||||
*/
|
||||
public function replaceDefaults(array $defaultValues)
|
||||
{
|
||||
foreach ($defaultValues as $option => $value) {
|
||||
unset($this->defaultOptions[$option]);
|
||||
$this->defaultOptions[$option] = $value;
|
||||
$this->knownOptions[$option] = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets optional options.
|
||||
*
|
||||
|
@ -145,6 +145,27 @@ class OptionsParserTest extends \PHPUnit_Framework_TestCase
|
||||
), $this->parser->parse($options));
|
||||
}
|
||||
|
||||
public function testParseLazyReplaceDefaults()
|
||||
{
|
||||
$test = $this;
|
||||
|
||||
$this->parser->setDefaults(array(
|
||||
'one' => function (Options $options) use ($test) {
|
||||
$test->fail('Previous closure should not be executed');
|
||||
},
|
||||
));
|
||||
|
||||
$this->parser->replaceDefaults(array(
|
||||
'one' => function (Options $options, $previousValue) {
|
||||
return '1';
|
||||
},
|
||||
));
|
||||
|
||||
$this->assertEquals(array(
|
||||
'one' => '1',
|
||||
), $this->parser->parse(array()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Symfony\Component\OptionsParser\Exception\InvalidOptionsException
|
||||
*/
|
||||
|
@ -80,7 +80,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals('dynamic', $this->options['foo']);
|
||||
}
|
||||
|
||||
public function testLazyOptionWithEagerCurrentValue()
|
||||
public function testLazyOptionWithEagerPreviousValue()
|
||||
{
|
||||
$test = $this;
|
||||
|
||||
@ -88,8 +88,8 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
|
||||
$this->options['foo'] = 'bar';
|
||||
|
||||
// defined by subclass
|
||||
$this->options['foo'] = function (Options $options, $currentValue) use ($test) {
|
||||
$test->assertEquals('bar', $currentValue);
|
||||
$this->options['foo'] = function (Options $options, $previousValue) use ($test) {
|
||||
$test->assertEquals('bar', $previousValue);
|
||||
|
||||
return 'dynamic';
|
||||
};
|
||||
@ -97,7 +97,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals('dynamic', $this->options['foo']);
|
||||
}
|
||||
|
||||
public function testLazyOptionWithLazyCurrentValue()
|
||||
public function testLazyOptionWithLazyPreviousValue()
|
||||
{
|
||||
$test = $this;
|
||||
|
||||
@ -107,8 +107,8 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
|
||||
};
|
||||
|
||||
// defined by subclass
|
||||
$this->options['foo'] = function (Options $options, $currentValue) use ($test) {
|
||||
$test->assertEquals('bar', $currentValue);
|
||||
$this->options['foo'] = function (Options $options, $previousValue) use ($test) {
|
||||
$test->assertEquals('bar', $previousValue);
|
||||
|
||||
return 'dynamic';
|
||||
};
|
||||
|
Reference in New Issue
Block a user