From 3c3428739fcdd35964a28cf0eb2285e087555895 Mon Sep 17 00:00:00 2001 From: Jeanmonod David Date: Tue, 12 Jun 2012 17:48:37 +0200 Subject: [PATCH] Add a new expression ->ifFalse() to the ExprBuilder --- .../Config/Definition/Builder/ExprBuilder.php | 21 ++++++++++++ .../Definition/Builder/ExprBuilderTest.php | 33 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/Symfony/Component/Config/Definition/Builder/ExprBuilder.php b/src/Symfony/Component/Config/Definition/Builder/ExprBuilder.php index 28474fd7cffd3..4f6bbb1587045 100644 --- a/src/Symfony/Component/Config/Definition/Builder/ExprBuilder.php +++ b/src/Symfony/Component/Config/Definition/Builder/ExprBuilder.php @@ -72,6 +72,27 @@ public function ifTrue(\Closure $closure = null) return $this; } + /** + * Sets a negative closure to use as tests. + * + * @param \Closure $closure, if null is provide, it just tests if the value is false. + * + * @return ExprBuilder + */ + public function ifFalse(\Closure $closure = null) + { + if (null === $closure) { + $finalClosure = function($v) { return false === $v; }; + } + else { + $finalClosure = function($v) use ($closure) { return ! $closure($v); }; + } + + $this->ifPart = $finalClosure; + + return $this; + } + /** * Tests if the value is a string. * diff --git a/src/Symfony/Component/Config/Tests/Definition/Builder/ExprBuilderTest.php b/src/Symfony/Component/Config/Tests/Definition/Builder/ExprBuilderTest.php index 7d4c72bb26b66..c1db6fb101c9a 100644 --- a/src/Symfony/Component/Config/Tests/Definition/Builder/ExprBuilderTest.php +++ b/src/Symfony/Component/Config/Tests/Definition/Builder/ExprBuilderTest.php @@ -35,6 +35,12 @@ public function testIfTrueExpression() $this->assertFinalizedValueIs('new_value', $test, array('key'=>true)); $test = $this->getTestBuilder() + ->ifTrue() + ->then($this->returnClosure('new_value')) + ->end(); + $this->assertFinalizedValueIs(false, $test, array('key'=>false)); + + $test = $this->initScenario() ->ifTrue( function($v){ return true; }) ->then($this->returnClosure('new_value')) ->end(); @@ -47,6 +53,33 @@ public function testIfTrueExpression() $this->assertFinalizedValueIs('value',$test); } + public function testIfFalseExpression() + { + $test = $this->getTestBuilder() + ->ifFalse() + ->then( function($v){ return 'new_value'; }) + ->end(); + $this->assertFinalizedValueIs('new_value',$test, array('key'=>false)); + + $test = $this->getTestBuilder() + ->ifFalse() + ->then( function($v){ return 'new_value'; }) + ->end(); + $this->assertFinalizedValueIs(true,$test, array('key'=>true)); + + $test = $this->getTestBuilder() + ->ifFalse( function($v){ return false; }) + ->then( $this->returnClosure('new_value') ) + ->end(); + $this->assertFinalizedValueIs('new_value',$test); + + $test = $this->getTestBuilder() + ->ifFalse( function($v){ return true; }) + ->then( $this->returnClosure('new_value') ) + ->end(); + $this->assertFinalizedValueIs('value',$test); + } + public function testIfStringExpression() { $test = $this->getTestBuilder()