namespace Symfony\Component\DependencyInjection\Tests\Dumper;
use PHPUnit\Framework\TestCase;
+use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Dumper\YamlDumper;
+use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
+use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\Yaml\Yaml;
+use Symfony\Component\Yaml\Parser;
class YamlDumperTest extends TestCase
{
$this->assertEqualYamlStructure(str_replace('%path%', self::$fixturesPath.DIRECTORY_SEPARATOR.'includes'.DIRECTORY_SEPARATOR, file_get_contents(self::$fixturesPath.'/yaml/services9.yml')), $dumper->dump(), '->dump() dumps services');
$dumper = new YamlDumper($container = new ContainerBuilder());
- $container->register('foo', 'FooClass')->addArgument(new \stdClass());
+ $container->register('foo', 'FooClass')->addArgument(new \stdClass())->setPublic(true);
try {
$dumper->dump();
$this->fail('->dump() throws a RuntimeException if the container to be dumped has reference to objects or resources');
$this->assertStringEqualsFile(self::$fixturesPath.'/yaml/services24.yml', $dumper->dump());
}
- private function assertEqualYamlStructure($yaml, $expected, $message = '')
+ public function testDumpLoad()
{
- $this->assertEquals(Yaml::parse($expected), Yaml::parse($yaml), $message);
+ $container = new ContainerBuilder();
+ $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
+ $loader->load('services_dump_load.yml');
+
+ $this->assertEquals(array(new Reference('bar', ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE)), $container->getDefinition('foo')->getArguments());
+
+ $dumper = new YamlDumper($container);
+ $this->assertStringEqualsFile(self::$fixturesPath.'/yaml/services_dump_load.yml', $dumper->dump());
+ }
+
+ public function testInlineServices()
+ {
+ $container = new ContainerBuilder();
+ $container->register('foo', 'Class1')
+ ->setPublic(true)
+ ->addArgument((new Definition('Class2'))
+ ->addArgument(new Definition('Class2'))
+ )
+ ;
+
+ $dumper = new YamlDumper($container);
+ $this->assertStringEqualsFile(self::$fixturesPath.'/yaml/services_inline.yml', $dumper->dump());
+ }
+
+ private function assertEqualYamlStructure($expected, $yaml, $message = '')
+ {
+ $parser = new Parser();
+
+ $this->assertEquals($parser->parse($expected, Yaml::PARSE_CUSTOM_TAGS), $parser->parse($yaml, Yaml::PARSE_CUSTOM_TAGS), $message);
}
}