class AutowiredInstanceTraitTest

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

Tests \Drupal\Core\DependencyInjection\AutowiredInstanceTrait.

Attributes

#[CoversClass(AutowiredInstanceTrait::class)] #[Group('DependencyInjection')]

Hierarchy

Expanded class hierarchy of AutowiredInstanceTraitTest

File

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

Namespace

Drupal\Tests\Core\DependencyInjection
View source
class AutowiredInstanceTraitTest extends UnitTestCase {
  
  /**
   * Tests autowiring services and parameters.
   */
  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);
  }
  
  /**
   * Tests exception for missing required service.
   */
  public function testAutowireMissingRequiredService() : void {
    $container = $this->createStub(ContainerInterface::class);
    $container->method('has')
      ->willReturn(FALSE);
    $this->expectException(AutowiringFailedException::class);
    $this->expectExceptionMessage('Cannot autowire service "stdClass": argument "$service" of method "Drupal\\Tests\\Core\\DependencyInjection\\AutowireRequiredServiceTestClass::__construct()". Check that either the argument type is correct or the Autowire attribute is passed a valid identifier. Otherwise configure its value explicitly if possible.');
    AutowireRequiredServiceTestClass::createInstanceAutowired($container);
  }
  
  /**
   * Tests exception for missing required parameter.
   */
  public function testAutowireMissingRequiredParameter() : void {
    $container = $this->createStub(ContainerInterface::class);
    $container->method('hasParameter')
      ->willReturn(FALSE);
    $this->expectException(AutowiringFailedException::class);
    $this->expectExceptionMessage('Cannot autowire parameter "missing.parameter": argument "$parameter" of method "Drupal\\Tests\\Core\\DependencyInjection\\AutowireRequiredParameterTestClass::__construct()". Check that either the argument type is correct or the Autowire attribute is passed a valid identifier. Otherwise configure its value explicitly if possible.');
    AutowireRequiredParameterTestClass::createInstanceAutowired($container);
  }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary Overrides
AutowiredInstanceTraitTest::testAutowire public function Tests autowiring services and parameters.
AutowiredInstanceTraitTest::testAutowireMissingRequiredParameter public function Tests exception for missing required parameter.
AutowiredInstanceTraitTest::testAutowireMissingRequiredService public function Tests exception for missing required service.
DrupalTestCaseTrait::checkErrorHandlerOnTearDown public function Checks the test error handler after test execution. 1
ExpectDeprecationTrait::expectDeprecation Deprecated public function Adds an expected deprecation.
ExpectDeprecationTrait::regularExpressionForFormatDescription private function
RandomGeneratorTrait::getRandomGenerator protected function Gets the random generator for the utility methods.
RandomGeneratorTrait::randomMachineName protected function Generates a unique random string containing letters and numbers.
RandomGeneratorTrait::randomObject public function Generates a random PHP object.
RandomGeneratorTrait::randomString public function Generates a pseudo-random string of ASCII characters of codes 32 to 126.
UnitTestCase::$root protected property The app root.
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed array.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::setDebugDumpHandler public static function Registers the dumper CLI handler when the DebugDump extension is enabled.
UnitTestCase::setUp protected function 363
UnitTestCase::setupMockIterator protected function Set up a traversable class mock to return specific items when iterated.

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