2010-03-18 07:48:03 +00:00
< ? php
/*
2010-04-25 16:06:54 +01:00
* This file is part of the Symfony package .
2011-01-15 13:29:43 +00:00
*
2011-03-06 11:40:06 +00:00
* ( c ) Fabien Potencier < fabien @ symfony . com >
2010-04-07 02:07:59 +01:00
*
2010-03-18 07:48:03 +00:00
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2012-03-28 14:43:52 +01:00
namespace Symfony\Component\DependencyInjection\Tests\Dumper ;
2010-03-18 07:48:03 +00:00
2016-09-10 18:39:00 +01:00
use DummyProxyDumper ;
2016-08-12 19:34:27 +01:00
use Symfony\Component\Config\FileLocator ;
2016-12-13 17:37:51 +00:00
use Symfony\Component\DependencyInjection\Argument\IteratorArgument ;
2010-08-20 22:09:55 +01:00
use Symfony\Component\DependencyInjection\ContainerBuilder ;
use Symfony\Component\DependencyInjection\Dumper\PhpDumper ;
2016-12-13 17:37:51 +00:00
use Symfony\Component\DependencyInjection\Argument\RewindableGenerator ;
2010-08-20 22:09:55 +01:00
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag ;
use Symfony\Component\DependencyInjection\Reference ;
2011-10-18 13:52:35 +01:00
use Symfony\Component\DependencyInjection\Definition ;
2016-08-12 19:34:27 +01:00
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader ;
2016-04-10 19:38:01 +01:00
use Symfony\Component\DependencyInjection\Variable ;
use Symfony\Component\ExpressionLanguage\Expression ;
2010-03-18 07:48:03 +00:00
2016-09-10 18:39:00 +01:00
require_once __DIR__ . '/../Fixtures/includes/classes.php' ;
2010-03-18 07:48:03 +00:00
class PhpDumperTest extends \PHPUnit_Framework_TestCase
{
2012-07-09 13:50:58 +01:00
protected static $fixturesPath ;
2010-03-18 07:48:03 +00:00
2012-07-09 13:50:58 +01:00
public static function setUpBeforeClass ()
2010-05-06 12:25:53 +01:00
{
2010-06-28 08:31:54 +01:00
self :: $fixturesPath = realpath ( __DIR__ . '/../Fixtures/' );
2010-05-06 12:25:53 +01:00
}
2010-03-18 07:48:03 +00:00
2010-05-06 12:25:53 +01:00
public function testDump ()
{
2016-11-25 13:27:11 +00:00
$container = new ContainerBuilder ();
$container -> compile ();
$dumper = new PhpDumper ( $container );
2010-03-18 07:48:03 +00:00
2010-05-06 12:25:53 +01:00
$this -> assertStringEqualsFile ( self :: $fixturesPath . '/php/services1.php' , $dumper -> dump (), '->dump() dumps an empty container as an empty PHP class' );
2013-05-22 20:21:30 +01:00
$this -> assertStringEqualsFile ( self :: $fixturesPath . '/php/services1-1.php' , $dumper -> dump ( array ( 'class' => 'Container' , 'base_class' => 'AbstractContainer' , 'namespace' => 'Symfony\Component\DependencyInjection\Dump' )), '->dump() takes a class and a base_class options' );
2010-03-18 07:48:03 +00:00
2010-07-15 14:11:33 +01:00
$container = new ContainerBuilder ();
2016-11-25 13:27:11 +00:00
$container -> compile ();
2011-10-18 13:52:35 +01:00
new PhpDumper ( $container );
}
public function testDumpOptimizationString ()
{
$definition = new Definition ();
$definition -> setClass ( 'stdClass' );
$definition -> addArgument ( array (
'only dot' => '.' ,
'concatenation as value' => '.\'\'.' ,
'concatenation from the start value' => '\'\'.' ,
'.' => 'dot as a key' ,
'.\'\'.' => 'concatenation as a key' ,
2014-09-21 19:53:12 +01:00
'\'\'.' => 'concatenation from the start key' ,
2015-03-21 10:51:07 +00:00
'optimize concatenation' => 'string1%some_string%string2' ,
'optimize concatenation with empty string' => 'string1%empty_value%string2' ,
2011-10-18 13:52:35 +01:00
'optimize concatenation from the start' => '%empty_value%start' ,
'optimize concatenation at the end' => 'end%empty_value%' ,
));
$container = new ContainerBuilder ();
2012-12-28 09:40:13 +00:00
$container -> setResourceTracking ( false );
2011-10-18 13:52:35 +01:00
$container -> setDefinition ( 'test' , $definition );
$container -> setParameter ( 'empty_value' , '' );
$container -> setParameter ( 'some_string' , '-' );
$container -> compile ();
2010-05-06 12:25:53 +01:00
$dumper = new PhpDumper ( $container );
2011-10-18 13:52:35 +01:00
$this -> assertStringEqualsFile ( self :: $fixturesPath . '/php/services10.php' , $dumper -> dump (), '->dump() dumps an empty container as an empty PHP class' );
2010-05-06 12:25:53 +01:00
}
2010-03-18 07:48:03 +00:00
2014-11-30 15:07:59 +00:00
public function testDumpRelativeDir ()
{
$definition = new Definition ();
$definition -> setClass ( 'stdClass' );
$definition -> addArgument ( '%foo%' );
2014-12-04 18:27:52 +00:00
$definition -> addArgument ( array ( '%foo%' => '%buz%/' ));
2014-11-30 15:07:59 +00:00
$container = new ContainerBuilder ();
$container -> setDefinition ( 'test' , $definition );
2015-03-06 19:37:36 +00:00
$container -> setParameter ( 'foo' , 'wiz' . dirname ( __DIR__ ));
$container -> setParameter ( 'bar' , __DIR__ );
2014-11-30 15:07:59 +00:00
$container -> setParameter ( 'baz' , '%bar%/PhpDumperTest.php' );
2014-12-04 18:27:52 +00:00
$container -> setParameter ( 'buz' , dirname ( dirname ( __DIR__ )));
2014-11-30 15:07:59 +00:00
$container -> compile ();
$dumper = new PhpDumper ( $container );
$this -> assertStringEqualsFile ( self :: $fixturesPath . '/php/services12.php' , $dumper -> dump ( array ( 'file' => __FILE__ )), '->dump() dumps __DIR__ relative strings' );
}
2010-06-27 17:28:29 +01:00
/**
2016-04-10 19:38:01 +01:00
* @ dataProvider provideInvalidParameters
2013-11-25 08:44:14 +00:00
* @ expectedException \InvalidArgumentException
2010-06-27 17:28:29 +01:00
*/
2016-04-10 19:38:01 +01:00
public function testExportParameters ( $parameters )
2010-06-27 17:28:29 +01:00
{
2016-11-25 13:27:11 +00:00
$container = new ContainerBuilder ( new ParameterBag ( $parameters ));
$container -> compile ();
$dumper = new PhpDumper ( $container );
2010-06-27 17:28:29 +01:00
$dumper -> dump ();
}
2016-04-10 19:38:01 +01:00
public function provideInvalidParameters ()
{
return array (
array ( array ( 'foo' => new Definition ( 'stdClass' ))),
2016-07-22 15:17:18 +01:00
array ( array ( 'foo' => new Expression ( 'service("foo").foo() ~ (container.hasParameter("foo") ? parameter("foo") : "default")' ))),
2016-04-10 19:38:01 +01:00
array ( array ( 'foo' => new Reference ( 'foo' ))),
array ( array ( 'foo' => new Variable ( 'foo' ))),
);
}
2010-05-06 12:25:53 +01:00
public function testAddParameters ()
2010-03-18 07:48:03 +00:00
{
2010-05-06 12:25:53 +01:00
$container = include self :: $fixturesPath . '/containers/container8.php' ;
2016-11-25 13:27:11 +00:00
$container -> compile ();
2010-05-06 12:25:53 +01:00
$dumper = new PhpDumper ( $container );
$this -> assertStringEqualsFile ( self :: $fixturesPath . '/php/services8.php' , $dumper -> dump (), '->dump() dumps parameters' );
2010-03-18 07:48:03 +00:00
}
2010-05-06 12:25:53 +01:00
2016-11-25 13:27:11 +00:00
/**
* @ group legacy
* @ expectedDeprecation Dumping an uncompiled ContainerBuilder is deprecated since version 3.3 and will not be supported anymore in 4.0 . Compile the container beforehand .
*/
public function testAddServiceWithoutCompilation ()
2010-03-18 07:48:03 +00:00
{
2010-05-06 12:25:53 +01:00
$container = include self :: $fixturesPath . '/containers/container9.php' ;
$dumper = new PhpDumper ( $container );
2014-11-30 15:07:59 +00:00
$this -> assertEquals ( str_replace ( '%path%' , str_replace ( '\\' , '\\\\' , self :: $fixturesPath . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR ), file_get_contents ( self :: $fixturesPath . '/php/services9.php' )), $dumper -> dump (), '->dump() dumps services' );
2016-11-25 13:27:11 +00:00
}
2010-05-06 12:25:53 +01:00
2016-11-25 13:27:11 +00:00
public function testAddService ()
{
2013-01-05 08:50:11 +00:00
$container = include self :: $fixturesPath . '/containers/container9.php' ;
$container -> compile ();
$dumper = new PhpDumper ( $container );
2014-11-30 15:07:59 +00:00
$this -> assertEquals ( str_replace ( '%path%' , str_replace ( '\\' , '\\\\' , self :: $fixturesPath . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR ), file_get_contents ( self :: $fixturesPath . '/php/services9_compiled.php' )), $dumper -> dump (), '->dump() dumps services' );
2013-01-05 08:50:11 +00:00
2016-11-25 13:27:11 +00:00
$container = new ContainerBuilder ();
2010-05-06 12:25:53 +01:00
$container -> register ( 'foo' , 'FooClass' ) -> addArgument ( new \stdClass ());
2016-11-25 13:27:11 +00:00
$container -> compile ();
$dumper = new PhpDumper ( $container );
2010-05-07 15:09:11 +01:00
try {
2010-05-06 12:25:53 +01:00
$dumper -> dump ();
$this -> fail ( '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources' );
2010-05-07 15:09:11 +01:00
} catch ( \Exception $e ) {
2011-12-05 18:05:21 +00:00
$this -> assertInstanceOf ( '\Symfony\Component\DependencyInjection\Exception\RuntimeException' , $e , '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources' );
$this -> assertEquals ( 'Unable to dump a service container if a parameter is an object or a resource.' , $e -> getMessage (), '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources' );
2010-05-06 12:25:53 +01:00
}
2010-03-18 07:48:03 +00:00
}
2010-04-08 09:43:42 +01:00
2014-09-27 17:06:30 +01:00
public function testServicesWithAnonymousFactories ()
{
$container = include self :: $fixturesPath . '/containers/container19.php' ;
2016-11-25 13:27:11 +00:00
$container -> compile ();
2014-09-27 17:06:30 +01:00
$dumper = new PhpDumper ( $container );
$this -> assertStringEqualsFile ( self :: $fixturesPath . '/php/services19.php' , $dumper -> dump (), '->dump() dumps services with anonymous factories' );
}
2016-03-14 19:21:02 +00:00
public function testAddServiceIdWithUnsupportedCharacters ()
2013-07-19 08:14:04 +01:00
{
2016-03-14 19:21:02 +00:00
$class = 'Symfony_DI_PhpDumper_Test_Unsupported_Characters' ;
2013-07-19 08:14:04 +01:00
$container = new ContainerBuilder ();
$container -> register ( 'bar$' , 'FooClass' );
2016-03-14 19:21:02 +00:00
$container -> register ( 'bar$!' , 'FooClass' );
2016-11-25 13:27:11 +00:00
$container -> compile ();
2013-07-19 08:14:04 +01:00
$dumper = new PhpDumper ( $container );
2016-03-14 19:21:02 +00:00
eval ( '?>' . $dumper -> dump ( array ( 'class' => $class )));
$this -> assertTrue ( method_exists ( $class , 'getBarService' ));
$this -> assertTrue ( method_exists ( $class , 'getBar2Service' ));
}
public function testConflictingServiceIds ()
{
$class = 'Symfony_DI_PhpDumper_Test_Conflicting_Service_Ids' ;
$container = new ContainerBuilder ();
$container -> register ( 'foo_bar' , 'FooClass' );
$container -> register ( 'foobar' , 'FooClass' );
2016-11-25 13:27:11 +00:00
$container -> compile ();
2016-03-14 19:21:02 +00:00
$dumper = new PhpDumper ( $container );
eval ( '?>' . $dumper -> dump ( array ( 'class' => $class )));
$this -> assertTrue ( method_exists ( $class , 'getFooBarService' ));
$this -> assertTrue ( method_exists ( $class , 'getFoobar2Service' ));
}
public function testConflictingMethodsWithParent ()
{
$class = 'Symfony_DI_PhpDumper_Test_Conflicting_Method_With_Parent' ;
$container = new ContainerBuilder ();
$container -> register ( 'bar' , 'FooClass' );
$container -> register ( 'foo_bar' , 'FooClass' );
2016-11-25 13:27:11 +00:00
$container -> compile ();
2016-03-14 19:21:02 +00:00
$dumper = new PhpDumper ( $container );
eval ( '?>' . $dumper -> dump ( array (
'class' => $class ,
'base_class' => 'Symfony\Component\DependencyInjection\Tests\Fixtures\containers\CustomContainer' ,
)));
$this -> assertTrue ( method_exists ( $class , 'getBar2Service' ));
$this -> assertTrue ( method_exists ( $class , 'getFoobar2Service' ));
2013-07-19 08:14:04 +01:00
}
2015-12-02 16:08:27 +00:00
/**
* @ dataProvider provideInvalidFactories
2016-09-02 19:13:13 +01:00
* @ expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
2015-12-02 16:08:27 +00:00
* @ expectedExceptionMessage Cannot dump definition
*/
public function testInvalidFactories ( $factory )
{
$container = new ContainerBuilder ();
$def = new Definition ( 'stdClass' );
$def -> setFactory ( $factory );
$container -> setDefinition ( 'bar' , $def );
2016-11-25 13:27:11 +00:00
$container -> compile ();
2015-12-02 16:08:27 +00:00
$dumper = new PhpDumper ( $container );
$dumper -> dump ();
}
public function provideInvalidFactories ()
{
return array (
array ( array ( '' , 'method' )),
array ( array ( 'class' , '' )),
array ( array ( '...' , 'method' )),
array ( array ( 'class' , '...' )),
);
}
2013-06-05 10:51:05 +01:00
public function testAliases ()
{
$container = include self :: $fixturesPath . '/containers/container9.php' ;
$container -> compile ();
$dumper = new PhpDumper ( $container );
eval ( '?>' . $dumper -> dump ( array ( 'class' => 'Symfony_DI_PhpDumper_Test_Aliases' )));
$container = new \Symfony_DI_PhpDumper_Test_Aliases ();
2014-07-29 19:09:11 +01:00
$container -> set ( 'foo' , $foo = new \stdClass ());
2013-06-05 10:51:05 +01:00
$this -> assertSame ( $foo , $container -> get ( 'foo' ));
$this -> assertSame ( $foo , $container -> get ( 'alias_for_foo' ));
$this -> assertSame ( $foo , $container -> get ( 'alias_for_alias' ));
}
2013-07-07 13:58:42 +01:00
public function testFrozenContainerWithoutAliases ()
{
$container = new ContainerBuilder ();
$container -> compile ();
$dumper = new PhpDumper ( $container );
eval ( '?>' . $dumper -> dump ( array ( 'class' => 'Symfony_DI_PhpDumper_Test_Frozen_No_Aliases' )));
$container = new \Symfony_DI_PhpDumper_Test_Frozen_No_Aliases ();
$this -> assertFalse ( $container -> has ( 'foo' ));
}
2010-05-06 12:25:53 +01:00
public function testOverrideServiceWhenUsingADumpedContainer ()
{
require_once self :: $fixturesPath . '/php/services9.php' ;
require_once self :: $fixturesPath . '/includes/foo.php' ;
2010-04-08 09:43:42 +01:00
2010-05-06 12:25:53 +01:00
$container = new \ProjectServiceContainer ();
2010-06-27 17:28:29 +01:00
$container -> set ( 'bar' , $bar = new \stdClass ());
2010-05-06 12:25:53 +01:00
$container -> setParameter ( 'foo_bar' , 'foo_bar' );
2010-04-08 09:43:42 +01:00
2010-06-27 17:28:29 +01:00
$this -> assertEquals ( $bar , $container -> get ( 'bar' ), '->set() overrides an already defined service' );
2010-05-06 12:25:53 +01:00
}
2010-11-12 08:49:59 +00:00
public function testOverrideServiceWhenUsingADumpedContainerAndServiceIsUsedFromAnotherOne ()
{
require_once self :: $fixturesPath . '/php/services9.php' ;
require_once self :: $fixturesPath . '/includes/foo.php' ;
require_once self :: $fixturesPath . '/includes/classes.php' ;
$container = new \ProjectServiceContainer ();
$container -> set ( 'bar' , $bar = new \stdClass ());
2010-11-23 21:43:09 +00:00
$this -> assertSame ( $bar , $container -> get ( 'foo' ) -> bar , '->set() overrides an already defined service' );
2010-11-12 08:49:59 +00:00
}
2013-09-12 07:52:33 +01:00
/**
* @ expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
*/
public function testCircularReference ()
{
$container = new ContainerBuilder ();
$container -> register ( 'foo' , 'stdClass' ) -> addArgument ( new Reference ( 'bar' ));
$container -> register ( 'bar' , 'stdClass' ) -> setPublic ( false ) -> addMethodCall ( 'setA' , array ( new Reference ( 'baz' )));
$container -> register ( 'baz' , 'stdClass' ) -> addMethodCall ( 'setA' , array ( new Reference ( 'foo' )));
$container -> compile ();
$dumper = new PhpDumper ( $container );
$dumper -> dump ();
}
2015-11-03 23:41:24 +00:00
public function testDumpAutowireData ()
{
$container = include self :: $fixturesPath . '/containers/container24.php' ;
2016-11-25 13:27:11 +00:00
$container -> compile ();
2015-11-03 23:41:24 +00:00
$dumper = new PhpDumper ( $container );
$this -> assertEquals ( file_get_contents ( self :: $fixturesPath . '/php/services24.php' ), $dumper -> dump ());
}
2016-06-06 12:11:27 +01:00
2016-08-12 19:34:27 +01:00
public function testEnvParameter ()
{
$container = new ContainerBuilder ();
$loader = new YamlFileLoader ( $container , new FileLocator ( self :: $fixturesPath . '/yaml' ));
$loader -> load ( 'services26.yml' );
$container -> compile ();
$dumper = new PhpDumper ( $container );
$this -> assertStringEqualsFile ( self :: $fixturesPath . '/php/services26.php' , $dumper -> dump (), '->dump() dumps inline definitions which reference service_container' );
}
/**
* @ expectedException \Symfony\Component\DependencyInjection\Exception\EnvParameterException
* @ expectedExceptionMessage Incompatible use of dynamic environment variables " FOO " found in parameters .
*/
public function testUnusedEnvParameter ()
{
$container = new ContainerBuilder ();
$container -> getParameter ( 'env(FOO)' );
$container -> compile ();
$dumper = new PhpDumper ( $container );
$dumper -> dump ();
}
2016-05-26 15:08:43 +01:00
public function testInlinedDefinitionReferencingServiceContainer ()
{
$container = new ContainerBuilder ();
$container -> register ( 'foo' , 'stdClass' ) -> addMethodCall ( 'add' , array ( new Reference ( 'service_container' ))) -> setPublic ( false );
$container -> register ( 'bar' , 'stdClass' ) -> addArgument ( new Reference ( 'foo' ));
$container -> compile ();
$dumper = new PhpDumper ( $container );
$this -> assertStringEqualsFile ( self :: $fixturesPath . '/php/services13.php' , $dumper -> dump (), '->dump() dumps inline definitions which reference service_container' );
}
2016-11-19 11:21:18 +00:00
public function testInitializePropertiesBeforeMethodCalls ()
{
require_once self :: $fixturesPath . '/includes/classes.php' ;
$container = new ContainerBuilder ();
$container -> register ( 'foo' , 'stdClass' );
$container -> register ( 'bar' , 'MethodCallClass' )
-> setProperty ( 'simple' , 'bar' )
-> setProperty ( 'complex' , new Reference ( 'foo' ))
-> addMethodCall ( 'callMe' );
$container -> compile ();
$dumper = new PhpDumper ( $container );
eval ( '?>' . $dumper -> dump ( array ( 'class' => 'Symfony_DI_PhpDumper_Test_Properties_Before_Method_Calls' )));
$container = new \Symfony_DI_PhpDumper_Test_Properties_Before_Method_Calls ();
$this -> assertTrue ( $container -> get ( 'bar' ) -> callPassed (), '->dump() initializes properties before method calls' );
}
2016-09-10 18:39:00 +01:00
public function testCircularReferenceAllowanceForLazyServices ()
{
$container = new ContainerBuilder ();
$container -> register ( 'foo' , 'stdClass' ) -> addArgument ( new Reference ( 'bar' ));
$container -> register ( 'bar' , 'stdClass' ) -> setLazy ( true ) -> addArgument ( new Reference ( 'foo' ));
$container -> compile ();
$dumper = new PhpDumper ( $container );
$dumper -> dump ();
}
public function testCircularReferenceAllowanceForInlinedDefinitionsForLazyServices ()
{
/*
* test graph :
* [ connection ] -> [ event_manager ] --> [ entity_manager ]( lazy )
* |
* -- ( call ) - addEventListener ( " @lazy_service " )
*
* [ lazy_service ]( lazy ) -> [ entity_manager ]( lazy )
*
*/
$container = new ContainerBuilder ();
$eventManagerDefinition = new Definition ( 'stdClass' );
$connectionDefinition = $container -> register ( 'connection' , 'stdClass' );
$connectionDefinition -> addArgument ( $eventManagerDefinition );
$container -> register ( 'entity_manager' , 'stdClass' )
-> setLazy ( true )
-> addArgument ( new Reference ( 'connection' ));
$lazyServiceDefinition = $container -> register ( 'lazy_service' , 'stdClass' );
$lazyServiceDefinition -> setLazy ( true );
$lazyServiceDefinition -> addArgument ( new Reference ( 'entity_manager' ));
$eventManagerDefinition -> addMethodCall ( 'addEventListener' , array ( new Reference ( 'lazy_service' )));
$container -> compile ();
$dumper = new PhpDumper ( $container );
$dumper -> setProxyDumper ( new DummyProxyDumper ());
$dumper -> dump ();
}
2016-12-13 17:37:51 +00:00
public function testLazyArgumentProvideGenerator ()
{
require_once self :: $fixturesPath . '/includes/classes.php' ;
$container = new ContainerBuilder ();
$container -> register ( 'lazy_referenced' , 'stdClass' );
$container
-> register ( 'lazy_context' , 'LazyContext' )
-> setArguments ( array ( new IteratorArgument ( array ( 'foo' , new Reference ( 'lazy_referenced' ), 'k1' => array ( 'foo' => 'bar' ), true , 'k2' => new Reference ( 'service_container' )))))
;
$container -> compile ();
$dumper = new PhpDumper ( $container );
eval ( '?>' . $dumper -> dump ( array ( 'class' => 'Symfony_DI_PhpDumper_Test_Lazy_Argument_Provide_Generator' )));
$container = new \Symfony_DI_PhpDumper_Test_Lazy_Argument_Provide_Generator ();
$lazyContext = $container -> get ( 'lazy_context' );
$this -> assertInstanceOf ( RewindableGenerator :: class , $lazyContext -> lazyValues );
$i = - 1 ;
foreach ( $lazyContext -> lazyValues as $k => $v ) {
switch ( ++ $i ) {
case 0 :
$this -> assertEquals ( 0 , $k );
$this -> assertEquals ( 'foo' , $v );
break ;
case 1 :
$this -> assertEquals ( 1 , $k );
$this -> assertInstanceOf ( 'stdClass' , $v );
break ;
case 2 :
$this -> assertEquals ( 'k1' , $k );
$this -> assertEquals ( array ( 'foo' => 'bar' ), $v );
break ;
case 3 :
$this -> assertEquals ( 2 , $k );
$this -> assertTrue ( $v );
break ;
case 4 :
$this -> assertEquals ( 'k2' , $k );
$this -> assertInstanceOf ( '\Symfony_DI_PhpDumper_Test_Lazy_Argument_Provide_Generator' , $v );
break ;
}
}
}
2016-12-15 07:56:11 +00:00
public function testClosureProxy ()
{
$container = include self :: $fixturesPath . '/containers/container31.php' ;
$container -> compile ();
$dumper = new PhpDumper ( $container );
$dump = $dumper -> dump ( array ( 'class' => 'Symfony_DI_PhpDumper_Test_Closure_Proxy' ));
$this -> assertEquals ( file_get_contents ( self :: $fixturesPath . '/php/services31.php' ), $dumper -> dump ());
$res = $container -> getResources ();
$this -> assertSame ( realpath ( self :: $fixturesPath . '/containers/container31.php' ), array_pop ( $res ) -> getResource ());
}
/**
* @ requires PHP 7.1
*/
public function testClosureProxyPhp71 ()
{
$container = include self :: $fixturesPath . '/containers/container32.php' ;
$container -> compile ();
$dumper = new PhpDumper ( $container );
$dump = $dumper -> dump ( array ( 'class' => 'Symfony_DI_PhpDumper_Test_Closure_Proxy_Php71' ));
$this -> assertEquals ( file_get_contents ( self :: $fixturesPath . '/php/services32.php' ), $dumper -> dump ());
$res = $container -> getResources ();
$this -> assertSame ( realpath ( self :: $fixturesPath . '/containers/container32.php' ), array_pop ( $res ) -> getResource ());
}
2010-03-18 07:48:03 +00:00
}