Ensure that inlined services with parameterized class name can be dumped

This commit is contained in:
Samuel ROZE 2017-12-06 12:34:05 +00:00
parent 730b156f35
commit 28f00866b1
No known key found for this signature in database
GPG Key ID: 835426F55A19FB84

View File

@ -23,6 +23,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\ContainerInterface as SymfonyContainerInterface;
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
use Symfony\Component\DependencyInjection\EnvVarProcessorInterface;
use Symfony\Component\DependencyInjection\Parameter;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator;
@ -822,6 +823,31 @@ class PhpDumperTest extends TestCase
$this->assertInstanceOf('stdClass', $container->get('foo'));
}
public function testDumpHandlesObjectClassNames()
{
$container = new ContainerBuilder(new ParameterBag(array(
'class' => 'stdClass',
)));
$container->setDefinition('foo', new Definition(new Parameter('class')));
$container->setDefinition('bar', new Definition('stdClass', array(
new Reference('foo'),
)))->setPublic(true);
$container->setParameter('inline_requires', true);
$container->compile();
$dumper = new PhpDumper($container);
eval('?>'.$dumper->dump(array(
'class' => 'Symfony_DI_PhpDumper_Test_Object_Class_Name',
'inline_class_loader_parameter' => 'inline_requires',
)));
$container = new \Symfony_DI_PhpDumper_Test_Object_Class_Name();
$this->assertInstanceOf('stdClass', $container->get('bar'));
}
/**
* @group legacy
* @expectedDeprecation The "private" service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. You should either make the service public, or stop using the container directly and use dependency injection instead.