public function DrupalKernelTest::testCompileDIC in Drupal 9
Same name and namespace in other branches
- 8 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 78
Class
- DrupalKernelTest
- Tests DIC compilation to disk.
Namespace
Drupal\KernelTests\Core\DrupalKernelCode
public function testCompileDIC() {
// @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);
}