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