Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/Form/Tests/FormRegistryTest.php
Строк: 289
<?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 SymfonyComponentFormTests;

use 
SymfonyComponentFormFormRegistry;
use 
SymfonyComponentFormFormTypeGuesserChain;
use 
SymfonyComponentFormTestsFixturesTestExtension;
use 
SymfonyComponentFormTestsFixturesFooSubTypeWithParentInstance;
use 
SymfonyComponentFormTestsFixturesFooSubType;
use 
SymfonyComponentFormTestsFixturesFooTypeBazExtension;
use 
SymfonyComponentFormTestsFixturesFooTypeBarExtension;
use 
SymfonyComponentFormTestsFixturesFooType;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
class FormRegistryTest extends PHPUnit_Framework_TestCase
{
    
/**
     * @var FormRegistry
     */
    
private $registry;

    
/**
     * @var PHPUnit_Framework_MockObject_MockObject
     */
    
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->getMock('SymfonyComponentFormResolvedFormTypeFactory');
        
$this->guesser1 $this->getMock('SymfonyComponentFormFormTypeGuesserInterface');
        
$this->guesser2 $this->getMock('SymfonyComponentFormFormTypeGuesserInterface');
        
$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 $this->getMock('SymfonyComponentFormResolvedFormTypeInterface');

        
$this->extension2->addType($type);

        
$this->resolvedTypeFactory->expects($this->once())
            ->
method('createResolvedType')
            ->
with($type)
            ->
will($this->returnValue($resolvedType));

        
$resolvedType->expects($this->any())
            ->
method('getName')
            ->
will($this->returnValue('foo'));

        
$resolvedType $this->registry->getType('foo');

        
$this->assertSame($resolvedType$this->registry->getType('foo'));
    }

    public function 
testGetTypeWithTypeExtensions()
    {
        
$type = new FooType();
        
$ext1 = new FooTypeBarExtension();
        
$ext2 = new FooTypeBazExtension();
        
$resolvedType $this->getMock('SymfonyComponentFormResolvedFormTypeInterface');

        
$this->extension2->addType($type);
        
$this->extension1->addTypeExtension($ext1);
        
$this->extension2->addTypeExtension($ext2);

        
$this->resolvedTypeFactory->expects($this->once())
            ->
method('createResolvedType')
            ->
with($type, array($ext1$ext2))
            ->
will($this->returnValue($resolvedType));

        
$resolvedType->expects($this->any())
            ->
method('getName')
            ->
will($this->returnValue('foo'));

        
$this->assertSame($resolvedType$this->registry->getType('foo'));
    }

    public function 
testGetTypeConnectsParent()
    {
        
$parentType = new FooType();
        
$type = new FooSubType();
        
$parentResolvedType $this->getMock('SymfonyComponentFormResolvedFormTypeInterface');
        
$resolvedType $this->getMock('SymfonyComponentFormResolvedFormTypeInterface');

        
$this->extension1->addType($parentType);
        
$this->extension2->addType($type);

        
$this->resolvedTypeFactory->expects($this->at(0))
            ->
method('createResolvedType')
            ->
with($parentType)
            ->
will($this->returnValue($parentResolvedType));

        
$this->resolvedTypeFactory->expects($this->at(1))
            ->
method('createResolvedType')
            ->
with($type, array(), $parentResolvedType)
            ->
will($this->returnValue($resolvedType));

        
$parentResolvedType->expects($this->any())
            ->
method('getName')
            ->
will($this->returnValue('foo'));

        
$resolvedType->expects($this->any())
            ->
method('getName')
            ->
will($this->returnValue('foo_sub_type'));

        
$this->assertSame($resolvedType$this->registry->getType('foo_sub_type'));
    }

    public function 
testGetTypeConnectsParentIfGetParentReturnsInstance()
    {
        
$type = new FooSubTypeWithParentInstance();
        
$parentResolvedType $this->getMock('SymfonyComponentFormResolvedFormTypeInterface');
        
$resolvedType $this->getMock('SymfonyComponentFormResolvedFormTypeInterface');

        
$this->extension1->addType($type);

        
$this->resolvedTypeFactory->expects($this->at(0))
            ->
method('createResolvedType')
            ->
with($this->isInstanceOf('SymfonyComponentFormTestsFixturesFooType'))
            ->
will($this->returnValue($parentResolvedType));

        
$this->resolvedTypeFactory->expects($this->at(1))
            ->
method('createResolvedType')
            ->
with($type, array(), $parentResolvedType)
            ->
will($this->returnValue($resolvedType));

        
$parentResolvedType->expects($this->any())
            ->
method('getName')
            ->
will($this->returnValue('foo'));

        
$resolvedType->expects($this->any())
            ->
method('getName')
            ->
will($this->returnValue('foo_sub_type_parent_instance'));

        
$this->assertSame($resolvedType$this->registry->getType('foo_sub_type_parent_instance'));
    }

    
/**
     * @expectedException SymfonyComponentFormExceptionUnexpectedTypeException
     */
    
public function testGetTypeThrowsExceptionIfParentNotFound()
    {
        
$type = new FooSubType();

        
$this->extension1->addType($type);

        
$this->registry->getType($type);
    }

    
/**
     * @expectedException SymfonyComponentFormExceptionInvalidArgumentException
     */
    
public function testGetTypeThrowsExceptionIfTypeNotFound()
    {
        
$this->registry->getType('bar');
    }

    
/**
     * @expectedException SymfonyComponentFormExceptionUnexpectedTypeException
     */
    
public function testGetTypeThrowsExceptionIfNoString()
    {
        
$this->registry->getType(array());
    }

    public function 
testHasTypeAfterLoadingFromExtension()
    {
        
$type = new FooType();
        
$resolvedType $this->getMock('SymfonyComponentFormResolvedFormTypeInterface');

        
$this->resolvedTypeFactory->expects($this->once())
            ->
method('createResolvedType')
            ->
with($type)
            ->
will($this->returnValue($resolvedType));

        
$resolvedType->expects($this->any())
            ->
method('getName')
            ->
will($this->returnValue('foo'));

        
$this->assertFalse($this->registry->hasType('foo'));

        
$this->extension2->addType($type);

        
$this->assertTrue($this->registry->hasType('foo'));
    }

    public function 
testGetTypeGuesser()
    {
        
$expectedGuesser = new FormTypeGuesserChain(array($this->guesser1$this->guesser2));

        
$this->assertEquals($expectedGuesser$this->registry->getTypeGuesser());

        
$registry = new FormRegistry(
            array(
$this->getMock('SymfonyComponentFormFormExtensionInterface')),
            
$this->resolvedTypeFactory);

        
$this->assertNull($registry->getTypeGuesser());
    }

    public function 
testGetExtensions()
    {
        
$expectedExtensions = array($this->extension1$this->extension2);

        
$this->assertEquals($expectedExtensions$this->registry->getExtensions());
    }
}
Онлайн: 0
Реклама