protected function AssertConfigTrait::assertConfigDiff in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/tests/Drupal/KernelTests/AssertConfigTrait.php \Drupal\KernelTests\AssertConfigTrait::assertConfigDiff()
Ensures that a specific config diff does not contain unwanted changes.
Parameters
\Drupal\Component\Diff\Diff $result: The diff result for the passed in config name.
string $config_name: The config name to check.
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.
2 calls to AssertConfigTrait::assertConfigDiff()
- ConfigAfterInstallerTestBase::assertInstalledConfig in core/
modules/ system/ src/ Tests/ Installer/ ConfigAfterInstallerTestBase.php - Ensures that all the installed config looks like the exported one.
- DefaultConfigTest::testModuleConfig in core/
tests/ Drupal/ KernelTests/ Config/ DefaultConfigTest.php - Tests if installed config is equal to the exported config.
File
- core/
tests/ Drupal/ KernelTests/ AssertConfigTrait.php, line 32 - Contains \Drupal\KernelTests\AssertConfigTrait.
Class
- AssertConfigTrait
- Trait to help with diffing config.
Namespace
Drupal\KernelTestsCode
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) {
continue;
}
// 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':
foreach ($op->closing as $closing) {
// The UUIDs don't exist in the default config.
if (strpos($closing, 'uuid: ') === 0) {
continue;
}
throw new \Exception($config_name . ': ' . var_export($op, TRUE));
}
break;
default:
throw new \Exception($config_name . ': ' . var_export($op, TRUE));
break;
}
}
}