trait AssertConfigTrait
Same name in other branches
- 9 core/tests/Drupal/KernelTests/AssertConfigTrait.php \Drupal\KernelTests\AssertConfigTrait
- 10 core/tests/Drupal/KernelTests/AssertConfigTrait.php \Drupal\KernelTests\AssertConfigTrait
- 11.x core/tests/Drupal/KernelTests/AssertConfigTrait.php \Drupal\KernelTests\AssertConfigTrait
Trait to help with diffing config.
Hierarchy
- trait \Drupal\KernelTests\AssertConfigTrait
5 files declare their use of AssertConfigTrait
- ConfigAfterInstallerTestBase.php in core/
modules/ system/ src/ Tests/ Installer/ ConfigAfterInstallerTestBase.php - ConfigAfterInstallerTestBase.php in core/
tests/ Drupal/ FunctionalTests/ Installer/ ConfigAfterInstallerTestBase.php - DefaultConfigTest.php in core/
tests/ Drupal/ KernelTests/ Config/ DefaultConfigTest.php - DemoUmamiProfileTest.php in core/
profiles/ demo_umami/ tests/ src/ Functional/ DemoUmamiProfileTest.php - MinimalInstallerTest.php in core/
tests/ Drupal/ FunctionalTests/ Installer/ MinimalInstallerTest.php
File
-
core/
tests/ Drupal/ KernelTests/ AssertConfigTrait.php, line 10
Namespace
Drupal\KernelTestsView source
trait AssertConfigTrait {
/**
* Ensures that a specific config diff does not contain unwanted changes.
*
* @param \Drupal\Component\Diff\Diff $result
* The diff result for the passed in config name.
* @param string $config_name
* The config name to check.
* @param array $skipped_config
* An array of skipped config, keyed by string. If the value is TRUE, the
* entire file will be ignored, otherwise it's an array of strings which are
* ignored.
*
* @throws \Exception
* Thrown when a configuration is different.
*/
protected function assertConfigDiff(Diff $result, $config_name, array $skipped_config) {
foreach ($result->getEdits() as $op) {
switch (get_class($op)) {
case 'Drupal\\Component\\Diff\\Engine\\DiffOpCopy':
// Nothing to do, a copy is what we expect.
break;
case 'Drupal\\Component\\Diff\\Engine\\DiffOpDelete':
case 'Drupal\\Component\\Diff\\Engine\\DiffOpChange':
// It is not part of the skipped config, so we can directly throw the
// exception.
if (!in_array($config_name, array_keys($skipped_config))) {
throw new \Exception($config_name . ': ' . var_export($op, TRUE));
}
// Allow to skip entire config files.
if ($skipped_config[$config_name] === TRUE) {
break;
}
// Allow to skip some specific lines of imported config files.
// Ensure that the only changed lines are the ones we marked as
// skipped.
$all_skipped = TRUE;
$changes = get_class($op) == 'Drupal\\Component\\Diff\\Engine\\DiffOpDelete' ? $op->orig : $op->closing;
foreach ($changes as $closing) {
// Skip some of the changes, as they are caused by module install
// code.
$found = FALSE;
if (!empty($skipped_config[$config_name])) {
foreach ($skipped_config[$config_name] as $line) {
if (strpos($closing, $line) !== FALSE) {
$found = TRUE;
break;
}
}
}
$all_skipped = $all_skipped && $found;
}
if (!$all_skipped) {
throw new \Exception($config_name . ': ' . var_export($op, TRUE));
}
break;
case 'Drupal\\Component\\Diff\\Engine\\DiffOpAdd':
// The _core property does not exist in the default config.
if ($op->closing[0] === '_core:') {
break;
}
foreach ($op->closing as $closing) {
// The UUIDs don't exist in the default config.
if (strpos($closing, 'uuid: ') === 0) {
break;
}
throw new \Exception($config_name . ': ' . var_export($op, TRUE));
}
break;
default:
throw new \Exception($config_name . ': ' . var_export($op, TRUE));
}
}
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
AssertConfigTrait::assertConfigDiff | protected | function | Ensures that a specific config diff does not contain unwanted changes. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.