8000 [DI] fix GraphvizDumper ignoring inline definitions · symfony/symfony@ebe6265 · GitHub
[go: up one dir, main page]

Skip to content

Commit ebe6265

Browse files
[DI] fix GraphvizDumper ignoring inline definitions
1 parent 3ed98de commit ebe6265

File tree

3 files changed

+38
-6
lines changed
  • src/Symfony/Component/DependencyInjection

3 files changed

+38
-6
lines changed

src/Symfony/Component/DependencyInjection/Dumper/GraphvizDumper.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ private function findEdges($id, array $arguments, $required, $name, $lazy = fals
149149
$edges[] = array('name' => $name, 'required' => $required, 'to' => $argument, 'lazy' => $lazyEdge);
150150
} elseif ($argument instanceof ArgumentInterface) {
151151
$edges = array_merge($edges, $this->findEdges($id, $argument->getValues(), $required, $name, true));
152+
} elseif ($argument instanceof Definition) {
153+
$edges = array_merge($edges,
154+
$this->findEdges($id, $argument->getArguments(), $required, ''),
155+
$this->findEdges($id, $argument->getProperties(), false, '')
156+
);
157+
foreach ($argument->getMethodCalls() as $call) {
158+
$edges = array_merge($edges, $this->findEdges($id, $call[1], false, $call[0].'()'));
159+
}
152160
} elseif (\is_array($argument)) {
153161
$edges = array_merge($edges, $this->findEdges($id, $argument, $required, $name, $lazy));
154162
}

src/Symfony/Component/DependencyInjection/Tests/Dumper/GraphvizDumperTest.php

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\DependencyInjection\ContainerBuilder;
16+
use Symfony\Component\DependencyInjection\Definition;
1617
use Symfony\Component\DependencyInjection\Dumper\GraphvizDumper;
18+
use Symfony\Component\DependencyInjection\Reference;
1719

1820
class GraphvizDumperTest extends TestCase
1921
{
@@ -32,11 +34,11 @@ public function testDump()
3234

3335
$container = include self::$fixturesPath.'/containers/container9.php';
3436
$dumper = new GraphvizDumper($container);
35-
$this->assertEquals(str_replace('%path%', __DIR__, file_get_contents(self::$fixturesPath.'/graphviz/services9.dot')), $dumper->dump(), '->dump() dumps services');
37+
$this->assertStringEqualsFile(self::$fixturesPath.'/graphviz/services9.dot', $dumper->dump(), '->dump() dumps services');
3638

3739
$container = include self::$fixturesPath.'/containers/container10.php';
3840
$dumper = new GraphvizDumper($container);
39-
$this->assertEquals(str_replace('%path%', __DIR__, file_get_contents(self::$fixturesPath.'/graphviz/services10.dot')), $dumper->dump(), '->dump() dumps services');
41+
$this->assertStringEqualsFile(self::$fixturesPath.'/graphviz/services10.dot', $dumper->dump(), '->dump() dumps services');
4042

4143
$container = include self::$fixturesPath.'/containers/container10.php';
4244
$dumper = new GraphvizDumper($container);
@@ -47,28 +49,40 @@ public function testDump()
4749
'node.instance' => array('fillcolor' => 'green', 'style' => 'empty'),
4850
'node.definition' => array('fillcolor' => 'grey'),
4951
'node.missing' => array('fillcolor' => 'red', 'style' => 'empty'),
50-
)), str_replace('%path%', __DIR__, file_get_contents(self::$fixturesPath.'/graphviz/services10-1.dot')), '->dump() dumps services');
52+
)), file_get_contents(self::$fixturesPath.'/graphviz/services10-1.dot'), '->dump() dumps services');
5153
}
5254

5355
public function testDumpWithFrozenContainer()
5456
{
5557
$container = include self::$fixturesPath.'/containers/container13.php';
5658
$dumper = new GraphvizDumper($container);
57-
$this->assertEquals(str_replace('%path%', __DIR__, file_get_contents(self::$fixturesPath.'/graphviz/services13.dot')), $dumper->dump(), '->dump() dumps services');
59+
$this->assertStringEqualsFile(self::$fixturesPath.'/graphviz/services13.dot', $dumper->dump(), '->dump() dumps services');
5860
}
5961

6062
public function testDumpWithFrozenCustomClassContainer()
6163
{
6264
$container = include self::$fixturesPath.'/containers/container14.php';
6365
$dumper = new GraphvizDumper($container);
64-
$this->assertEquals(str_replace('%path%', __DIR__, file_get_contents(self::$fixturesPath.'/graphviz/services14.dot')), $dumper->dump(), '->dump() dumps services');
66+
$this->assertStringEqualsFile(self::$fixturesPath.'/graphviz/services14.dot', $dumper->dump(), '->dump() dumps services');
6567
}
6668

6769
public function testDumpWithUnresolvedParameter()
6870
{
6971
$container = include self::$fixturesPath.'/containers/container17.php';
7072
$dumper = new GraphvizDumper($container);
7173

72-
$this->assertEquals(str_replace('%path%', __DIR__, file_get_contents(self::$fixturesPath.'/graphviz/services17.dot')), $dumper->dump(), '->dump() dumps services');
74+
$this->assertStringEqualsFile(self::$fixturesPath.'/graphviz/services17.dot', $dumper->dump(), '->dump() dumps services');
75+
}
76+
77+
public function testDumpWithInlineDefinition()
78+
{
79+
$container = new ContainerBuilder();
80+
$container->register('foo', 'stdClass')->addArgument(
81+
(new Definition('stdClass'))->addArgument(new Reference('bar'))
82+
);
83+
$container->register('bar', 'stdClass');
84+
$dumper = new GraphvizDumper($container);
85+
86+
$this->assertStringEqualsFile(self::$fixturesPath.'/graphviz/services_inline.dot', $dumper->dump(), '->dump() dumps nested references');
7387
}
7488
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
digraph sc {
2+
ratio="compress"
3+
node [fontsize="11" fontname="Arial" shape="record"];
4+
edge [fontsize="9" fontname="Arial" color="grey" arrowhead="open" arrowsize="0.5"];
5+
6+
node_service_container [label="service_container (Psr\Container\ContainerInterface, Symfony\Component\DependencyInjection\ContainerInterface)\nSymfony\\Component\\DependencyInjection\\ContainerInterface\n", shape=record, fillcolor="#eeeeee", style="filled"];
7+
node_foo [label="foo\nstdClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
8+
node_bar [label="bar\nstdClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
9+
node_foo -> node_bar [label="" style="filled"];
10+
}

0 commit comments

Comments
 (0)
0