123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- namespace Drupal\KernelTests;
- use Drupal\Component\Diff\Diff;
- /**
- * Trait to help with diffing config.
- */
- 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));
- }
- }
- }
- }
|