Skip to content

Commit

Permalink
Allow to define Enum nodes with 1 single element
Browse files Browse the repository at this point in the history
  • Loading branch information
javiereguiluz authored and fabpot committed Aug 3, 2015
1 parent 6888c1f commit 68f0818
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 3 deletions.
20 changes: 20 additions & 0 deletions UPGRADE-2.8.md
Expand Up @@ -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`.
4 changes: 2 additions & 2 deletions src/Symfony/Component/Config/Definition/EnumNode.php
Expand Up @@ -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);
Expand Down
15 changes: 14 additions & 1 deletion src/Symfony/Component/Config/Tests/Definition/EnumNodeTest.php
Expand Up @@ -23,10 +23,23 @@ public function testFinalizeValue()

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

/**
Expand Down

0 comments on commit 68f0818

Please sign in to comment.