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
2017-02-08 07:24:27 +00:00
use PHPUnit\Framework\TestCase ;
2017-08-30 08:27:55 +01:00
use Symfony\Component\Config\FileLocator ;
2010-08-20 22:09:55 +01:00
use Symfony\Component\DependencyInjection\ContainerBuilder ;
2017-08-30 08:27:55 +01:00
use Symfony\Component\DependencyInjection\ContainerInterface ;
2010-08-20 22:09:55 +01:00
use Symfony\Component\DependencyInjection\Dumper\XmlDumper ;
2017-08-30 08:27:55 +01:00
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader ;
use Symfony\Component\DependencyInjection\Reference ;
2010-03-18 07:48:03 +00:00
2017-02-08 07:24:27 +00:00
class XmlDumperTest extends TestCase
2010-03-18 07:48:03 +00:00
{
2012-07-09 13:50:58 +01:00
protected static $fixturesPath ;
2010-05-06 12:25:53 +01: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
}
public function testDump ()
{
2015-03-16 14:12:21 +00:00
$dumper = new XmlDumper ( new ContainerBuilder ());
2010-05-06 12:25:53 +01:00
$this -> assertXmlStringEqualsXmlFile ( self :: $fixturesPath . '/xml/services1.xml' , $dumper -> dump (), '->dump() dumps an empty container as an empty XML file' );
}
2010-06-27 17:28:29 +01:00
public function testExportParameters ()
{
$container = include self :: $fixturesPath . '//containers/container8.php' ;
$dumper = new XmlDumper ( $container );
$this -> assertXmlStringEqualsXmlFile ( self :: $fixturesPath . '/xml/services8.xml' , $dumper -> dump (), '->dump() dumps parameters' );
}
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' ;
$dumper = new XmlDumper ( $container );
$this -> assertXmlStringEqualsXmlFile ( self :: $fixturesPath . '/xml/services8.xml' , $dumper -> dump (), '->dump() dumps parameters' );
2010-03-18 07:48:03 +00:00
}
2010-05-06 12:25:53 +01:00
public function testAddService ()
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 XmlDumper ( $container );
2015-01-13 19:03:32 +00:00
2010-05-06 12:25:53 +01:00
$this -> assertEquals ( str_replace ( '%path%' , self :: $fixturesPath . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR , file_get_contents ( self :: $fixturesPath . '/xml/services9.xml' )), $dumper -> dump (), '->dump() dumps services' );
2010-07-15 14:11:33 +01:00
$dumper = new XmlDumper ( $container = new ContainerBuilder ());
2017-09-17 10:49:41 +01:00
$container -> register ( 'foo' , 'FooClass' ) -> addArgument ( new \stdClass ()) -> setPublic ( true );
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 ) {
2010-05-06 12:25:53 +01:00
$this -> assertInstanceOf ( '\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-03-18 07:48:03 +00:00
}
2010-10-02 15:47:35 +01:00
2011-01-13 15:06:14 +00:00
public function testDumpAnonymousServices ()
{
2014-03-31 16:58:40 +01:00
$container = include self :: $fixturesPath . '/containers/container11.php' ;
2011-01-13 15:06:14 +00:00
$dumper = new XmlDumper ( $container );
2015-04-16 08:01:03 +01:00
$this -> assertEquals ( ' < ? xml version = " 1.0 " encoding = " utf-8 " ?>
< container xmlns = " http://symfony.com/schema/dic/services " xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi : schemaLocation = " http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd " >
2011-01-13 15:06:14 +00:00
< services >
2017-09-19 21:53:21 +01:00
< service id = " service_container " class = " Symfony \ Component \ DependencyInjection \ ContainerInterface " public = " true " synthetic = " true " />
2017-09-17 10:49:41 +01:00
< service id = " foo " class = " FooClass " public = " true " >
2015-04-16 08:01:03 +01:00
< argument type = " service " >
< service class = " BarClass " >
< argument type = " service " >
< service class = " BazClass " />
2011-01-13 15:06:14 +00:00
</ argument >
</ service >
</ argument >
</ service >
2017-02-16 11:05:13 +00:00
< service id = " Psr \ Container \ ContainerInterface " alias = " service_container " public = " false " />
< service id = " Symfony \ Component \ DependencyInjection \ ContainerInterface " alias = " service_container " public = " false " />
2011-01-13 15:06:14 +00:00
</ services >
</ container >
2015-04-16 08:01:03 +01:00
' , $dumper -> dump ());
2011-01-14 14:07:09 +00:00
}
public function testDumpEntities ()
{
2014-03-31 16:58:40 +01:00
$container = include self :: $fixturesPath . '/containers/container12.php' ;
2011-01-14 14:07:09 +00:00
$dumper = new XmlDumper ( $container );
$this -> assertEquals ( " <?xml version= \" 1.0 \" encoding= \" utf-8 \" ?>
2011-03-06 11:40:06 +00:00
< container xmlns = \ " http://symfony.com/schema/dic/services \" xmlns:xsi= \" http://www.w3.org/2001/XMLSchema-instance \" xsi:schemaLocation= \" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd \" >
2011-01-14 14:07:09 +00:00
< services >
2017-09-19 21:53:21 +01:00
< service id = \ " service_container \" class= \" Symfony \ Component \ DependencyInjection \ ContainerInterface \" public= \" true \" synthetic= \" true \" />
2017-09-17 10:49:41 +01:00
< service id = \ " foo \" class= \" FooClass \ Foo \" public= \" true \" >
2011-01-14 14:07:09 +00:00
< tag name = \ " foo"bar \ bar \" foo= \" foo"barřž€ \" />
< argument > foo & lt ; & gt ; & amp ; bar </ argument >
</ service >
2017-02-16 11:05:13 +00:00
< service id = \ " Psr \ Container \ ContainerInterface \" alias= \" service_container \" public= \" false \" />
< service id = \ " Symfony \ Component \ DependencyInjection \ ContainerInterface \" alias= \" service_container \" public= \" false \" />
2011-01-14 14:07:09 +00:00
</ services >
</ container >
2011-01-13 15:06:14 +00:00
" , $dumper->dump ());
}
2014-03-31 16:58:40 +01:00
/**
* @ dataProvider provideDecoratedServicesData
*/
public function testDumpDecoratedServices ( $expectedXmlDump , $container )
{
$dumper = new XmlDumper ( $container );
$this -> assertEquals ( $expectedXmlDump , $dumper -> dump ());
}
public function provideDecoratedServicesData ()
{
$fixturesPath = realpath ( __DIR__ . '/../Fixtures/' );
return array (
array ( " <?xml version= \" 1.0 \" encoding= \" utf-8 \" ?>
< container xmlns = \ " http://symfony.com/schema/dic/services \" xmlns:xsi= \" http://www.w3.org/2001/XMLSchema-instance \" xsi:schemaLocation= \" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd \" >
< services >
2017-09-19 21:53:21 +01:00
< service id = \ " service_container \" class= \" Symfony \ Component \ DependencyInjection \ ContainerInterface \" public= \" true \" synthetic= \" true \" />
2017-09-17 10:49:41 +01:00
< service id = \ " foo \" class= \" FooClass \ Foo \" public= \" true \" decorates= \" bar \" decoration-inner-name= \" bar.woozy \" />
2017-02-16 11:05:13 +00:00
< service id = \ " Psr \ Container \ ContainerInterface \" alias= \" service_container \" public= \" false \" />
< service id = \ " Symfony \ Component \ DependencyInjection \ ContainerInterface \" alias= \" service_container \" public= \" false \" />
2014-03-31 16:58:40 +01:00
</ services >
</ container >
" , include $fixturesPath .'/containers/container15.php'),
array ( " <?xml version= \" 1.0 \" encoding= \" utf-8 \" ?>
< container xmlns = \ " http://symfony.com/schema/dic/services \" xmlns:xsi= \" http://www.w3.org/2001/XMLSchema-instance \" xsi:schemaLocation= \" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd \" >
< services >
2017-09-19 21:53:21 +01:00
< service id = \ " service_container \" class= \" Symfony \ Component \ DependencyInjection \ ContainerInterface \" public= \" true \" synthetic= \" true \" />
2017-09-17 10:49:41 +01:00
< service id = \ " foo \" class= \" FooClass \ Foo \" public= \" true \" decorates= \" bar \" />
2017-02-16 11:05:13 +00:00
< service id = \ " Psr \ Container \ ContainerInterface \" alias= \" service_container \" public= \" false \" />
< service id = \ " Symfony \ Component \ DependencyInjection \ ContainerInterface \" alias= \" service_container \" public= \" false \" />
2014-03-31 16:58:40 +01:00
</ services >
</ container >
" , include $fixturesPath .'/containers/container16.php'),
);
}
2015-03-12 17:20:19 +00:00
/**
* @ dataProvider provideCompiledContainerData
*/
public function testCompiledContainerCanBeDumped ( $containerFile )
{
$fixturesPath = __DIR__ . '/../Fixtures' ;
$container = require $fixturesPath . '/containers/' . $containerFile . '.php' ;
$container -> compile ();
$dumper = new XmlDumper ( $container );
$dumper -> dump ();
2017-03-18 09:10:35 +00:00
$this -> addToAssertionCount ( 1 );
2015-03-12 17:20:19 +00:00
}
public function provideCompiledContainerData ()
{
return array (
array ( 'container8' ),
2015-03-22 07:55:48 +00:00
array ( 'container9' ),
2015-03-12 17:20:19 +00:00
array ( 'container11' ),
array ( 'container12' ),
array ( 'container14' ),
);
}
2015-03-23 18:17:24 +00:00
public function testDumpInlinedServices ()
{
$container = include self :: $fixturesPath . '/containers/container21.php' ;
$dumper = new XmlDumper ( $container );
$this -> assertEquals ( file_get_contents ( self :: $fixturesPath . '/xml/services21.xml' ), $dumper -> dump ());
}
2015-11-03 23:41:24 +00:00
public function testDumpAutowireData ()
{
$container = include self :: $fixturesPath . '/containers/container24.php' ;
$dumper = new XmlDumper ( $container );
$this -> assertEquals ( file_get_contents ( self :: $fixturesPath . '/xml/services24.xml' ), $dumper -> dump ());
}
2017-05-25 23:57:22 +01:00
2017-08-30 08:27:55 +01:00
public function testDumpLoad ()
{
$container = new ContainerBuilder ();
$loader = new XmlFileLoader ( $container , new FileLocator ( self :: $fixturesPath . '/xml' ));
$loader -> load ( 'services_dump_load.xml' );
$this -> assertEquals ( array ( new Reference ( 'bar' , ContainerInterface :: IGNORE_ON_UNINITIALIZED_REFERENCE )), $container -> getDefinition ( 'foo' ) -> getArguments ());
$dumper = new XmlDumper ( $container );
$this -> assertStringEqualsFile ( self :: $fixturesPath . '/xml/services_dump_load.xml' , $dumper -> dump ());
}
2017-05-25 02:00:11 +01:00
public function testDumpAbstractServices ()
{
$container = include self :: $fixturesPath . '/containers/container_abstract.php' ;
$dumper = new XmlDumper ( $container );
$this -> assertEquals ( file_get_contents ( self :: $fixturesPath . '/xml/services_abstract.xml' ), $dumper -> dump ());
}
2010-03-18 07:48:03 +00:00
}