2015-10-08 11:40:12 -07:00
< ? 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 ) {
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' :
2016-01-06 16:31:26 -08:00
// The _core property does not exist in the default config.
if ( $op -> closing [ 0 ] === '_core:' ) {
continue ;
}
2015-10-08 11:40:12 -07:00
foreach ( $op -> closing as $closing ) {
// The UUIDs don't exist in the default config.
2016-06-02 15:56:09 -07:00
if ( strpos ( $closing , 'uuid: ' ) === 0 ) {
2015-10-08 11:40:12 -07:00
continue ;
}
throw new \Exception ( $config_name . ': ' . var_export ( $op , TRUE ));
}
break ;
default :
throw new \Exception ( $config_name . ': ' . var_export ( $op , TRUE ));
break ;
}
}
}
}