Allow to define Enum nodes with 1 single element

This commit is contained in:
Javier Eguiluz 2015-08-02 13:28:24 +02:00 committed by Fabien Potencier
parent 6888c1f256
commit 68f0818a6c
3 changed files with 36 additions and 3 deletions

View File

@ -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`.

View File

@ -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);

View File

@ -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'));
}
/**