function ParamConverterManagerTest::testLazyInstantiation

Same name and namespace in other branches
  1. 11.x core/tests/Drupal/Tests/Core/ParamConverter/ParamConverterManagerTest.php \Drupal\Tests\Core\ParamConverter\ParamConverterManagerTest::testLazyInstantiation()

Tests that converters are lazily instantiated.

File

core/tests/Drupal/Tests/Core/ParamConverter/ParamConverterManagerTest.php, line 150

Class

ParamConverterManagerTest
Tests Drupal\Core\ParamConverter\ParamConverterManager.

Namespace

Drupal\Tests\Core\ParamConverter

Code

public function testLazyInstantiation() : void {
  $route = new Route('/test/{id}');
  $converter = $this->createMock('Drupal\\Core\\ParamConverter\\ParamConverterInterface');
  $converter->expects($this->exactly(2))
    ->method('convert')
    ->with(1, $this->isArray(), 'id', $this->isArray())
    ->willReturn('converted_value');
  $instantiated = FALSE;
  $manager = new ParamConverterManager(new ServiceLocator([
    'converter1' => fn() => $converter,
    'converter2' => function () use (&$instantiated, $converter) {
      $instantiated = TRUE;
      return $converter;
    },
  ]));
  $defaults = [
    RouteObjectInterface::ROUTE_OBJECT => $route,
    'id' => 1,
  ];
  $route->setOption('parameters', [
    'id' => [
      'converter' => 'converter1',
    ],
  ]);
  $result = $manager->convert($defaults);
  $this->assertEquals('converted_value', $result['id']);
  $this->assertFalse($instantiated);
  $route->setOption('parameters', [
    'id' => [
      'converter' => 'converter2',
    ],
  ]);
  $manager->convert($defaults);
  $this->assertTrue($instantiated);
}

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