Skip to content

Commit

Permalink
Failing test case for complex near-circular situation + lazy
Browse files Browse the repository at this point in the history
  • Loading branch information
weaverryan authored and nicolas-grekas committed Jul 28, 2019
1 parent 2113e67 commit ee49144
Show file tree
Hide file tree
Showing 5 changed files with 193 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -1423,6 +1423,13 @@ public function testAlmostCircular($visibility)
$this->assertEquals((object) ['bar6' => (object) []], $foo6);

$this->assertInstanceOf(\stdClass::class, $container->get('root'));

$manager3 = $container->get('manager3');
$listener3 = $container->get('listener3');
$this->assertSame($manager3, $listener3->manager, 'Both should identically be the manager3 service');

$listener4 = $container->get('listener4');
$this->assertInstanceOf('stdClass', $listener4);
}

public function provideAlmostCircular()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -842,6 +842,13 @@ public function testAlmostCircular($visibility)
$this->assertEquals((object) ['bar6' => (object) []], $foo6);

$this->assertInstanceOf(\stdClass::class, $container->get('root'));

$manager3 = $container->get('manager3');
$listener3 = $container->get('listener3');
$this->assertSame($manager3, $listener3->manager);

$listener4 = $container->get('listener4');
$this->assertInstanceOf('stdClass', $listener4);
}

public function provideAlmostCircular()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\Tests\Fixtures\FooForCircularWithAddCalls;

Expand Down Expand Up @@ -102,6 +101,35 @@
$container->register('subscriber2', 'stdClass')->setPublic(false)
->addArgument(new Reference('manager2'));

// doctrine-like event system with listener

$container->register('manager3', 'stdClass')
->setLazy(true)
->setPublic(true)
->addArgument(new Reference('connection3'));

$container->register('connection3', 'stdClass')
->setPublic($public)
->setProperty('listener', [new Reference('listener3')]);

$container->register('listener3', 'stdClass')
->setPublic(true)
->setProperty('manager', new Reference('manager3'));

// doctrine-like event system with small differences

$container->register('manager4', 'stdClass')
->setLazy(true)
->addArgument(new Reference('connection4'));

$container->register('connection4', 'stdClass')
->setPublic($public)
->setProperty('listener', [new Reference('listener4')]);

$container->register('listener4', 'stdClass')
->setPublic(true)
->addArgument(new Reference('manager4'));

// private service involved in a loop

$container->register('foo6', 'stdClass')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,13 @@ public function __construct()
'level4' => 'getLevel4Service',
'level5' => 'getLevel5Service',
'level6' => 'getLevel6Service',
'listener3' => 'getListener3Service',
'listener4' => 'getListener4Service',
'logger' => 'getLoggerService',
'manager' => 'getManagerService',
'manager2' => 'getManager2Service',
'manager3' => 'getManager3Service',
'manager4' => 'getManager4Service',
'multiuse1' => 'getMultiuse1Service',
'root' => 'getRootService',
'subscriber' => 'getSubscriberService',
Expand All @@ -53,6 +57,7 @@ public function __construct()
'level4' => true,
'level5' => true,
'level6' => true,
'manager4' => true,
'multiuse1' => true,
];

Expand All @@ -69,6 +74,8 @@ public function getRemovedIds()
'bar6' => true,
'config' => true,
'config2' => true,
'connection3' => true,
'connection4' => true,
'dispatcher' => true,
'dispatcher2' => true,
'foo4' => true,
Expand All @@ -81,6 +88,7 @@ public function getRemovedIds()
'level5' => true,
'level6' => true,
'logger2' => true,
'manager4' => true,
'multiuse1' => true,
'subscriber2' => true,
];
Expand Down Expand Up @@ -272,6 +280,36 @@ protected function getFoobar4Service()
return $instance;
}

/**
* Gets the public 'listener3' shared service.
*
* @return \stdClass
*/
protected function getListener3Service()
{
$this->services['listener3'] = $instance = new \stdClass();

$instance->manager = ${($_ = isset($this->services['manager3']) ? $this->services['manager3'] : $this->getManager3Service()) && false ?: '_'};

return $instance;
}

/**
* Gets the public 'listener4' shared service.
*
* @return \stdClass
*/
protected function getListener4Service()
{
$a = ${($_ = isset($this->services['manager4']) ? $this->services['manager4'] : $this->getManager4Service()) && false ?: '_'};

if (isset($this->services['listener4'])) {
return $this->services['listener4'];
}

return $this->services['listener4'] = new \stdClass($a);
}

/**
* Gets the public 'logger' shared service.
*
Expand Down Expand Up @@ -324,6 +362,19 @@ protected function getManager2Service()
return $this->services['manager2'] = new \stdClass($a);
}

/**
* Gets the public 'manager3' shared service.
*
* @return \stdClass
*/
protected function getManager3Service($lazyLoad = true)
{
$a = new \stdClass();
$a->listener = [0 => ${($_ = isset($this->services['listener3']) ? $this->services['listener3'] : $this->getListener3Service()) && false ?: '_'}];

return $this->services['manager3'] = new \stdClass($a);
}

