Version 1
[yaffs-website] / vendor / symfony / validator / Tests / Constraints / CompositeTest.php
diff --git a/vendor/symfony/validator/Tests/Constraints/CompositeTest.php b/vendor/symfony/validator/Tests/Constraints/CompositeTest.php
new file mode 100644 (file)
index 0000000..df42550
--- /dev/null
@@ -0,0 +1,148 @@
+<?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\Validator\Tests\Constraints;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Validator\Constraints\Composite;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Symfony\Component\Validator\Constraints\NotNull;
+use Symfony\Component\Validator\Constraints\Valid;
+
+class ConcreteComposite extends Composite
+{
+    public $constraints;
+
+    protected function getCompositeOption()
+    {
+        return 'constraints';
+    }
+
+    public function getDefaultOption()
+    {
+        return 'constraints';
+    }
+}
+
+/**
+ * @author Bernhard Schussek <bschussek@gmail.com>
+ */
+class CompositeTest extends TestCase
+{
+    public function testMergeNestedGroupsIfNoExplicitParentGroup()
+    {
+        $constraint = new ConcreteComposite(array(
+            new NotNull(array('groups' => 'Default')),
+            new NotBlank(array('groups' => array('Default', 'Strict'))),
+        ));
+
+        $this->assertEquals(array('Default', 'Strict'), $constraint->groups);
+        $this->assertEquals(array('Default'), $constraint->constraints[0]->groups);
+        $this->assertEquals(array('Default', 'Strict'), $constraint->constraints[1]->groups);
+    }
+
+    public function testSetImplicitNestedGroupsIfExplicitParentGroup()
+    {
+        $constraint = new ConcreteComposite(array(
+            'constraints' => array(
+                new NotNull(),
+                new NotBlank(),
+            ),
+            'groups' => array('Default', 'Strict'),
+        ));
+
+        $this->assertEquals(array('Default', 'Strict'), $constraint->groups);
+        $this->assertEquals(array('Default', 'Strict'), $constraint->constraints[0]->groups);
+        $this->assertEquals(array('Default', 'Strict'), $constraint->constraints[1]->groups);
+    }
+
+    public function testExplicitNestedGroupsMustBeSubsetOfExplicitParentGroups()
+    {
+        $constraint = new ConcreteComposite(array(
+            'constraints' => array(
+                new NotNull(array('groups' => 'Default')),
+                new NotBlank(array('groups' => 'Strict')),
+            ),
+            'groups' => array('Default', 'Strict'),
+        ));
+
+        $this->assertEquals(array('Default', 'Strict'), $constraint->groups);
+        $this->assertEquals(array('Default'), $constraint->constraints[0]->groups);
+        $this->assertEquals(array('Strict'), $constraint->constraints[1]->groups);
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
+     */
+    public function testFailIfExplicitNestedGroupsNotSubsetOfExplicitParentGroups()
+    {
+        new ConcreteComposite(array(
+            'constraints' => array(
+                new NotNull(array('groups' => array('Default', 'Foobar'))),
+            ),
+            'groups' => array('Default', 'Strict'),
+        ));
+    }
+
+    public function testImplicitGroupNamesAreForwarded()
+    {
+        $constraint = new ConcreteComposite(array(
+            new NotNull(array('groups' => 'Default')),
+            new NotBlank(array('groups' => 'Strict')),
+        ));
+
+        $constraint->addImplicitGroupName('ImplicitGroup');
+
+        $this->assertEquals(array('Default', 'Strict', 'ImplicitGroup'), $constraint->groups);
+        $this->assertEquals(array('Default', 'ImplicitGroup'), $constraint->constraints[0]->groups);
+        $this->assertEquals(array('Strict'), $constraint->constraints[1]->groups);
+    }
+
+    public function testSingleConstraintsAccepted()
+    {
+        $nestedConstraint = new NotNull();
+        $constraint = new ConcreteComposite($nestedConstraint);
+
+        $this->assertEquals(array($nestedConstraint), $constraint->constraints);
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
+     */
+    public function testFailIfNoConstraint()
+    {
+        new ConcreteComposite(array(
+            new NotNull(array('groups' => 'Default')),
+            'NotBlank',
+        ));
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
+     */
+    public function testFailIfNoConstraintObject()
+    {
+        new ConcreteComposite(array(
+            new NotNull(array('groups' => 'Default')),
+            new \ArrayObject(),
+        ));
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
+     */
+    public function testValidCantBeNested()
+    {
+        new ConcreteComposite(array(
+            new Valid(),
+        ));
+    }
+}