Skip to content

Commit

Permalink
bug #24535 [TwigBridge] fix BC for FormExtension if renderer is FormR…
Browse files Browse the repository at this point in the history
…enderer (dmaicher)

This PR was squashed before being merged into the 3.4 branch (closes #24535).

Discussion
----------

[TwigBridge] fix BC for FormExtension if renderer is FormRenderer

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #24533
| License       | MIT
| Doc PR        | -

This fixes some issues within FormExtension since the renderer is now a `FormRenderer`.

Commits
-------

4a2f608 [TwigBridge] fix BC for FormExtension if renderer is FormRenderer
  • Loading branch information
fabpot committed Oct 13, 2017
2 parents f53229c + 4a2f608 commit ac6d605
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/Symfony/Bridge/Twig/Extension/FormExtension.php
Expand Up @@ -54,7 +54,7 @@ public function initRuntime(Environment $environment)
{
if ($this->renderer instanceof TwigRendererInterface) {
$this->renderer->setEnvironment($environment);
} elseif (null !== $this->renderer) {
} elseif (is_array($this->renderer)) {
$this->renderer[2] = $environment;
}
}
Expand Down Expand Up @@ -118,7 +118,7 @@ public function __get($name)

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;
Expand Down
76 changes: 76 additions & 0 deletions src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTest.php
@@ -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);
}
}
1 change: 1 addition & 0 deletions src/Symfony/Bridge/Twig/composer.json
Expand Up @@ -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",
Expand Down

0 comments on commit ac6d605

Please sign in to comment.