Yaffs site version 1.1
[yaffs-website] / vendor / symfony / config / Tests / Definition / Builder / ExprBuilderTest.php
diff --git a/vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php b/vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php
new file mode 100644 (file)
index 0000000..1b90ebf
--- /dev/null
@@ -0,0 +1,236 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Config\Tests\Definition\Builder;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Config\Definition\Builder\TreeBuilder;
+
+class ExprBuilderTest extends TestCase
+{
+    public function testAlwaysExpression()
+    {
+        $test = $this->getTestBuilder()
+            ->always($this->returnClosure('new_value'))
+        ->end();
+
+        $this->assertFinalizedValueIs('new_value', $test);
+    }
+
+    public function testIfTrueExpression()
+    {
+        $test = $this->getTestBuilder()
+            ->ifTrue()
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('new_value', $test, array('key' => true));
+
+        $test = $this->getTestBuilder()
+            ->ifTrue(function ($v) { return true; })
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('new_value', $test);
+
+        $test = $this->getTestBuilder()
+            ->ifTrue(function ($v) { return false; })
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('value', $test);
+    }
+
+    public function testIfStringExpression()
+    {
+        $test = $this->getTestBuilder()
+            ->ifString()
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('new_value', $test);
+
+        $test = $this->getTestBuilder()
+            ->ifString()
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs(45, $test, array('key' => 45));
+    }
+
+    public function testIfNullExpression()
+    {
+        $test = $this->getTestBuilder()
+            ->ifNull()
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('new_value', $test, array('key' => null));
+
+        $test = $this->getTestBuilder()
+            ->ifNull()
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('value', $test);
+    }
+
+    public function testIfArrayExpression()
+    {
+        $test = $this->getTestBuilder()
+            ->ifArray()
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('new_value', $test, array('key' => array()));
+
+        $test = $this->getTestBuilder()
+            ->ifArray()
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('value', $test);
+    }
+
+    public function testIfInArrayExpression()
+    {
+        $test = $this->getTestBuilder()
+            ->ifInArray(array('foo', 'bar', 'value'))
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('new_value', $test);
+
+        $test = $this->getTestBuilder()
+            ->ifInArray(array('foo', 'bar'))
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('value', $test);
+    }
+
+    public function testIfNotInArrayExpression()
+    {
+        $test = $this->getTestBuilder()
+            ->ifNotInArray(array('foo', 'bar'))
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('new_value', $test);
+
+        $test = $this->getTestBuilder()
+            ->ifNotInArray(array('foo', 'bar', 'value_from_config'))
+            ->then($this->returnClosure('new_value'))
+        ->end();
+        $this->assertFinalizedValueIs('new_value', $test);
+    }
+
+    public function testThenEmptyArrayExpression()
+    {
+        $test = $this->getTestBuilder()
+            ->ifString()
+            ->thenEmptyArray()
+        ->end();
+        $this->assertFinalizedValueIs(array(), $test);
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
+     */
+    public function testThenInvalid()
+    {
+        $test = $this->getTestBuilder()
+            ->ifString()
+            ->thenInvalid('Invalid value')
+        ->end();
+        $this->finalizeTestBuilder($test);
+    }
+
+    public function testThenUnsetExpression()
+    {
+        $test = $this->getTestBuilder()
+            ->ifString()
+            ->thenUnset()
+        ->end();
+        $this->assertEquals(array(), $this->finalizeTestBuilder($test));
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage You must specify an if part.
+     */
+    public function testEndIfPartNotSpecified()
+    {
+        $this->getTestBuilder()->end();
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage You must specify a then part.
+     */
+    public function testEndThenPartNotSpecified()
+    {
+        $builder = $this->getTestBuilder();
+        $builder->ifPart = 'test';
+        $builder->end();
+    }
+
+    /**
+     * Create a test treebuilder with a variable node, and init the validation.
+     *
+     * @return TreeBuilder
+     */
+    protected function getTestBuilder()
+    {
+        $builder = new TreeBuilder();
+
+        return $builder
+            ->root('test')
+            ->children()
+            ->variableNode('key')
+            ->validate()
+        ;
+    }
+
+    /**
+     * Close the validation process and finalize with the given config.
+     *
+     * @param TreeBuilder $testBuilder The tree builder to finalize
+     * @param array       $config      The config you want to use for the finalization, if nothing provided
+     *                                 a simple array('key'=>'value') will be used
+     *
+     * @return array The finalized config values
+     */
+    protected function finalizeTestBuilder($testBuilder, $config = null)
+    {
+        return $testBuilder
+            ->end()
+            ->end()
+            ->end()
+            ->buildTree()
+            ->finalize(null === $config ? array('key' => 'value') : $config)
+        ;
+    }
+
+    /**
+     * Return a closure that will return the given value.
+     *
+     * @param mixed $val The value that the closure must return
+     *
+     * @return \Closure
+     */
+    protected function returnClosure($val)
+    {
+        return function ($v) use ($val) {
+            return $val;
+        };
+    }
+
+    /**
+     * Assert that the given test builder, will return the given value.
+     *
+     * @param mixed       $value       The value to test
+     * @param TreeBuilder $treeBuilder The tree builder to finalize
+     * @param mixed       $config      The config values that new to be finalized
+     */
+    protected function assertFinalizedValueIs($value, $treeBuilder, $config = null)
+    {
+        $this->assertEquals(array('key' => $value), $this->finalizeTestBuilder($treeBuilder, $config));
+    }
+}