annotate core/tests/Drupal/KernelTests/TestServiceProvider.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents a9cd425dd02b
children
rev   line source
Chris@4 1 <?php
Chris@4 2
Chris@4 3 namespace Drupal\KernelTests;
Chris@4 4
Chris@4 5 use Drupal\Core\DependencyInjection\ContainerBuilder;
Chris@4 6 use Drupal\Core\DependencyInjection\ServiceModifierInterface;
Chris@4 7 use Drupal\Core\DependencyInjection\ServiceProviderInterface;
Chris@4 8 use Symfony\Component\DependencyInjection\Definition;
Chris@4 9
Chris@4 10 /**
Chris@4 11 * Provides special routing services for tests.
Chris@4 12 */
Chris@4 13 class TestServiceProvider implements ServiceProviderInterface, ServiceModifierInterface {
Chris@4 14
Chris@4 15 /**
Chris@4 16 * @var \Drupal\simpletest\TestBase
Chris@4 17 */
Chris@4 18 public static $currentTest;
Chris@4 19
Chris@4 20 /**
Chris@4 21 * {@inheritdoc}
Chris@4 22 */
Chris@4 23 public function register(ContainerBuilder $container) {
Chris@4 24 if (static::$currentTest && method_exists(static::$currentTest, 'containerBuild')) {
Chris@4 25 static::$currentTest->containerBuild($container);
Chris@4 26 }
Chris@4 27 }
Chris@4 28
Chris@4 29 /**
Chris@4 30 * {@inheritdoc}
Chris@4 31 */
Chris@4 32 public function alter(ContainerBuilder $container) {
Chris@4 33 if (static::$currentTest instanceof KernelTestBase) {
Chris@4 34 static::addRouteProvider($container);
Chris@4 35 }
Chris@4 36 }
Chris@4 37
Chris@4 38 /**
Chris@4 39 * Add the on demand rebuild route provider service.
Chris@4 40 *
Chris@4 41 * @param \Drupal\Core\DependencyInjection\ContainerBuilder $container
Chris@4 42 */
Chris@4 43 public static function addRouteProvider(ContainerBuilder $container) {
Chris@4 44 $route_provider_service_name = 'router.route_provider';
Chris@4 45 // While $container->get() does a recursive resolve, getDefinition() does
Chris@4 46 // not, so do it ourselves.
Chris@4 47 $id = $route_provider_service_name;
Chris@4 48 while ($container->hasAlias($id)) {
Chris@4 49 $id = (string) $container->getAlias($id);
Chris@4 50 }
Chris@4 51 $definition = $container->getDefinition($id);
Chris@4 52 $definition->clearTag('needs_destruction');
Chris@4 53 $container->setDefinition("simpletest.$route_provider_service_name", $definition);
Chris@4 54 $container->setDefinition($id, new Definition(RouteProvider::class));
Chris@4 55 }
Chris@4 56
Chris@4 57 }