/**
* Gets the public 'root' shared service.
*
Expand Down Expand Up @@ -430,6 +481,19 @@ protected function getLevel6Service()
return $instance;
}

/**
* Gets the private 'manager4' shared service.
*
* @return \stdClass
*/
protected function getManager4Service($lazyLoad = true)
{
$a = new \stdClass();
$a->listener = [0 => ${($_ = isset($this->services['listener4']) ? $this->services['listener4'] : $this->getListener4Service()) && false ?: '_'}];

return $this->services['manager4'] = new \stdClass($a);
}

/**
* Gets the private 'multiuse1' shared service.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ public function __construct()
'baz6' => 'getBaz6Service',
'connection' => 'getConnectionService',
'connection2' => 'getConnection2Service',
'connection3' => 'getConnection3Service',
'connection4' => 'getConnection4Service',
'dispatcher' => 'getDispatcherService',
'dispatcher2' => 'getDispatcher2Service',
'foo' => 'getFooService',
Expand All @@ -46,9 +48,13 @@ public function __construct()
'level4' => 'getLevel4Service',
'level5' => 'getLevel5Service',
'level6' => 'getLevel6Service',
'listener3' => 'getListener3Service',
'listener4' => 'getListener4Service',
'logger' => 'getLoggerService',
'manager' => 'getManagerService',
'manager2' => 'getManager2Service',
'manager3' => 'getManager3Service',
'manager4' => 'getManager4Service',
'multiuse1' => 'getMultiuse1Service',
'root' => 'getRootService',
'subscriber' => 'getSubscriberService',
Expand All @@ -60,6 +66,7 @@ public function __construct()
'level4' => true,
'level5' => true,
'level6' => true,
'manager4' => true,
'multiuse1' => true,
];

Expand All @@ -81,6 +88,7 @@ public function getRemovedIds()
'level5' => true,
'level6' => true,
'logger2' => true,
'manager4' => true,
'multiuse1' => true,
'subscriber2' => true,
];
Expand Down Expand Up @@ -212,6 +220,34 @@ protected function getConnection2Service()
return $instance;
}

/**
* Gets the public 'connection3' shared service.
*
* @return \stdClass
*/
protected function getConnection3Service()
{
$this->services['connection3'] = $instance = new \stdClass();

$instance->listener = [0 => ${($_ = isset($this->services['listener3']) ? $this->services['listener3'] : $this->getListener3Service()) && false ?: '_'}];

return $instance;
}

/**
* Gets the public 'connection4' shared service.
*
* @return \stdClass
*/
protected function getConnection4Service()
{
$this->services['connection4'] = $instance = new \stdClass();

$instance->listener = [0 => ${($_ = isset($this->services['listener4']) ? $this->services['listener4'] : $this->getListener4Service()) && false ?: '_'}];

return $instance;
}

/**
* Gets the public 'dispatcher' shared service.
*
Expand Down Expand Up @@ -372,6 +408,36 @@ protected function getFoobar4Service()
return $instance;
}

/**
* Gets the public 'listener3' shared service.
*
* @return \stdClass
*/
protected function getListener3Service()
{
$this->services['listener3'] = $instance = new \stdClass();

$instance->manager = ${($_ = isset($this->services['manager3']) ? $this->services['manager3'] : $this->getManager3Service()) && false ?: '_'};

return $instance;
}

/**
* Gets the public 'listener4' shared service.
*
* @return \stdClass
*/
protected function getListener4Service()
{
$a = ${($_ = isset($this->services['manager4']) ? $this->services['manager4'] : $this->getManager4Service()) && false ?: '_'};

if (isset($this->services['listener4'])) {
return $this->services['listener4'];
}

return $this->services['listener4'] = new \stdClass($a);
}

/**
* Gets the public 'logger' shared service.
*
Expand Down Expand Up @@ -424,6 +490,16 @@ protected function getManager2Service()
return $this->services['manager2'] = new \stdClass($a);
}

/**
* Gets the public 'manager3' shared service.
*
* @return \stdClass
*/
protected function getManager3Service($lazyLoad = true)
{
return $this->services['manager3'] = new \stdClass(${($_ = isset($this->services['connection3']) ? $this->services['connection3'] : $this->getConnection3Service()) && false ?: '_'});
}

/**
* Gets the public 'root' shared service.
*
Expand Down Expand Up @@ -530,6 +606,16 @@ protected function getLevel6Service()
return $instance;
}

/**
* Gets the private 'manager4' shared service.
*
* @return \stdClass
*/
protected function getManager4Service($lazyLoad = true)
{
return $this->services['manager4'] = new \stdClass(${($_ = isset($this->services['connection4']) ? $this->services['connection4'] : $this->getConnection4Service()) && false ?: '_'});
}

/**
* Gets the private 'multiuse1' shared service.
*
Expand Down

0 comments on commit ee49144

Please sign in to comment.