Yaffs site version 1.1
[yaffs-website] / vendor / symfony / dependency-injection / Tests / Dumper / XmlDumperTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\DependencyInjection\Tests\Dumper;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\DependencyInjection\ContainerBuilder;
16 use Symfony\Component\DependencyInjection\Dumper\XmlDumper;
17
18 class XmlDumperTest extends TestCase
19 {
20     protected static $fixturesPath;
21
22     public static function setUpBeforeClass()
23     {
24         self::$fixturesPath = realpath(__DIR__.'/../Fixtures/');
25     }
26
27     public function testDump()
28     {
29         $dumper = new XmlDumper(new ContainerBuilder());
30
31         $this->assertXmlStringEqualsXmlFile(self::$fixturesPath.'/xml/services1.xml', $dumper->dump(), '->dump() dumps an empty container as an empty XML file');
32     }
33
34     public function testExportParameters()
35     {
36         $container = include self::$fixturesPath.'//containers/container8.php';
37         $dumper = new XmlDumper($container);
38         $this->assertXmlStringEqualsXmlFile(self::$fixturesPath.'/xml/services8.xml', $dumper->dump(), '->dump() dumps parameters');
39     }
40
41     public function testAddParameters()
42     {
43         $container = include self::$fixturesPath.'//containers/container8.php';
44         $dumper = new XmlDumper($container);
45         $this->assertXmlStringEqualsXmlFile(self::$fixturesPath.'/xml/services8.xml', $dumper->dump(), '->dump() dumps parameters');
46     }
47
48     /**
49      * @group legacy
50      */
51     public function testLegacyAddService()
52     {
53         $container = include self::$fixturesPath.'/containers/legacy-container9.php';
54         $dumper = new XmlDumper($container);
55
56         $this->assertEquals(str_replace('%path%', self::$fixturesPath.DIRECTORY_SEPARATOR.'includes'.DIRECTORY_SEPARATOR, file_get_contents(self::$fixturesPath.'/xml/legacy-services9.xml')), $dumper->dump(), '->dump() dumps services');
57
58         $dumper = new XmlDumper($container = new ContainerBuilder());
59         $container->register('foo', 'FooClass')->addArgument(new \stdClass());
60         try {
61             $dumper->dump();
62             $this->fail('->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
63         } catch (\Exception $e) {
64             $this->assertInstanceOf('\RuntimeException', $e, '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
65             $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');
66         }
67     }
68
69     public function testAddService()
70     {
71         $container = include self::$fixturesPath.'/containers/container9.php';
72         $dumper = new XmlDumper($container);
73
74         $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');
75
76         $dumper = new XmlDumper($container = new ContainerBuilder());
77         $container->register('foo', 'FooClass')->addArgument(new \stdClass());
78         try {
79             $dumper->dump();
80             $this->fail('->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
81         } catch (\Exception $e) {
82             $this->assertInstanceOf('\RuntimeException', $e, '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
83             $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');
84         }
85     }
86
87     public function testDumpAnonymousServices()
88     {
89         $container = include self::$fixturesPath.'/containers/container11.php';
90         $dumper = new XmlDumper($container);
91         $this->assertEquals('<?xml version="1.0" encoding="utf-8"?>
92 <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">
93   <services>
94     <service id="foo" class="FooClass">
95       <argument type="service">
96         <service class="BarClass">
97           <argument type="service">
98             <service class="BazClass"/>
99           </argument>
100         </service>
101       </argument>
102     </service>
103   </services>
104 </container>
105 ', $dumper->dump());
106     }
107
108     public function testDumpEntities()
109     {
110         $container = include self::$fixturesPath.'/containers/container12.php';
111         $dumper = new XmlDumper($container);
112         $this->assertEquals("<?xml version=\"1.0\" encoding=\"utf-8\"?>
113 <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\">
114   <services>
115     <service id=\"foo\" class=\"FooClass\Foo\">
116       <tag name=\"foo&quot;bar\bar\" foo=\"foo&quot;barřž€\"/>
117       <argument>foo&lt;&gt;&amp;bar</argument>
118     </service>
119   </services>
120 </container>
121 ", $dumper->dump());
122     }
123
124     /**
125      * @dataProvider provideDecoratedServicesData
126      */
127     public function testDumpDecoratedServices($expectedXmlDump, $container)
128     {
129         $dumper = new XmlDumper($container);
130         $this->assertEquals($expectedXmlDump, $dumper->dump());
131     }
132
133     public function provideDecoratedServicesData()
134     {
135         $fixturesPath = realpath(__DIR__.'/../Fixtures/');
136
137         return array(
138             array("<?xml version=\"1.0\" encoding=\"utf-8\"?>
139 <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\">
140   <services>
141     <service id=\"foo\" class=\"FooClass\Foo\" decorates=\"bar\" decoration-inner-name=\"bar.woozy\"/>
142   </services>
143 </container>
144 ", include $fixturesPath.'/containers/container15.php'),
145             array("<?xml version=\"1.0\" encoding=\"utf-8\"?>
146 <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\">
147   <services>
148     <service id=\"foo\" class=\"FooClass\Foo\" decorates=\"bar\"/>
149   </services>
150 </container>
151 ", include $fixturesPath.'/containers/container16.php'),
152         );
153     }
154
155     /**
156      * @dataProvider provideCompiledContainerData
157      */
158     public function testCompiledContainerCanBeDumped($containerFile)
159     {
160         $fixturesPath = __DIR__.'/../Fixtures';
161         $container = require $fixturesPath.'/containers/'.$containerFile.'.php';
162         $container->compile();
163         $dumper = new XmlDumper($container);
164         $dumper->dump();
165
166         $this->addToAssertionCount(1);
167     }
168
169     public function provideCompiledContainerData()
170     {
171         return array(
172             array('container8'),
173             array('container9'),
174             array('container11'),
175             array('container12'),
176             array('container14'),
177         );
178     }
179
180     public function testDumpInlinedServices()
181     {
182         $container = include self::$fixturesPath.'/containers/container21.php';
183         $dumper = new XmlDumper($container);
184
185         $this->assertEquals(file_get_contents(self::$fixturesPath.'/xml/services21.xml'), $dumper->dump());
186     }
187
188     public function testDumpAutowireData()
189     {
190         $container = include self::$fixturesPath.'/containers/container24.php';
191         $dumper = new XmlDumper($container);
192
193         $this->assertEquals(file_get_contents(self::$fixturesPath.'/xml/services24.xml'), $dumper->dump());
194     }
195
196     public function testDumpAbstractServices()
197     {
198         $container = include self::$fixturesPath.'/containers/container_abstract.php';
199         $dumper = new XmlDumper($container);
200
201         $this->assertEquals(file_get_contents(self::$fixturesPath.'/xml/services_abstract.xml'), $dumper->dump());
202     }
203 }