4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Validator\Tests\Constraints;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\Validator\Constraints\Composite;
16 use Symfony\Component\Validator\Constraints\NotBlank;
17 use Symfony\Component\Validator\Constraints\NotNull;
18 use Symfony\Component\Validator\Constraints\Valid;
20 class ConcreteComposite extends Composite
24 protected function getCompositeOption()
29 public function getDefaultOption()
36 * @author Bernhard Schussek <bschussek@gmail.com>
38 class CompositeTest extends TestCase
40 public function testMergeNestedGroupsIfNoExplicitParentGroup()
42 $constraint = new ConcreteComposite(array(
43 new NotNull(array('groups' => 'Default')),
44 new NotBlank(array('groups' => array('Default', 'Strict'))),
47 $this->assertEquals(array('Default', 'Strict'), $constraint->groups);
48 $this->assertEquals(array('Default'), $constraint->constraints[0]->groups);
49 $this->assertEquals(array('Default', 'Strict'), $constraint->constraints[1]->groups);
52 public function testSetImplicitNestedGroupsIfExplicitParentGroup()
54 $constraint = new ConcreteComposite(array(
55 'constraints' => array(
59 'groups' => array('Default', 'Strict'),
62 $this->assertEquals(array('Default', 'Strict'), $constraint->groups);
63 $this->assertEquals(array('Default', 'Strict'), $constraint->constraints[0]->groups);
64 $this->assertEquals(array('Default', 'Strict'), $constraint->constraints[1]->groups);
67 public function testExplicitNestedGroupsMustBeSubsetOfExplicitParentGroups()
69 $constraint = new ConcreteComposite(array(
70 'constraints' => array(
71 new NotNull(array('groups' => 'Default')),
72 new NotBlank(array('groups' => 'Strict')),
74 'groups' => array('Default', 'Strict'),
77 $this->assertEquals(array('Default', 'Strict'), $constraint->groups);
78 $this->assertEquals(array('Default'), $constraint->constraints[0]->groups);
79 $this->assertEquals(array('Strict'), $constraint->constraints[1]->groups);
83 * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
85 public function testFailIfExplicitNestedGroupsNotSubsetOfExplicitParentGroups()
87 new ConcreteComposite(array(
88 'constraints' => array(
89 new NotNull(array('groups' => array('Default', 'Foobar'))),
91 'groups' => array('Default', 'Strict'),
95 public function testImplicitGroupNamesAreForwarded()
97 $constraint = new ConcreteComposite(array(
98 new NotNull(array('groups' => 'Default')),
99 new NotBlank(array('groups' => 'Strict')),
102 $constraint->addImplicitGroupName('ImplicitGroup');
104 $this->assertEquals(array('Default', 'Strict', 'ImplicitGroup'), $constraint->groups);
105 $this->assertEquals(array('Default', 'ImplicitGroup'), $constraint->constraints[0]->groups);
106 $this->assertEquals(array('Strict'), $constraint->constraints[1]->groups);
109 public function testSingleConstraintsAccepted()
111 $nestedConstraint = new NotNull();
112 $constraint = new ConcreteComposite($nestedConstraint);
114 $this->assertEquals(array($nestedConstraint), $constraint->constraints);
118 * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
120 public function testFailIfNoConstraint()
122 new ConcreteComposite(array(
123 new NotNull(array('groups' => 'Default')),
129 * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
131 public function testFailIfNoConstraintObject()
133 new ConcreteComposite(array(
134 new NotNull(array('groups' => 'Default')),
140 * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
142 public function testValidCantBeNested()
144 new ConcreteComposite(array(