From 777107db2a17ec7cf76af8630d1a33669a01beb6 Mon Sep 17 00:00:00 2001 From: Pierre du Plessis Date: Fri, 10 Mar 2017 14:08:44 +0200 Subject: [PATCH 1/8] Remove Validator\TypeTestCase and add validator logic to base TypeTestCase --- .../Component/Form/Test/TypeTestCase.php | 18 ++++++++ .../Type/BaseValidatorExtensionTest.php | 1 + .../Extension/Validator/Type/TypeTestCase.php | 44 ------------------- .../Type/UploadValidatorExtensionTest.php | 1 + 4 files changed, 20 insertions(+), 44 deletions(-) delete mode 100644 src/Symfony/Component/Form/Tests/Extension/Validator/Type/TypeTestCase.php diff --git a/src/Symfony/Component/Form/Test/TypeTestCase.php b/src/Symfony/Component/Form/Test/TypeTestCase.php index ff3f78292f5f0..bccf112d57067 100644 --- a/src/Symfony/Component/Form/Test/TypeTestCase.php +++ b/src/Symfony/Component/Form/Test/TypeTestCase.php @@ -11,8 +11,10 @@ namespace Symfony\Component\Form\Test; +use Symfony\Component\Form\Extension\Validator\ValidatorExtension; use Symfony\Component\Form\FormBuilder; use Symfony\Component\EventDispatcher\EventDispatcher; +use Symfony\Component\Validator\Validator\ValidatorInterface; abstract class TypeTestCase extends FormIntegrationTestCase { @@ -34,6 +36,22 @@ protected function setUp() $this->builder = new FormBuilder(null, null, $this->dispatcher, $this->factory); } + protected function getExtensions() + { + $extensions = array(); + + if (interface_exists(ValidatorInterface::class)) { + $validator = $this->getMockBuilder('Symfony\Component\Validator\Validator\ValidatorInterface')->getMock(); + $metadata = $this->getMockBuilder('Symfony\Component\Validator\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); + $validator->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata)); + $validator->expects($this->any())->method('validate')->will($this->returnValue(array())); + + $extensions[] = new ValidatorExtension($validator); + } + + return $extensions; + } + public static function assertDateTimeEquals(\DateTime $expected, \DateTime $actual) { self::assertEquals($expected->format('c'), $actual->format('c')); diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/BaseValidatorExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/BaseValidatorExtensionTest.php index f12b915b9a378..e83aaaa3491dc 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/BaseValidatorExtensionTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/BaseValidatorExtensionTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Form\Tests\Extension\Validator\Type; use Symfony\Component\Form\Test\FormInterface; +use Symfony\Component\Form\Test\TypeTestCase; use Symfony\Component\Validator\Constraints\GroupSequence; /** diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/TypeTestCase.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/TypeTestCase.php deleted file mode 100644 index cb6000aa8fb81..0000000000000 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/TypeTestCase.php +++ /dev/null @@ -1,44 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Form\Tests\Extension\Validator\Type; - -use Symfony\Component\Form\Test\TypeTestCase as BaseTypeTestCase; -use Symfony\Component\Form\Extension\Validator\ValidatorExtension; - -abstract class TypeTestCase extends BaseTypeTestCase -{ - protected $validator; - - protected function setUp() - { - $this->validator = $this->getMockBuilder('Symfony\Component\Validator\Validator\ValidatorInterface')->getMock(); - $metadata = $this->getMockBuilder('Symfony\Component\Validator\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); - $this->validator->expects($this->once())->method('getMetadataFor')->will($this->returnValue($metadata)); - $this->validator->expects($this->any())->method('validate')->will($this->returnValue(array())); - - parent::setUp(); - } - - protected function tearDown() - { - $this->validator = null; - - parent::tearDown(); - } - - protected function getExtensions() - { - return array_merge(parent::getExtensions(), array( - new ValidatorExtension($this->validator), - )); - } -} diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/UploadValidatorExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/UploadValidatorExtensionTest.php index 8c0984f7e4e13..17792b67454f2 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/UploadValidatorExtensionTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/UploadValidatorExtensionTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Form\Tests\Extension\Validator\Type; use Symfony\Component\Form\Extension\Validator\Type\UploadValidatorExtension; +use Symfony\Component\Form\Test\TypeTestCase; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\Options; From 06b4b8384832ee68bde9d5e2cf75207d3c92be05 Mon Sep 17 00:00:00 2001 From: Pierre du Plessis Date: Fri, 10 Mar 2017 14:17:58 +0200 Subject: [PATCH 2/8] Keep class references consistent --- src/Symfony/Component/Form/Test/TypeTestCase.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Symfony/Component/Form/Test/TypeTestCase.php b/src/Symfony/Component/Form/Test/TypeTestCase.php index bccf112d57067..16c1c1c11870f 100644 --- a/src/Symfony/Component/Form/Test/TypeTestCase.php +++ b/src/Symfony/Component/Form/Test/TypeTestCase.php @@ -14,7 +14,6 @@ use Symfony\Component\Form\Extension\Validator\ValidatorExtension; use Symfony\Component\Form\FormBuilder; use Symfony\Component\EventDispatcher\EventDispatcher; -use Symfony\Component\Validator\Validator\ValidatorInterface; abstract class TypeTestCase extends FormIntegrationTestCase { @@ -40,7 +39,7 @@ protected function getExtensions() { $extensions = array(); - if (interface_exists(ValidatorInterface::class)) { + if (interface_exists('Symfony\Component\Validator\Validator\ValidatorInterface')) { $validator = $this->getMockBuilder('Symfony\Component\Validator\Validator\ValidatorInterface')->getMock(); $metadata = $this->getMockBuilder('Symfony\Component\Validator\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); $validator->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata)); From 6180189e471b3dbdd5244dc1d9d3d10bbc472373 Mon Sep 17 00:00:00 2001 From: Pierre du Plessis Date: Sat, 11 Mar 2017 17:04:39 +0200 Subject: [PATCH 3/8] Add ValidatorExtensionTrait to register validation extension for forms testing --- .../Test/Traits/ValidatorExtensionTrait.php | 40 +++++++++++++++++++ .../Component/Form/Test/TypeTestCase.php | 11 ++--- 2 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php diff --git a/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php new file mode 100644 index 0000000000000..3cd1161c872f2 --- /dev/null +++ b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Form\Test\Traits; + +use Symfony\Component\Form\Extension\Validator\ValidatorExtension; +use Symfony\Component\Form\Test\TypeTestCase; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Validator\ValidatorInterface; + +trait ValidatorExtensionTrait +{ + protected $validator; + + protected function getValidatorExtension() + { + if (!interface_exists(ValidatorInterface::class)) { + throw new \Exception('In order to use the "ValidatorExtensionTrait", the symfony/validator component must be installed'); + } + + if (!$this instanceof TypeTestCase) { + throw new \Exception(sprintf('The trait "ValidatorExtensionTrait" can only be added to a class that extends %s', TypeTestCase::class)); + } + + $this->validator = $this->getMockBuilder(ValidatorInterface::class)->getMock(); + $metadata = $this->getMockBuilder(ClassMetadata::class)->disableOriginalConstructor()->getMock(); + $this->validator->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata)); + $this->validator->expects($this->any())->method('validate')->will($this->returnValue([])); + + return new ValidatorExtension($this->validator); + } +} \ No newline at end of file diff --git a/src/Symfony/Component/Form/Test/TypeTestCase.php b/src/Symfony/Component/Form/Test/TypeTestCase.php index 16c1c1c11870f..2048c426ca996 100644 --- a/src/Symfony/Component/Form/Test/TypeTestCase.php +++ b/src/Symfony/Component/Form/Test/TypeTestCase.php @@ -11,9 +11,9 @@ namespace Symfony\Component\Form\Test; -use Symfony\Component\Form\Extension\Validator\ValidatorExtension; use Symfony\Component\Form\FormBuilder; use Symfony\Component\EventDispatcher\EventDispatcher; +use Symfony\Component\Form\Test\Traits\ValidatorExtensionTrait; abstract class TypeTestCase extends FormIntegrationTestCase { @@ -39,13 +39,8 @@ protected function getExtensions() { $extensions = array(); - if (interface_exists('Symfony\Component\Validator\Validator\ValidatorInterface')) { - $validator = $this->getMockBuilder('Symfony\Component\Validator\Validator\ValidatorInterface')->getMock(); - $metadata = $this->getMockBuilder('Symfony\Component\Validator\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock(); - $validator->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata)); - $validator->expects($this->any())->method('validate')->will($this->returnValue(array())); - - $extensions[] = new ValidatorExtension($validator); + if (in_array(ValidatorExtensionTrait::class, class_uses($this))) { + $extensions[] = $this->getValidatorExtension(); } return $extensions; From 9374094e7e04d3944fe8b70e6980b5bbb590c7b1 Mon Sep 17 00:00:00 2001 From: Pierre du Plessis Date: Wed, 15 Mar 2017 10:16:19 +0200 Subject: [PATCH 4/8] Add ValidatorExtensionTrait to FormTypeValidatorExtensionTest --- .../Validator/Type/FormTypeValidatorExtensionTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/FormTypeValidatorExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/FormTypeValidatorExtensionTest.php index 2bf10bb36bce2..0dca9c476b56d 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/FormTypeValidatorExtensionTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/FormTypeValidatorExtensionTest.php @@ -12,11 +12,14 @@ namespace Symfony\Component\Form\Tests\Extension\Validator\Type; use Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension; +use Symfony\Component\Form\Test\Traits\ValidatorExtensionTrait; use Symfony\Component\Validator\Constraints\Valid; use Symfony\Component\Validator\ConstraintViolationList; class FormTypeValidatorExtensionTest extends BaseValidatorExtensionTest { + use ValidatorExtensionTrait; + public function testSubmitValidatesData() { $builder = $this->factory->createBuilder( From f74a53c8ac45b16c4d7f0f97559c0a9b15fa716e Mon Sep 17 00:00:00 2001 From: Pierre du Plessis Date: Wed, 15 Mar 2017 11:07:37 +0200 Subject: [PATCH 5/8] Add ValidatorExtensionTrait to SubmitTypeValidatorExtensionTest --- .../Validator/Type/SubmitTypeValidatorExtensionTest.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/SubmitTypeValidatorExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/SubmitTypeValidatorExtensionTest.php index 48fc8de51d9c8..015b9582b5764 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/Type/SubmitTypeValidatorExtensionTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/Type/SubmitTypeValidatorExtensionTest.php @@ -11,8 +11,12 @@ namespace Symfony\Component\Form\Tests\Extension\Validator\Type; +use Symfony\Component\Form\Test\Traits\ValidatorExtensionTrait; + class SubmitTypeValidatorExtensionTest extends BaseValidatorExtensionTest { + use ValidatorExtensionTrait; + protected function createForm(array $options = array()) { return $this->factory->create('Symfony\Component\Form\Extension\Core\Type\SubmitType', null, $options); From b887c3cf7a99a35e9d3dfee3de18e5e390942709 Mon Sep 17 00:00:00 2001 From: Pierre du Plessis Date: Wed, 15 Mar 2017 11:41:33 +0200 Subject: [PATCH 6/8] Fixed CS --- .../Component/Form/Test/Traits/ValidatorExtensionTrait.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php index 3cd1161c872f2..0724f697ba77a 100644 --- a/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php +++ b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php @@ -33,8 +33,8 @@ protected function getValidatorExtension() $this->validator = $this->getMockBuilder(ValidatorInterface::class)->getMock(); $metadata = $this->getMockBuilder(ClassMetadata::class)->disableOriginalConstructor()->getMock(); $this->validator->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata)); - $this->validator->expects($this->any())->method('validate')->will($this->returnValue([])); + $this->validator->expects($this->any())->method('validate')->will($this->returnValue(array())); return new ValidatorExtension($this->validator); } -} \ No newline at end of file +} From 45e518ae7c519c26f50ec57188e7f09f14d251e0 Mon Sep 17 00:00:00 2001 From: Pierre du Plessis Date: Tue, 26 Sep 2017 21:05:17 +0200 Subject: [PATCH 7/8] Add tearDownAfterClass method to clear validator property --- src/Symfony/Component/Form/Test/TypeTestCase.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Symfony/Component/Form/Test/TypeTestCase.php b/src/Symfony/Component/Form/Test/TypeTestCase.php index 2048c426ca996..7ecffdd0640d3 100644 --- a/src/Symfony/Component/Form/Test/TypeTestCase.php +++ b/src/Symfony/Component/Form/Test/TypeTestCase.php @@ -35,6 +35,13 @@ protected function setUp() $this->builder = new FormBuilder(null, null, $this->dispatcher, $this->factory); } + protected function tearDownAfterClass() + { + if (in_array(ValidatorExtensionTrait::class, class_uses($this))) { + $this->validator = null; + } + } + protected function getExtensions() { $extensions = array(); From c6ae491377ea762d0b131c7e8ef5156bb061cdf5 Mon Sep 17 00:00:00 2001 From: Pierre du Plessis Date: Tue, 26 Sep 2017 21:27:18 +0200 Subject: [PATCH 8/8] Change tearDownAfterClass to tearDown in TypeTestCase --- src/Symfony/Component/Form/Test/TypeTestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Test/TypeTestCase.php b/src/Symfony/Component/Form/Test/TypeTestCase.php index 7ecffdd0640d3..346dc61648896 100644 --- a/src/Symfony/Component/Form/Test/TypeTestCase.php +++ b/src/Symfony/Component/Form/Test/TypeTestCase.php @@ -35,7 +35,7 @@ protected function setUp() $this->builder = new FormBuilder(null, null, $this->dispatcher, $this->factory); } - protected function tearDownAfterClass() + protected function tearDown() { if (in_array(ValidatorExtensionTrait::class, class_uses($this))) { $this->validator = null;