* * 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\Type; use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationRequestHandler; use Symfony\Component\Form\NativeRequestHandler; use Symfony\Component\Form\RequestHandlerInterface; use Symfony\Component\HttpFoundation\File\UploadedFile; class FileTypeTest extends BaseTypeTest { const TESTED_TYPE = 'Symfony\Component\Form\Extension\Core\Type\FileType'; // https://github.com/symfony/symfony/pull/5028 public function testSetData() { $form = $this->factory->createBuilder(static::TESTED_TYPE)->getForm(); $data = $this->getMockBuilder('Symfony\Component\HttpFoundation\File\File') ->setConstructorArgs(array(__DIR__.'/../../../Fixtures/foo', 'foo')) ->getMock(); $form->setData($data); // Ensures the data class is defined to accept File instance $this->assertSame($data, $form->getData()); } /** * @dataProvider requestHandlerProvider */ public function testSubmit(RequestHandlerInterface $requestHandler) { $form = $this->factory->createBuilder(static::TESTED_TYPE)->setRequestHandler($requestHandler)->getForm(); $data = $this->createUploadedFileMock($requestHandler, __DIR__.'/../../../Fixtures/foo', 'foo.jpg'); $form->submit($data); $this->assertSame($data, $form->getData()); } /** * @dataProvider requestHandlerProvider */ public function testSetDataMultiple(RequestHandlerInterface $requestHandler) { $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array( 'multiple' => true, ))->setRequestHandler($requestHandler)->getForm(); $data = array( $this->createUploadedFileMock($requestHandler, __DIR__.'/../../../Fixtures/foo', 'foo.jpg'), $this->createUploadedFileMock($requestHandler, __DIR__.'/../../../Fixtures/foo2', 'foo2.jpg'), ); $form->setData($data); $this->assertSame($data, $form->getData()); } /** * @dataProvider requestHandlerProvider */ public function testSubmitMultiple(RequestHandlerInterface $requestHandler) { $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array( 'multiple' => true, ))->setRequestHandler($requestHandler)->getForm(); $data = array( $this->createUploadedFileMock($requestHandler, __DIR__.'/../../../Fixtures/foo', 'foo.jpg'), $this->createUploadedFileMock($requestHandler, __DIR__.'/../../../Fixtures/foo2', 'foo2.jpg'), ); $form->submit($data); $this->assertSame($data, $form->getData()); $view = $form->createView(); $this->assertSame('file[]', $view->vars['full_name']); $this->assertArrayHasKey('multiple', $view->vars['attr']); } /** * @dataProvider requestHandlerProvider */ public function testDontPassValueToView(RequestHandlerInterface $requestHandler) { $form = $this->factory->createBuilder(static::TESTED_TYPE)->setRequestHandler($requestHandler)->getForm(); $form->submit(array( 'file' => $this->createUploadedFileMock($requestHandler, __DIR__.'/../../../Fixtures/foo', 'foo.jpg'), )); $this->assertEquals('', $form->createView()->vars['value']); } public function testPassMultipartFalseToView() { $view = $this->factory->create(static::TESTED_TYPE) ->createView(); $this->assertTrue($view->vars['multipart']); } public function testSubmitNull($expected = null, $norm = null, $view = null) { parent::testSubmitNull($expected, $norm, ''); } public function testSubmitNullWhenMultiple() { $form = $this->factory->create(static::TESTED_TYPE, null, array( 'multiple' => true, )); // submitted data when an input file is uploaded without choosing any file $form->submit(array(null)); $this->assertSame(array(), $form->getData()); $this->assertSame(array(), $form->getNormData()); $this->assertSame(array(), $form->getViewData()); } /** * @dataProvider requestHandlerProvider */ public function testSubmittedFilePathsAreDropped(RequestHandlerInterface $requestHandler) { $form = $this->factory->createBuilder(static::TESTED_TYPE)->setRequestHandler($requestHandler)->getForm(); $form->submit('file:///etc/passwd'); $this->assertNull($form->getData()); $this->assertNull($form->getNormData()); $this->assertSame('', $form->getViewData()); } /** * @dataProvider requestHandlerProvider */ public function testMultipleSubmittedFilePathsAreDropped(RequestHandlerInterface $requestHandler) { $form = $this->factory ->createBuilder(static::TESTED_TYPE, null, array( 'multiple' => true, )) ->setRequestHandler($requestHandler) ->getForm(); $form->submit(array( 'file:///etc/passwd', $this->createUploadedFileMock(new HttpFoundationRequestHandler(), __DIR__.'/../../../Fixtures/foo', 'foo.jpg'), $this->createUploadedFileMock(new NativeRequestHandler(), __DIR__.'/../../../Fixtures/foo2', 'foo2.jpg'), )); $this->assertCount(1, $form->getData()); } /** * @dataProvider requestHandlerProvider */ public function testSubmitNonArrayValueWhenMultiple(RequestHandlerInterface $requestHandler) { $form = $this->factory ->createBuilder(static::TESTED_TYPE, null, array( 'multiple' => true, )) ->setRequestHandler($requestHandler) ->getForm(); $form->submit(null); $this->assertSame(array(), $form->getData()); $this->assertSame(array(), $form->getNormData()); $this->assertSame(array(), $form->getViewData()); } public function requestHandlerProvider() { return array( array(new HttpFoundationRequestHandler()), array(new NativeRequestHandler()), ); } private function createUploadedFileMock(RequestHandlerInterface $requestHandler, $path, $originalName) { if ($requestHandler instanceof HttpFoundationRequestHandler) { return new UploadedFile($path, $originalName, null, 10, null, true); } return array( 'name' => $originalName, 'error' => 0, 'type' => 'text/plain', 'tmp_name' => $path, 'size' => 10, ); } } __halt_compiler();----SIGNATURE:----YfJG2Do/JVnPSqH0olwLBosoJifNfbQieMQdI2xnOtk4RinkJAFsHDKPhwXlPp7JheRTwiabLQekCBs4bc48moaEiWyPq5VyPZKNhea4UJvjOhEM6gtc6UNNHtx0P36QNvOFYObwcYuwhhnwtoveKZ/v5TnmRPLVSrK1Tm0MrqAOSyTP0LP9iO4e47Q+r9f8Rb/THxWByp14NIUfNArrPHZMwNbMVZYZMCkPWEFSeMOb/5JfBY0c0mP7sv9/HbCelcjYtmU92kJqwBelWFbkasldAPvaLanaA8sxZLOCwQ7kjKCqU33PDq2MR3pmgciYPGsVG9XovzDVc0r3GOFZkupWWH+munMalbIsm6LGrZYU0JZ8l1owXooB3x6sjcpTg0lQGwDZMTQQacHPIVuvZeVcXaT7DNUOPM4qdNRdLT3/Z/7xhJSMdw0Yp6gIhpPCeK9JPxzOEt+EOrulg4rMe/tknqDCHv0sFmCKeJpTFsitQ32cRlicdETPoBz7tJIES4AdhdyYUDUTDYB278jTXSa1Fr1vsKQs1yt6QO6Ue2oknHycNF5NXpy2Ya5ZukIeJpyp7IDVGOGTc5vXQmkBvYdiv/7sJl5SRplTAhLc0bh9FfP5zM6lIyy3AD4DYDAEzZmvEhEZKCUeA53ke9ipdkzY6vP2xVSJ7RZAMJkztTs=----ATTACHMENT:----NTg4MzUyMjA4ODg0NzkzMyAxNDkzNzAxMTc3ODY4MDQ2IDI4NjAwOTczMTMzMTkzMDE=