4afbc80bb8e44da0ab24717f466d9d38c071d782
[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     public function testAddService()
49     {
50         $container = include self::$fixturesPath.'/containers/container9.php';
51         $dumper = new XmlDumper($container);
52
53         $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');
54
55         $dumper = new XmlDumper($container = new ContainerBuilder());
56         $container->register('foo', 'FooClass')->addArgument(new \stdClass());
57         try {
58             $dumper->dump();
59             $this->fail('->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
60         } catch (\Exception $e) {
61             $this->assertInstanceOf('\RuntimeException', $e, '->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
62             $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');
63         }
64     }
65
66     public function testDumpAnonymousServices()
67     {
68         $container = include self::$fixturesPath.'/containers/container11.php';
69         $dumper = new XmlDumper($container);
70         $this->assertEquals('<?xml version="1.0" encoding="utf-8"?>
71 <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">
72   <services>
73     <service id="foo" class="FooClass">
74       <argument type="service">
75         <service class="BarClass">
76           <argument type="service">
77             <service class="BazClass"/>
78           </argument>
79         </service>
80       </argument>
81     </service>
82   </services>
83 </container>
84 ', $dumper->dump());
85     }
86
87     public function testDumpEntities()
88     {
89         $container = include self::$fixturesPath.'/containers/container12.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\Foo\">
95       <tag name=\"foo&quot;bar\bar\" foo=\"foo&quot;barřž€\"/>
96       <argument>foo&lt;&gt;&amp;bar</argument>
97     </service>
98   </services>
99 </container>
100 ", $dumper->dump());
101     }
102
103     /**
104      * @dataProvider provideDecoratedServicesData
105      */
106     public function testDumpDecoratedServices($expectedXmlDump, $container)
107     {
108         $dumper = new XmlDumper($container);
109         $this->assertEquals($expectedXmlDump, $dumper->dump());
110     }
111
112     public function provideDecoratedServicesData()
113     {
114         $fixturesPath = realpath(__DIR__.'/../Fixtures/');
115
116         return array(
117             array("<?xml version=\"1.0\" encoding=\"utf-8\"?>
118 <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\">
119   <services>
120     <service id=\"foo\" class=\"FooClass\Foo\" decorates=\"bar\" decoration-inner-name=\"bar.woozy\"/>
121   </services>
122 </container>
123 ", include $fixturesPath.'/containers/container15.php'),
124             array("<?xml version=\"1.0\" encoding=\"utf-8\"?>
125 <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\">
126   <services>
127     <service id=\"foo\" class=\"FooClass\Foo\" decorates=\"bar\"/>
128   </services>
129 </container>
130 ", include $fixturesPath.'/containers/container16.php'),
131         );
132     }
133
134     /**
135      * @dataProvider provideCompiledContainerData
136      */
137     public function testCompiledContainerCanBeDumped($containerFile)
138     {
139         $fixturesPath = __DIR__.'/../Fixtures';
140         $container = require $fixturesPath.'/containers/'.$containerFile.'.php';
141         $container->compile();
142         $dumper = new XmlDumper($container);
143         $dumper->dump();
144
145         $this->addToAssertionCount(1);
146     }
147
148     public function provideCompiledContainerData()
149     {
150         return array(
151             array('container8'),
152             array('container9'),
153             array('container11'),
154             array('container12'),
155             array('container14'),
156         );
157     }
158
159     public function testDumpInlinedServices()
160     {
161         $container = include self::$fixturesPath.'/containers/container21.php';
162         $dumper = new XmlDumper($container);
163
164         $this->assertEquals(file_get_contents(self::$fixturesPath.'/xml/services21.xml'), $dumper->dump());
165     }
166
167     public function testDumpAutowireData()
168     {
169         $container = include self::$fixturesPath.'/containers/container24.php';
170         $dumper = new XmlDumper($container);
171
172         $this->assertEquals(file_get_contents(self::$fixturesPath.'/xml/services24.xml'), $dumper->dump());
173     }
174
175     public function testDumpAbstractServices()
176     {
177         $container = include self::$fixturesPath.'/containers/container_abstract.php';
178         $dumper = new XmlDumper($container);
179
180         $this->assertEquals(file_get_contents(self::$fixturesPath.'/xml/services_abstract.xml'), $dumper->dump());
181     }
182 }