[TwigBridge] fix BC for FormExtension if renderer is FormRenderer

This commit is contained in:
David Maicher 2017-10-12 14:26:49 +02:00 committed by Fabien Potencier
parent 0f5e38c732
commit 4a2f608f1e
3 changed files with 79 additions and 2 deletions

View File

@ -54,7 +54,7 @@ class FormExtension extends AbstractExtension implements InitRuntimeInterface
{
if ($this->renderer instanceof TwigRendererInterface) {
$this->renderer->setEnvironment($environment);
} elseif (null !== $this->renderer) {
} elseif (is_array($this->renderer)) {
$this->renderer[2] = $environment;
}
}
@ -118,7 +118,7 @@ class FormExtension extends AbstractExtension implements InitRuntimeInterface
if (is_array($this->renderer)) {
$renderer = $this->renderer[0]->get($this->renderer[1]);
if (isset($this->renderer[2])) {
if (isset($this->renderer[2]) && $renderer instanceof TwigRendererInterface) {
$renderer->setEnvironment($this->renderer[2]);
}
$this->renderer = $renderer;

View File

@ -0,0 +1,76 @@
<?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\Bridge\Twig\Tests\Extension;
use PHPUnit\Framework\TestCase;
use Symfony\Bridge\Twig\Extension\FormExtension;
use Symfony\Bridge\Twig\Form\TwigRendererInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\FormRendererInterface;
use Twig\Environment;
/**
* @group legacy
*/
class FormExtensionTest extends TestCase
{
/**
* @dataProvider rendererDataProvider
*/
public function testInitRuntimeAndAccessRenderer($rendererConstructor, $expectedAccessedRenderer)
{
$extension = new FormExtension($rendererConstructor);
$extension->initRuntime($this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock());
$this->assertSame($expectedAccessedRenderer, $extension->renderer);
}
/**
* @dataProvider rendererDataProvider
*/
public function testAccessRendererAndInitRuntime($rendererConstructor, $expectedAccessedRenderer)
{
$extension = new FormExtension($rendererConstructor);
$this->assertSame($expectedAccessedRenderer, $extension->renderer);
$extension->initRuntime($this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock());
}
public function rendererDataProvider()
{
$twigRenderer = $this->getMockBuilder(TwigRendererInterface::class)->getMock();
$twigRenderer->expects($this->once())
->method('setEnvironment');
yield array($twigRenderer, $twigRenderer);
$twigRenderer = $this->getMockBuilder(TwigRendererInterface::class)->getMock();
$twigRenderer->expects($this->once())
->method('setEnvironment');
$container = $this->getMockBuilder(ContainerInterface::class)->getMock();
$container->expects($this->once())
->method('get')
->with('service_id')
->willReturn($twigRenderer);
yield array(array($container, 'service_id'), $twigRenderer);
$formRenderer = $this->getMockBuilder(FormRendererInterface::class)->getMock();
$container = $this->getMockBuilder(ContainerInterface::class)->getMock();
$container->expects($this->once())
->method('get')
->with('service_id')
->willReturn($formRenderer);
yield array(array($container, 'service_id'), $formRenderer);
}
}

View File

@ -22,6 +22,7 @@
"require-dev": {
"fig/link-util": "^1.0",
"symfony/asset": "~2.8|~3.0|~4.0",
"symfony/dependency-injection": "~2.8|~3.0|~4.0",
"symfony/finder": "~2.8|~3.0|~4.0",
"symfony/form": "~3.4|~4.0",
"symfony/http-foundation": "^3.3.11|~4.0",