Chris@0: ['path: '], Chris@0: 'syslog.settings' => ['facility: '], Chris@0: 'simpletest.settings' => TRUE, Chris@0: ]; Chris@0: Chris@0: /** Chris@0: * Tests if installed config is equal to the exported config. Chris@0: * Chris@0: * @dataProvider coreModuleListDataProvider Chris@0: */ Chris@0: public function testModuleConfig($module) { Chris@0: // System and user are required in order to be able to install some of the Chris@0: // other modules. Therefore they are put into static::$modules, which though Chris@0: // doesn't install config files, so import those config files explicitly. Chris@0: switch ($module) { Chris@0: case 'system': Chris@0: case 'user': Chris@0: $this->installConfig([$module]); Chris@0: break; Chris@0: } Chris@0: Chris@0: $module_path = drupal_get_path('module', $module) . '/'; Chris@0: Chris@0: /** @var \Drupal\Core\Extension\ModuleInstallerInterface $module_installer */ Chris@0: $module_installer = $this->container->get('module_installer'); Chris@0: Chris@0: // Work out any additional modules and themes that need installing to create Chris@0: // an optional config. Chris@0: $optional_config_storage = new FileStorage($module_path . InstallStorage::CONFIG_OPTIONAL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION); Chris@0: $modules_to_install = [$module]; Chris@0: $themes_to_install = []; Chris@0: foreach ($optional_config_storage->listAll() as $config_name) { Chris@0: $data = $optional_config_storage->read($config_name); Chris@0: if (isset($data['dependencies']['module'])) { Chris@0: $modules_to_install = array_merge($modules_to_install, $data['dependencies']['module']); Chris@0: } Chris@0: if (isset($data['dependencies']['theme'])) { Chris@0: $themes_to_install = array_merge($themes_to_install, $data['dependencies']['theme']); Chris@0: } Chris@0: } Chris@0: $module_installer->install(array_unique($modules_to_install)); Chris@0: $this->container->get('theme_installer')->install($themes_to_install); Chris@0: Chris@0: // Test configuration in the module's config/install directory. Chris@0: $module_config_storage = new FileStorage($module_path . InstallStorage::CONFIG_INSTALL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION); Chris@0: $this->doTestsOnConfigStorage($module_config_storage); Chris@0: Chris@0: // Test configuration in the module's config/optional directory. Chris@0: $this->doTestsOnConfigStorage($optional_config_storage); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests that default config matches the installed config. Chris@0: * Chris@0: * @param \Drupal\Core\Config\StorageInterface $default_config_storage Chris@0: * The default config storage to test. Chris@0: */ Chris@0: protected function doTestsOnConfigStorage(StorageInterface $default_config_storage) { Chris@0: /** @var \Drupal\Core\Config\ConfigManagerInterface $config_manager */ Chris@0: $config_manager = $this->container->get('config.manager'); Chris@0: Chris@0: // Just connect directly to the config table so we don't need to worry about Chris@0: // the cache layer. Chris@0: $active_config_storage = $this->container->get('config.storage'); Chris@0: Chris@0: foreach ($default_config_storage->listAll() as $config_name) { Chris@0: if ($active_config_storage->exists($config_name)) { Chris@0: // If it is a config entity re-save it. This ensures that any Chris@0: // recalculation of dependencies does not cause config change. Chris@0: if ($entity_type = $config_manager->getEntityTypeIdByName($config_name)) { Chris@0: $entity_storage = $config_manager Chris@18: ->getEntityTypeManager() Chris@0: ->getStorage($entity_type); Chris@0: $id = $entity_storage->getIDFromConfigName($config_name, $entity_storage->getEntityType() Chris@0: ->getConfigPrefix()); Chris@0: $entity_storage->load($id)->calculateDependencies()->save(); Chris@0: } Chris@0: $result = $config_manager->diff($default_config_storage, $active_config_storage, $config_name); Chris@0: $this->assertConfigDiff($result, $config_name, static::$skippedConfig); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: }