Allow to define Enum nodes with 1 single element
This commit is contained in:
parent
6888c1f256
commit
68f0818a6c
|
@ -399,3 +399,23 @@ FrameworkBundle
|
|||
session:
|
||||
cookie_httponly: false
|
||||
```
|
||||
|
||||
Config
|
||||
------
|
||||
|
||||
The edge case of defining just one value for nodes of type Enum is now allowed:
|
||||
|
||||
```php
|
||||
$rootNode
|
||||
->children()
|
||||
->enumNode('variable')
|
||||
->values(array('value'))
|
||||
->end()
|
||||
->end()
|
||||
;
|
||||
```
|
||||
|
||||
Before: `InvalidArgumentException` (variable must contain at least two
|
||||
distinct elements).
|
||||
After: the code will work as expected and it will restrict the values of the
|
||||
`variable` option to just `value`.
|
||||
|
|
|
@ -25,8 +25,8 @@ class EnumNode extends ScalarNode
|
|||
public function __construct($name, NodeInterface $parent = null, array $values = array())
|
||||
{
|
||||
$values = array_unique($values);
|
||||
if (count($values) <= 1) {
|
||||
throw new \InvalidArgumentException('$values must contain at least two distinct elements.');
|
||||
if (empty($values)) {
|
||||
throw new \InvalidArgumentException('$values must contain at least one element.');
|
||||
}
|
||||
|
||||
parent::__construct($name, $parent);
|
||||
|
|
|
@ -23,10 +23,23 @@ class EnumNodeTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage $values must contain at least one element.
|
||||
*/
|
||||
public function testConstructionWithNoValues()
|
||||
{
|
||||
new EnumNode('foo', null, array());
|
||||
}
|
||||
|
||||
public function testConstructionWithOneValue()
|
||||
{
|
||||
new EnumNode('foo', null, array('foo', 'foo'));
|
||||
$node = new EnumNode('foo', null, array('foo'));
|
||||
$this->assertSame('foo', $node->finalize('foo'));
|
||||
}
|
||||
|
||||
public function testConstructionWithOneDistinctValue()
|
||||
{
|
||||
$node = new EnumNode('foo', null, array('foo', 'foo'));
|
||||
$this->assertSame('foo', $node->finalize('foo'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Reference in New Issue