* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Tests\Component\Form; use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\Guess\Guess; use Symfony\Component\Form\Guess\ValueGuess; use Symfony\Component\Form\Guess\TypeGuess; class FormBuilderTest extends \PHPUnit_Framework_TestCase { private $dispatcher; private $factory; private $builder; public function setUp() { $this->dispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface'); $this->factory = $this->getMock('Symfony\Component\Form\FormFactoryInterface'); $this->builder = new FormBuilder('name', $this->factory, $this->dispatcher); } /** * Changing the name is not allowed, otherwise the name and property path * are not synchronized anymore * * @see FieldType::buildForm */ public function testNoSetName() { $this->assertFalse(method_exists($this->builder, 'setName')); } public function testAddNameNoString() { $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException'); $this->builder->add(1234); } public function testAddTypeNoString() { $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException'); $this->builder->add('foo', 1234); } public function testAddWithGuessFluent() { $this->builder = new FormBuilder('name', $this->factory, $this->dispatcher, 'stdClass'); $builder = $this->builder->add('foo'); $this->assertSame($builder, $this->builder); } public function testAddIsFluent() { $builder = $this->builder->add('foo', 'text', array('bar' => 'baz')); $this->assertSame($builder, $this->builder); } public function testAdd() { $this->assertFalse($this->builder->has('foo')); $this->builder->add('foo', 'text'); $this->assertTrue($this->builder->has('foo')); } public function testAddFormType() { $this->assertFalse($this->builder->has('foo')); $this->builder->add('foo', $this->getMock('Symfony\Component\Form\FormTypeInterface')); $this->assertTrue($this->builder->has('foo')); } public function testRemove() { $this->builder->add('foo', 'text'); $this->builder->remove('foo'); $this->assertFalse($this->builder->has('foo')); } public function testRemoveUnknown() { $this->builder->remove('foo'); $this->assertFalse($this->builder->has('foo')); } public function testCreateNoTypeNoDataClass() { $this->factory->expects($this->once()) ->method('createNamedBuilder') ->with('text', 'foo', null, array()) ; $builder = $this->builder->create('foo'); } public function testGetUnknown() { $this->setExpectedException('Symfony\Component\Form\Exception\FormException', 'The field "foo" does not exist'); $this->builder->get('foo'); } public function testGetTyped() { $expectedType = 'text'; $expectedName = 'foo'; $expectedOptions = array('bar' => 'baz'); $this->factory->expects($this->once()) ->method('createNamedBuilder') ->with($expectedType, $expectedName, null, $expectedOptions) ->will($this->returnValue($this->getFormBuilder())); $this->builder->add($expectedName, $expectedType, $expectedOptions); $builder = $this->builder->get($expectedName); $this->assertNotSame($builder, $this->builder); } public function testGetGuessed() { $expectedName = 'foo'; $expectedOptions = array('bar' => 'baz'); $this->factory->expects($this->once()) ->method('createBuilderForProperty') ->with('stdClass', $expectedName, null, $expectedOptions) ->will($this->returnValue($this->getFormBuilder())); $this->builder = new FormBuilder('name', $this->factory, $this->dispatcher, 'stdClass'); $this->builder->add($expectedName, null, $expectedOptions); $builder = $this->builder->get($expectedName); $this->assertNotSame($builder, $this->builder); } private function getFormBuilder() { return $this->getMockBuilder('Symfony\Component\Form\FormBuilder') ->disableOriginalConstructor() ->getMock(); } }