function AutowiredInstanceTraitTest::testAutowire

Same name and namespace in other branches
  1. 11.x core/tests/Drupal/Tests/Core/DependencyInjection/AutowiredInstanceTraitTest.php \Drupal\Tests\Core\DependencyInjection\AutowiredInstanceTraitTest::testAutowire()

Tests autowiring services and parameters.

File

core/tests/Drupal/Tests/Core/DependencyInjection/AutowiredInstanceTraitTest.php, line 26

Class

AutowiredInstanceTraitTest
Tests \Drupal\Core\DependencyInjection\AutowiredInstanceTrait.

Namespace

Drupal\Tests\Core\DependencyInjection

Code

public function testAutowire() : void {
  $services = [
    'stdClass' => new \stdClass(),
    'custom.service' => new \stdClass(),
    'setter.service' => new \stdClass(),
  ];
  $parameters = [
    'array.parameter' => [
      'provider1' => 'value1',
    ],
    'string.parameter' => 'string_value',
    'setter.parameter' => 'setter_value',
  ];
  $container = $this->createStub(ContainerInterface::class);
  $container->method('has')
    ->willReturnCallback(fn(string $id): bool => array_key_exists($id, $services));
  $container->method('get')
    ->willReturnCallback(fn(string $id): object => $services[$id]);
  $container->method('hasParameter')
    ->willReturnCallback(fn(string $name): bool => array_key_exists($name, $parameters));
  $container->method('getParameter')
    ->willReturnCallback(fn(string $name): array|string => $parameters[$name]);
  $instance = AutowireTestClass::createInstanceAutowired($container, 'config', 'plugin_id', [
    'definition',
  ]);
  $this->assertSame('config', $instance->configuration);
  $this->assertSame('plugin_id', $instance->pluginId);
  $this->assertSame([
    'definition',
  ], $instance->pluginDefinition);
  $this->assertSame($services['stdClass'], $instance->serviceByType);
  $this->assertSame($services['custom.service'], $instance->serviceById);
  $this->assertSame($services['custom.service'], $instance->serviceByShortId);
  $this->assertSame($parameters['array.parameter'], $instance->arrayParameter);
  $this->assertSame($parameters['string.parameter'], $instance->stringParameter);
  $this->assertNull($instance->nullableService);
  $this->assertNull($instance->nullableParameter);
  $this->assertSame($services['stdClass'], $instance->setterTypedService);
  $this->assertSame($services['setter.service'], $instance->setterNamedService);
  $this->assertSame($parameters['setter.parameter'], $instance->setterParameter);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.