/vendor/symfony/form/Symfony/Component/Form/Tests/Extension/Core/DataMapper/PropertyPathMapperTest.php
https://bitbucket.org/hanutimes/hanutimes · PHP · 319 lines · 219 code · 68 blank · 32 comment · 2 complexity · 42611d8a90f43a472498fa7241f8438a MD5 · raw file
- <?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 Symfony\Component\Form\Tests\Extension\Core\DataMapper;
- use Symfony\Component\Form\FormConfigBuilder;
- use Symfony\Component\Form\FormConfigInterface;
- use Symfony\Component\Form\Extension\Core\DataMapper\PropertyPathMapper;
- class PropertyPathMapperTest extends \PHPUnit_Framework_TestCase
- {
- /**
- * @var PropertyPathMapper
- */
- private $mapper;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- private $dispatcher;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- private $propertyAccessor;
- protected function setUp()
- {
- if (!class_exists('Symfony\Component\EventDispatcher\Event')) {
- $this->markTestSkipped('The "EventDispatcher" component is not available');
- }
- if (!class_exists('Symfony\Component\PropertyAccess\PropertyAccess')) {
- $this->markTestSkipped('The "PropertyAccess" component is not available');
- }
- $this->dispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
- $this->propertyAccessor = $this->getMock('Symfony\Component\PropertyAccess\PropertyAccessorInterface');
- $this->mapper = new PropertyPathMapper($this->propertyAccessor);
- }
- /**
- * @param $path
- * @return \PHPUnit_Framework_MockObject_MockObject
- */
- private function getPropertyPath($path)
- {
- return $this->getMockBuilder('Symfony\Component\PropertyAccess\PropertyPath')
- ->setConstructorArgs(array($path))
- ->setMethods(array('getValue', 'setValue'))
- ->getMock();
- }
- /**
- * @param FormConfigInterface $config
- * @param Boolean $synchronized
- * @return \PHPUnit_Framework_MockObject_MockObject
- */
- private function getForm(FormConfigInterface $config, $synchronized = true)
- {
- $form = $this->getMockBuilder('Symfony\Component\Form\Form')
- ->setConstructorArgs(array($config))
- ->setMethods(array('isSynchronized'))
- ->getMock();
- $form->expects($this->any())
- ->method('isSynchronized')
- ->will($this->returnValue($synchronized));
- return $form;
- }
- /**
- * @return \PHPUnit_Framework_MockObject_MockObject
- */
- private function getDataMapper()
- {
- return $this->getMock('Symfony\Component\Form\DataMapperInterface');
- }
- public function testMapDataToFormsPassesObjectRefIfByReference()
- {
- $car = new \stdClass();
- $engine = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->once())
- ->method('getValue')
- ->with($car, $propertyPath)
- ->will($this->returnValue($engine));
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $config->setPropertyPath($propertyPath);
- $form = $this->getForm($config);
- $this->mapper->mapDataToForms($car, array($form));
- // Can't use isIdentical() above because mocks always clone their
- // arguments which can't be disabled in PHPUnit 3.6
- $this->assertSame($engine, $form->getData());
- }
- public function testMapDataToFormsPassesObjectCloneIfNotByReference()
- {
- $car = new \stdClass();
- $engine = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->once())
- ->method('getValue')
- ->with($car, $propertyPath)
- ->will($this->returnValue($engine));
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(false);
- $config->setPropertyPath($propertyPath);
- $form = $this->getForm($config);
- $this->mapper->mapDataToForms($car, array($form));
- $this->assertNotSame($engine, $form->getData());
- $this->assertEquals($engine, $form->getData());
- }
- public function testMapDataToFormsIgnoresEmptyPropertyPath()
- {
- $car = new \stdClass();
- $config = new FormConfigBuilder(null, '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $form = $this->getForm($config);
- $this->assertNull($form->getPropertyPath());
- $this->mapper->mapDataToForms($car, array($form));
- $this->assertNull($form->getData());
- }
- public function testMapDataToFormsIgnoresUnmapped()
- {
- $car = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->never())
- ->method('getValue');
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $config->setMapped(false);
- $config->setPropertyPath($propertyPath);
- $form = $this->getForm($config);
- $this->mapper->mapDataToForms($car, array($form));
- $this->assertNull($form->getData());
- }
- public function testMapDataToFormsIgnoresEmptyData()
- {
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->never())
- ->method('getValue');
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $config->setPropertyPath($propertyPath);
- $form = $this->getForm($config);
- $this->mapper->mapDataToForms(null, array($form));
- $this->assertNull($form->getData());
- }
- public function testMapFormsToDataWritesBackIfNotByReference()
- {
- $car = new \stdClass();
- $engine = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->once())
- ->method('setValue')
- ->with($car, $propertyPath, $engine);
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(false);
- $config->setPropertyPath($propertyPath);
- $config->setData($engine);
- $form = $this->getForm($config);
- $this->mapper->mapFormsToData(array($form), $car);
- }
- public function testMapFormsToDataWritesBackIfByReferenceButNoReference()
- {
- $car = new \stdClass();
- $engine = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->once())
- ->method('setValue')
- ->with($car, $propertyPath, $engine);
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $config->setPropertyPath($propertyPath);
- $config->setData($engine);
- $form = $this->getForm($config);
- $this->mapper->mapFormsToData(array($form), $car);
- }
- public function testMapFormsToDataWritesBackIfByReferenceAndReference()
- {
- $car = new \stdClass();
- $engine = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- // $car already contains the reference of $engine
- $this->propertyAccessor->expects($this->once())
- ->method('getValue')
- ->with($car, $propertyPath)
- ->will($this->returnValue($engine));
- $this->propertyAccessor->expects($this->never())
- ->method('setValue');
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $config->setPropertyPath($propertyPath);
- $config->setData($engine);
- $form = $this->getForm($config);
- $this->mapper->mapFormsToData(array($form), $car);
- }
- public function testMapFormsToDataIgnoresUnmapped()
- {
- $car = new \stdClass();
- $engine = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->never())
- ->method('setValue');
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $config->setPropertyPath($propertyPath);
- $config->setData($engine);
- $config->setMapped(false);
- $form = $this->getForm($config);
- $this->mapper->mapFormsToData(array($form), $car);
- }
- public function testMapFormsToDataIgnoresEmptyData()
- {
- $car = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->never())
- ->method('setValue');
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $config->setPropertyPath($propertyPath);
- $config->setData(null);
- $form = $this->getForm($config);
- $this->mapper->mapFormsToData(array($form), $car);
- }
- public function testMapFormsToDataIgnoresUnsynchronized()
- {
- $car = new \stdClass();
- $engine = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->never())
- ->method('setValue');
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $config->setPropertyPath($propertyPath);
- $config->setData($engine);
- $form = $this->getForm($config, false);
- $this->mapper->mapFormsToData(array($form), $car);
- }
- public function testMapFormsToDataIgnoresDisabled()
- {
- $car = new \stdClass();
- $engine = new \stdClass();
- $propertyPath = $this->getPropertyPath('engine');
- $this->propertyAccessor->expects($this->never())
- ->method('setValue');
- $config = new FormConfigBuilder('name', '\stdClass', $this->dispatcher);
- $config->setByReference(true);
- $config->setPropertyPath($propertyPath);
- $config->setData($engine);
- $config->setDisabled(true);
- $form = $this->getForm($config);
- $this->mapper->mapFormsToData(array($form), $car);
- }
- }