public function ContainerBuilderTest::testSynchronizedServiceWithScopes

File

drupal/core/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php, line 715

Class

ContainerBuilderTest

Namespace

Symfony\Component\DependencyInjection\Tests

Code

public function testSynchronizedServiceWithScopes() {
  $container = new ContainerBuilder();
  $container
    ->addScope(new Scope('foo'));
  $container
    ->register('baz', 'BazClass')
    ->setSynthetic(true)
    ->setSynchronized(true)
    ->setScope('foo');
  $container
    ->register('bar', 'BarClass')
    ->addMethodCall('setBaz', array(
    new Reference('baz', ContainerInterface::NULL_ON_INVALID_REFERENCE, false),
  ));
  $container
    ->compile();
  $container
    ->enterScope('foo');
  $container
    ->set('baz', $outerBaz = new \BazClass(), 'foo');
  $this
    ->assertSame($outerBaz, $container
    ->get('bar')
    ->getBaz());
  $container
    ->enterScope('foo');
  $container
    ->set('baz', $innerBaz = new \BazClass(), 'foo');
  $this
    ->assertSame($innerBaz, $container
    ->get('bar')
    ->getBaz());
  $container
    ->leaveScope('foo');
  $this
    ->assertNotSame($innerBaz, $container
    ->get('bar')
    ->getBaz());
  $this
    ->assertSame($outerBaz, $container
    ->get('bar')
    ->getBaz());
  $container
    ->leaveScope('foo');
}