function DrupalKernelTest::testCompileDIC

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelTest.php \Drupal\KernelTests\Core\DrupalKernel\DrupalKernelTest::testCompileDIC()
  2. 8.9.x core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelTest.php \Drupal\KernelTests\Core\DrupalKernel\DrupalKernelTest::testCompileDIC()
  3. 11.x core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelTest.php \Drupal\KernelTests\Core\DrupalKernel\DrupalKernelTest::testCompileDIC()

Tests DIC compilation.

File

core/tests/Drupal/KernelTests/Core/DrupalKernel/DrupalKernelTest.php, line 64

Class

DrupalKernelTest
Tests DIC compilation to disk.

Namespace

Drupal\KernelTests\Core\DrupalKernel

Code

public function testCompileDIC() : void {
  // @todo Write a memory based storage backend for testing.
  $modules_enabled = [
    'system' => 'system',
    'user' => 'user',
  ];
  $request = Request::createFromGlobals();
  $this->getTestKernel($request, $modules_enabled);
  // Instantiate it a second time and we should get the compiled Container
  // class.
  $kernel = $this->getTestKernel($request);
  $container = $kernel->getContainer();
  $refClass = new \ReflectionClass($container);
  $is_compiled_container = !$refClass->isSubclassOf('Symfony\\Component\\DependencyInjection\\ContainerBuilder');
  $this->assertTrue($is_compiled_container);
  // Verify that the list of modules is the same for the initial and the
  // compiled container.
  $module_list = array_keys($container->get('module_handler')
    ->getModuleList());
  $this->assertEquals(array_values($modules_enabled), $module_list);
  // Get the container another time, simulating a "production" environment.
  $container = $this->getTestKernel($request, NULL)
    ->getContainer();
  $refClass = new \ReflectionClass($container);
  $is_compiled_container = !$refClass->isSubclassOf('Symfony\\Component\\DependencyInjection\\ContainerBuilder');
  $this->assertTrue($is_compiled_container);
  // Verify that the list of modules is the same for the initial and the
  // compiled container.
  $module_list = array_keys($container->get('module_handler')
    ->getModuleList());
  $this->assertEquals(array_values($modules_enabled), $module_list);
  // Test that our synthetic services are there.
  $class_loader = $container->get('class_loader');
  $refClass = new \ReflectionClass($class_loader);
  $this->assertTrue($refClass->hasMethod('loadClass'), 'Container has a class loader');
  // We make this assertion here purely to show that the new container below
  // is functioning correctly, i.e. we get a brand new ContainerBuilder
  // which has the required new services, after changing the list of enabled
  // modules.
  $this->assertFalse($container->has('service_provider_test_class'));
  // Add another module so that we can test that the new module's bundle is
  // registered to the new container.
  $modules_enabled['service_provider_test'] = 'service_provider_test';
  $this->getTestKernel($request, $modules_enabled);
  // Instantiate it a second time and we should not get a ContainerBuilder
  // class because we are loading the container definition from cache.
  $kernel = $this->getTestKernel($request, $modules_enabled);
  $container = $kernel->getContainer();
  $refClass = new \ReflectionClass($container);
  $is_container_builder = $refClass->isSubclassOf('Symfony\\Component\\DependencyInjection\\ContainerBuilder');
  $this->assertFalse($is_container_builder, 'Container is not a builder');
  // Assert that the new module's bundle was registered to the new container.
  $this->assertTrue($container->has('service_provider_test_class'), 'Container has test service');
  // Test that our synthetic services are there.
  $class_loader = $container->get('class_loader');
  $refClass = new \ReflectionClass($class_loader);
  $this->assertTrue($refClass->hasMethod('loadClass'), 'Container has a class loader');
  // Check that the location of the new module is registered.
  $modules = $container->getParameter('container.modules');
  $module_extension_list = $container->get('extension.list.module');
  $this->assertEquals([
    'type' => 'module',
    'pathname' => $module_extension_list->getPathname('service_provider_test'),
    'filename' => NULL,
  ], $modules['service_provider_test']);
  // Check that the container itself is not among the persist IDs because it
  // does not make sense to persist the container itself.
  $persist_ids = $container->getParameter('persist_ids');
  $this->assertNotContains('service_container', $persist_ids);
}

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