* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Form\Tests; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\FormRegistry; use Symfony\Component\Form\FormTypeGuesserChain; use Symfony\Component\Form\ResolvedFormType; use Symfony\Component\Form\ResolvedFormTypeFactoryInterface; use Symfony\Component\Form\Tests\Fixtures\FormWithSameParentType; use Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeBar; use Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeBaz; use Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeFoo; use Symfony\Component\Form\Tests\Fixtures\FooSubType; use Symfony\Component\Form\Tests\Fixtures\FooType; use Symfony\Component\Form\Tests\Fixtures\FooTypeBarExtension; use Symfony\Component\Form\Tests\Fixtures\FooTypeBazExtension; use Symfony\Component\Form\Tests\Fixtures\TestExtension; /** * @author Bernhard Schussek */ class FormRegistryTest extends TestCase { /** * @var FormRegistry */ private $registry; /** * @var \PHPUnit_Framework_MockObject_MockObject|ResolvedFormTypeFactoryInterface */ private $resolvedTypeFactory; /** * @var \PHPUnit_Framework_MockObject_MockObject */ private $guesser1; /** * @var \PHPUnit_Framework_MockObject_MockObject */ private $guesser2; /** * @var TestExtension */ private $extension1; /** * @var TestExtension */ private $extension2; protected function setUp() { $this->resolvedTypeFactory = $this->getMockBuilder('Symfony\Component\Form\ResolvedFormTypeFactory')->getMock(); $this->guesser1 = $this->getMockBuilder('Symfony\Component\Form\FormTypeGuesserInterface')->getMock(); $this->guesser2 = $this->getMockBuilder('Symfony\Component\Form\FormTypeGuesserInterface')->getMock(); $this->extension1 = new TestExtension($this->guesser1); $this->extension2 = new TestExtension($this->guesser2); $this->registry = new FormRegistry(array( $this->extension1, $this->extension2, ), $this->resolvedTypeFactory); } public function testGetTypeFromExtension() { $type = new FooType(); $resolvedType = new ResolvedFormType($type); $this->extension2->addType($type); $this->resolvedTypeFactory->expects($this->once()) ->method('createResolvedType') ->with($type) ->willReturn($resolvedType); $this->assertSame($resolvedType, $this->registry->getType(get_class($type))); } public function testLoadUnregisteredType() { $type = new FooType(); $resolvedType = new ResolvedFormType($type); $this->resolvedTypeFactory->expects($this->once()) ->method('createResolvedType') ->with($type) ->willReturn($resolvedType); $this->assertSame($resolvedType, $this->registry->getType('Symfony\Component\Form\Tests\Fixtures\FooType')); } /** * @expectedException \Symfony\Component\Form\Exception\InvalidArgumentException */ public function testFailIfUnregisteredTypeNoClass() { $this->registry->getType('Symfony\Blubb'); } /** * @expectedException \Symfony\Component\Form\Exception\InvalidArgumentException */ public function testFailIfUnregisteredTypeNoFormType() { $this->registry->getType('stdClass'); } public function testGetTypeWithTypeExtensions() { $type = new FooType(); $ext1 = new FooTypeBarExtension(); $ext2 = new FooTypeBazExtension(); $resolvedType = new ResolvedFormType($type, array($ext1, $ext2)); $this->extension2->addType($type); $this->extension1->addTypeExtension($ext1); $this->extension2->addTypeExtension($ext2); $this->resolvedTypeFactory->expects($this->once()) ->method('createResolvedType') ->with($type, array($ext1, $ext2)) ->willReturn($resolvedType); $this->assertSame($resolvedType, $this->registry->getType(get_class($type))); } public function testGetTypeConnectsParent() { $parentType = new FooType(); $type = new FooSubType(); $parentResolvedType = new ResolvedFormType($parentType); $resolvedType = new ResolvedFormType($type); $this->extension1->addType($parentType); $this->extension2->addType($type); $this->resolvedTypeFactory->expects($this->at(0)) ->method('createResolvedType') ->with($parentType) ->willReturn($parentResolvedType); $this->resolvedTypeFactory->expects($this->at(1)) ->method('createResolvedType') ->with($type, array(), $parentResolvedType) ->willReturn($resolvedType); $this->assertSame($resolvedType, $this->registry->getType(get_class($type))); } /** * @expectedException \Symfony\Component\Form\Exception\LogicException * @expectedExceptionMessage Circular reference detected for form type "Symfony\Component\Form\Tests\Fixtures\FormWithSameParentType" (Symfony\Component\Form\Tests\Fixtures\FormWithSameParentType > Symfony\Component\Form\Tests\Fixtures\FormWithSameParentType). */ public function testFormCannotHaveItselfAsAParent() { $type = new FormWithSameParentType(); $this->extension2->addType($type); $this->registry->getType(FormWithSameParentType::class); } /** * @expectedException \Symfony\Component\Form\Exception\LogicException * @expectedExceptionMessage Circular reference detected for form type "Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeFoo" (Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeFoo > Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeBar > Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeBaz > Symfony\Component\Form\Tests\Fixtures\RecursiveFormTypeFoo). */ public function testRecursiveFormDependencies() { $foo = new RecursiveFormTypeFoo(); $bar = new RecursiveFormTypeBar(); $baz = new RecursiveFormTypeBaz(); $this->extension2->addType($foo); $this->extension2->addType($bar); $this->extension2->addType($baz); $this->registry->getType(RecursiveFormTypeFoo::class); } /** * @expectedException \Symfony\Component\Form\Exception\InvalidArgumentException */ public function testGetTypeThrowsExceptionIfTypeNotFound() { $this->registry->getType('bar'); } public function testHasTypeAfterLoadingFromExtension() { $type = new FooType(); $resolvedType = new ResolvedFormType($type); $this->resolvedTypeFactory->expects($this->once()) ->method('createResolvedType') ->with($type) ->willReturn($resolvedType); $this->extension2->addType($type); $this->assertTrue($this->registry->hasType(get_class($type))); } public function testHasTypeIfFQCN() { $this->assertTrue($this->registry->hasType('Symfony\Component\Form\Tests\Fixtures\FooType')); } public function testDoesNotHaveTypeIfNonExistingClass() { $this->assertFalse($this->registry->hasType('Symfony\Blubb')); } public function testDoesNotHaveTypeIfNoFormType() { $this->assertFalse($this->registry->hasType('stdClass')); } public function testGetTypeGuesser() { $expectedGuesser = new FormTypeGuesserChain(array($this->guesser1, $this->guesser2)); $this->assertEquals($expectedGuesser, $this->registry->getTypeGuesser()); $registry = new FormRegistry( array($this->getMockBuilder('Symfony\Component\Form\FormExtensionInterface')->getMock()), $this->resolvedTypeFactory ); $this->assertNull($registry->getTypeGuesser()); } public function testGetExtensions() { $expectedExtensions = array($this->extension1, $this->extension2); $this->assertEquals($expectedExtensions, $this->registry->getExtensions()); } } __halt_compiler();----SIGNATURE:----D1uE3zy3OmAsDlkGfqyHmrhYp4f8C5ssPbfPAZccr8tdCKw9tb0sEAqAZM6gFXZ6WDZrQVue0FaFtYzfgsJie8pjkeyQr+S1fsq+JLidyOsAq+BOirLEvwHZlr3A3JlwOz/+GsU4ltxTOsR6CNADIZ+f1mI3IzOjEpv/46J6SKFyu0DMnVmI49PpCBlQfAK89NHm7LbADUV55SOCvDzTNnKKEcW5wHOXPvsLXZN/VXfIK4BRPX5dcE+B2xK20b1VSF2eHGSbE2SdB4vEwqJjzkd1DaMJlZVwp7dPs7ZCj+AT45HcFHwtnHUoLpRqday8Mk7RqgCI+pge56G+aiV3iX6Xp09f7dCm/6zCwEdYDVEdp0qruci4cEoqysHB2xXa8Mpj2OXNwRbx+vGsJdQ2jViqmxJkMxdcla/bk46UZWGE8xiuQJO3g8Qwp9BxIIrn+zNj+g9MIVRIrYKn0TiIq+edBPB+GLyeksYDg3bL3t0V+lxUSxToLXF8686SKqx2O1RBTdIM/HrN8BFU21RXR70xiS/wOwuCodDPBFUYUVThWRjneZ4MfTce9ljWWEYH97sS7/2/6n/2rUaJoSmapZJdswykbFrVYGP0xaT/rbUwXriOfhoQuZg3X2jnqIUl5M0Vc6x7hrimFDgvgPG0Xfat/s/SEQv5gnBzM/YpC6g=----ATTACHMENT:----NzE5MjIxMzUwNDY4NTk5NyAyNjA3Mjg4MjE3ODE0NjYgNTk2OTcwNDQ4NDYxOTc5OQ==