| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | <?phpnamespace 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) {            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':          // The _core property does not exist in the default config.          if ($op->closing[0] === '_core:') {            continue;          }          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));      }    }  }}
 |