This repository has been archived on 2025-01-19. You can view files and clone it, but cannot push or open issues or pull requests.
drupalcampbristol/web/core/tests/Drupal/KernelTests/TestServiceProvider.php
2018-11-23 12:29:20 +00:00

58 lines
1.7 KiB
PHP

<?php
namespace Drupal\KernelTests;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceModifierInterface;
use Drupal\Core\DependencyInjection\ServiceProviderInterface;
use Symfony\Component\DependencyInjection\Definition;
/**
* Provides special routing services for tests.
*/
class TestServiceProvider implements ServiceProviderInterface, ServiceModifierInterface {
/**
* @var \Drupal\simpletest\TestBase
*/
public static $currentTest;
/**
* {@inheritdoc}
*/
public function register(ContainerBuilder $container) {
if (static::$currentTest && method_exists(static::$currentTest, 'containerBuild')) {
static::$currentTest->containerBuild($container);
}
}
/**
* {@inheritdoc}
*/
public function alter(ContainerBuilder $container) {
if (static::$currentTest instanceof KernelTestBase) {
static::addRouteProvider($container);
}
}
/**
* Add the on demand rebuild route provider service.
*
* @param \Drupal\Core\DependencyInjection\ContainerBuilder $container
*/
public static function addRouteProvider(ContainerBuilder $container) {
$route_provider_service_name = 'router.route_provider';
// While $container->get() does a recursive resolve, getDefinition() does
// not, so do it ourselves.
$id = $route_provider_service_name;
while ($container->hasAlias($id)) {
$id = (string) $container->getAlias($id);
}
$definition = $container->getDefinition($id);
$definition->clearTag('needs_destruction');
$container->setDefinition("simpletest.$route_provider_service_name", $definition);
$container->setDefinition($id, new Definition(RouteProvider::class));
}
}