Skip to content

Commit d30a6d8

Browse files
authored
Fix renderer tests (phiamo#1228)
Fix renderer tests and make sure Symfony 4 working properly.
1 parent df0e426 commit d30a6d8

File tree

3 files changed

+55
-27
lines changed

3 files changed

+55
-27
lines changed

.travis.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,22 @@ language: php
33
sudo: false
44

55
php:
6-
- 5.6
76
- 7.0
87
- 7.1
98

109
env:
11-
- SYMFONY_VERSION=~2.7.0
1210
- SYMFONY_VERSION=~2.8.0
1311
- SYMFONY_VERSION=~3.0
12+
- SYMFONY_VERSION=~4.0
1413
- DEPENDENCIES=beta
1514

1615
matrix:
1716
fast_finish: true
1817
exclude:
1918
- php: 5.6
2019
env: DEPENDENCIES=beta
20+
- php: 7.0
21+
env: SYMFONY_VERSION=~4.0
2122
- php: 7.0
2223
env: DEPENDENCIES=beta
2324

Tests/Form/AbstractDivLayoutTest.php

+50-23
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,21 @@
1616
use Mopa\Bundle\BootstrapBundle\Twig\IconExtension;
1717
use Symfony\Bridge\Twig\Extension\FormExtension;
1818
use Symfony\Bridge\Twig\Extension\TranslationExtension;
19+
use Symfony\Component\Form\FormRenderer;
1920
use Symfony\Bridge\Twig\Form\TwigRenderer;
2021
use Symfony\Bridge\Twig\Form\TwigRendererEngine;
2122
use Symfony\Bridge\Twig\Tests\Extension\Fixtures\StubTranslator;
2223
use Symfony\Component\Form\Forms;
2324
use Symfony\Component\Form\FormView;
2425
use Symfony\Component\Form\PreloadedExtension;
2526
use Symfony\Component\Form\Test\FormIntegrationTestCase;
27+
use Symfony\Component\HttpKernel\Kernel as SymfonyKernel;
2628

2729
abstract class AbstractDivLayoutTest extends FormIntegrationTestCase
2830
{
2931
protected $renderer;
32+
protected $rendererEngine;
33+
protected $environment;
3034
protected $tabFactory;
3135
protected $formTypeMap = array(
3236
'form' => 'Symfony\Component\Form\Extension\Core\Type\FormType',
@@ -46,7 +50,8 @@ protected function setUp()
4650

4751
parent::setUp();
4852

49-
$reflection = new \ReflectionClass('Symfony\Bridge\Twig\Form\TwigRenderer');
53+
$reflectionClass = class_exists('Symfony\Bridge\Twig\Form\TwigRenderer') ? 'Symfony\Bridge\Twig\Form\TwigRenderer' : 'Symfony\Bridge\Twig\Form\TwigRendererEngine';
54+
$reflection = new \ReflectionClass($reflectionClass);
5055
$bridgeDirectory = dirname($reflection->getFileName()).'/../Resources/views/Form';
5156

5257
$loader = new \Twig_Loader_Filesystem(array(
@@ -56,41 +61,63 @@ protected function setUp()
5661

5762
$loader->addPath(__DIR__.'/../../Resources/views', 'MopaBootstrap');
5863

59-
$environment = new \Twig_Environment($loader, array('strict_variables' => true));
60-
$environment->addExtension(new TranslationExtension(new StubTranslator()));
61-
$environment->addExtension(new IconExtension('fontawesome'));
62-
$environment->addExtension(new TwigFormExtension());
63-
$environment->addGlobal('global', '');
64+
$this->environment = new \Twig_Environment($loader, array('strict_variables' => true));
65+
$this->environment->addExtension(new TranslationExtension(new StubTranslator()));
66+
$this->environment->addExtension(new IconExtension('fontawesome'));
67+
$this->environment->addExtension(new TwigFormExtension());
68+
$this->environment->addGlobal('global', '');
6469

65-
$rendererEngine = new TwigRendererEngine(array(
70+
$this->rendererEngine = new TwigRendererEngine(array(
6671
'form_div_layout.html.twig',
6772
'fields.html.twig',
68-
), $environment);
73+
), $this->environment);
6974

70-
if (interface_exists('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface')) {
71-
$csrfProviderInterface = 'Symfony\Component\Security\Csrf\CsrfTokenManagerInterface';
75+
if (version_compare(SymfonyKernel::VERSION, '3.0.0', '<')) {
76+
$this->setUpVersion2();
7277
} else {
73-
$csrfProviderInterface = 'Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface';
78+
$this->setUpVersion3Plus();
7479
}
75-
76-
$csrfProvider = $this->getMockBuilder($csrfProviderInterface)->getMock();
77-
$this->renderer = new TwigRenderer($rendererEngine, $csrfProvider);
78-
$environment->addExtension($extension = new FormExtension($this->renderer));
79-
$extension->initRuntime($environment);
80-
$this->registerTwigRuntimeLoader($environment, $this->renderer);
8180
}
8281

83-
protected function registerTwigRuntimeLoader(\Twig_Environment $environment, TwigRenderer $renderer)
82+
private function setUpVersion2()
8483
{
85-
if (!method_exists($environment, 'addRuntimeLoader')) {
86-
return;
87-
}
84+
$csrfProvider = $this->getMockBuilder('Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface')->getMock();
85+
$this->renderer = new TwigRenderer($this->rendererEngine, $csrfProvider);
86+
$this->environment->addExtension($extension = new FormExtension($this->renderer));
87+
$extension->initRuntime($this->environment);
8888

89+
// Add runtime loader
8990
$loader = $this->getMockBuilder('Twig_RuntimeLoaderInterface')->getMock();
9091
$loader->expects($this->any())->method('load')->will($this->returnValueMap(array(
91-
array('Symfony\Bridge\Twig\Form\TwigRenderer', $renderer),
92+
array('Symfony\Bridge\Twig\Form\TwigRenderer', $this->renderer),
9293
)));
93-
$environment->addRuntimeLoader($loader);
94+
$this->environment->addRuntimeLoader($loader);
95+
}
96+
97+
private function setUpVersion3Plus()
98+
{
99+
$csrfProvider = $this->getMockBuilder('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface')->getMock();
100+
$loaders = array(
101+
'Symfony\Component\Form\FormRenderer' => function() use ($csrfProvider) {
102+
return new FormRenderer($this->rendererEngine, $csrfProvider);
103+
},
104+
);
105+
106+
$runtime = 'Symfony\Component\Form\FormRenderer';
107+
108+
if (class_exists('Symfony\Bridge\Twig\Form\TwigRenderer')) {
109+
$loaders['Symfony\Bridge\Twig\Form\TwigRenderer'] = function() use ($csrfProvider) {
110+
return new TwigRenderer($this->rendererEngine, $csrfProvider);
111+
};
112+
113+
$runtime = 'Symfony\Bridge\Twig\Form\TwigRenderer';
114+
}
115+
116+
// Add runtime loader
117+
$this->environment->addRuntimeLoader(new \Twig_FactoryRuntimeLoader($loaders));
118+
$this->renderer = $this->environment->getRuntime($runtime);
119+
120+
$this->environment->addExtension(new FormExtension());
94121
}
95122

96123
/**

composer.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@
2929
"mopa/composer-bridge": "~1.3"
3030
},
3131
"require-dev": {
32-
"phpunit/phpunit": "~4.6",
32+
"phpunit/phpunit": "~6.0",
3333
"symfony/security-bundle": "~2.3|~3.0|^4.0",
3434
"symfony/translation": "~2.3|~3.0|^4.0"
3535
},
3636
"conflict": {
37-
"symfony/twig-bridge": "<2.3|^4.0"
37+
"symfony/twig-bridge": "<2.3"
3838
},
3939
"suggest": {
4040
"twbs/bootstrap": ">2.0,<4.0-dev",

0 commit comments

Comments
 (0)