bug #32129 [DebugBundle] fix register ReflectionCaster::unsetClosureFileInfo caster in var cloner service (alekitto)

This PR was merged into the 4.3 branch.

Discussion
----------

[DebugBundle] fix register ReflectionCaster::unsetClosureFileInfo caster in var cloner service

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| License       | MIT

Non-existent class was checked by `method_exists` in Debug bundle.
This should fix (and correctly register) the caster while loading `DebugExtension` from `DebugBundle`

Commits
-------

860164ee7e [DebugBundle] fix register ReflectionCaster::unsetClosureFileInfo caster in var cloner service
This commit is contained in:
Nicolas Grekas 2019-06-23 16:55:14 +02:00
commit 6d02c89c21
2 changed files with 37 additions and 2 deletions

View File

@ -17,6 +17,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\VarDumper\Caster\ReflectionCaster;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
@ -43,9 +44,9 @@ class DebugExtension extends Extension
->addMethodCall('setMinDepth', [$config['min_depth']])
->addMethodCall('setMaxString', [$config['max_string_length']]);
if (method_exists(ReflectionClass::class, 'unsetClosureFileInfo')) {
if (method_exists(ReflectionCaster::class, 'unsetClosureFileInfo')) {
$container->getDefinition('var_dumper.cloner')
->addMethodCall('addCasters', ReflectionClass::UNSET_CLOSURE_FILE_INFO);
->addMethodCall('addCasters', [ReflectionCaster::UNSET_CLOSURE_FILE_INFO]);
}
if (method_exists(HtmlDumper::class, 'setTheme') && 'dark' !== $config['theme']) {

View File

@ -15,6 +15,7 @@ use PHPUnit\Framework\TestCase;
use Symfony\Bundle\DebugBundle\DependencyInjection\DebugExtension;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
use Symfony\Component\VarDumper\Caster\ReflectionCaster;
class DebugExtensionTest extends TestCase
{
@ -36,6 +37,39 @@ class DebugExtensionTest extends TestCase
$this->assertSame($expectedTags, $container->getDefinition('data_collector.dump')->getTag('data_collector'));
}
public function testUnsetClosureFileInfoShouldBeRegisteredInVarCloner()
{
if (!method_exists(ReflectionCaster::class, 'unsetClosureFileInfo')) {
$this->markTestSkipped('Method not available');
}
$container = $this->createContainer();
$container->registerExtension(new DebugExtension());
$container->loadFromExtension('debug', []);
$this->compileContainer($container);
$definition = $container->getDefinition('var_dumper.cloner');
$called = false;
foreach ($definition->getMethodCalls() as $call) {
if ('addCasters' !== $call[0]) {
continue;
}
$argument = $call[1][0] ?? null;
if (null === $argument) {
continue;
}
if (['Closure' => ReflectionCaster::class.'::unsetClosureFileInfo'] === $argument) {
$called = true;
break;
}
}
$this->assertTrue($called);
}
private function createContainer()
{
$container = new ContainerBuilder(new ParameterBag([