diff -u b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php --- b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php +++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php @@ -341,9 +341,15 @@ } if (empty($this->dependencies[$type])) { $this->dependencies[$type] = array($name); + if (count($this->dependencies) > 1) { + // Ensure a consistent order of type keys. + ksort($this->dependencies); + } } elseif (!in_array($name, $this->dependencies[$type])) { $this->dependencies[$type][] = $name; + // Ensure a consistent order of dependency names. + sort($this->dependencies[$type], SORT_FLAG_CASE); } return $this; } diff -u b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php --- b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php +++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php @@ -92,7 +92,7 @@ /** * Overrides Drupal\config\ConfigEntityBase::__construct(). */ - public function __construct(array $values, $entity_type) { + public function __construct(array $values, $entity_type = 'breakpoint_group') { parent::__construct($values, $entity_type); } diff -u b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php --- b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php +++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php @@ -80,6 +80,8 @@ $new_display = $display->createCopy('other_view_mode'); $new_display->save(); $new_display = entity_load('entity_view_display', $new_display->id()); + $dependencies = $new_display->calculateDependencies(); + $this->assertEqual(array('entity' => array('entity.view_mode.entity_test.other_view_mode')), $dependencies); $this->assertEqual($new_display->targetEntityType, $display->targetEntityType); $this->assertEqual($new_display->bundle, $display->bundle); $this->assertEqual($new_display->mode, 'other_view_mode'); @@ -189,16 +191,10 @@ $this->assertEqual($formatter->getPluginId(), 'field_test_multiple'); $this->assertFalse(isset($formatter->randomValue)); - // Check that specifying an unknown formatter (e.g. case of a disabled - // module) gets stored as is in the display, but results in the default - // formatter being used. - $display->setComponent($field_name, array( - 'type' => 'unknown_formatter', - )); - $options = $display->getComponent($field_name); - $this->assertEqual($options['type'], 'unknown_formatter'); - $formatter = $display->getRenderer($field_name); - $this->assertEqual($formatter->getPluginId(), $default_formatter); + // Check that the display has dependencies on the field and the module that + // provides the formatter. + $dependencies = $display->calculateDependencies(); + $this->assertEqual(array('entity' => array('field.instance.entity_test.entity_test.test_field'), 'module' => array('field_test')), $dependencies); } /** @@ -288,6 +284,20 @@ $this->assertEqual('article_rename', $new_form_display->bundle); $this->assertEqual('node.article_rename.default', $new_form_display->id); + $expected_dependencies = array( + 'entity' => array('field.instance.node.article_rename.body', 'node.type.article_rename'), + 'module' => array('Core', 'text') + ); + // Check that the display has dependencies on the bundle, fields and the + // modules that provide the formatters. + $dependencies = $new_display->calculateDependencies(); + $this->assertEqual($expected_dependencies, $dependencies); + + // Check that the form display has dependencies on the bundle, fields and + // the modules that provide the formatters. + $dependencies = $new_form_display->calculateDependencies(); + $this->assertEqual($expected_dependencies, $dependencies); + // Delete the bundle. $type->delete(); $display = entity_load('entity_view_display', 'node.article_rename.default'); diff -u b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php --- b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php +++ b/core/modules/field/lib/Drupal/field/Entity/FieldConfig.php @@ -419,7 +419,6 @@ $deleted_fields[$field->uuid] = $config; } } - $state->set('field.field.deleted', $deleted_fields); } @@ -429,6 +428,7 @@ $deleted_fields[$field->uuid] = $config; } } + $state->set('field.field.deleted', $deleted_fields); } diff -u b/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php b/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php --- b/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php +++ b/core/modules/field/lib/Drupal/field/Entity/FieldInstanceConfig.php @@ -416,14 +416,14 @@ $fields_to_delete = array(); foreach ($instances as $instance) { $field = $instance->getField(); - if (!$instance->deleted && empty($instance->noFieldDelete) && !$instance->isUninstalling() && count($field->getBundles()) == 0) { + if (!$instance->deleted && empty($instance->noFieldDelete) && count($field->getBundles()) == 0) { // Key by field UUID to avoid deleting the same field twice. $fields_to_delete[$instance->field_uuid] = $field; } $fields_to_delete = array(); foreach ($instances as $instance) { $field = $instance->getField(); - if (!$instance->deleted && empty($instance->noFieldDelete) && count($field->getBundles()) == 0) { + if (!$instance->deleted && empty($instance->noFieldDelete) && !$instance->isUninstalling() && count($field->getBundles()) == 0) { // Key by field UUID to avoid deleting the same field twice. $fields_to_delete[$instance->field_uuid] = $field; } diff -u b/core/profiles/standard/config/entity.form_display.node.article.default.yml b/core/profiles/standard/config/entity.form_display.node.article.default.yml --- b/core/profiles/standard/config/entity.form_display.node.article.default.yml +++ b/core/profiles/standard/config/entity.form_display.node.article.default.yml @@ -37,10 +37,10 @@ - - node.type.article - field.instance.node.article.body - field.instance.node.article.comment - - field.instance.node.article.field_tags - field.instance.node.article.field_image + - field.instance.node.article.field_tags + - node.type.article module: - - text - comment - - taxonomy - image + - taxonomy + - text diff -u b/core/profiles/standard/config/entity.view_display.node.article.default.yml b/core/profiles/standard/config/entity.view_display.node.article.default.yml --- b/core/profiles/standard/config/entity.view_display.node.article.default.yml +++ b/core/profiles/standard/config/entity.view_display.node.article.default.yml @@ -26,9 +26,9 @@ - - node.type.article - - field.instance.node.article.field_image - field.instance.node.article.body + - field.instance.node.article.field_image - field.instance.node.article.field_tags + - node.type.article module: + - comment - image - - text - taxonomy - - comment + - text diff -u b/core/profiles/standard/config/entity.view_display.node.article.teaser.yml b/core/profiles/standard/config/entity.view_display.node.article.teaser.yml --- b/core/profiles/standard/config/entity.view_display.node.article.teaser.yml +++ b/core/profiles/standard/config/entity.view_display.node.article.teaser.yml @@ -27,9 +27,9 @@ - - node.type.article - - field.instance.node.article.field_image + - entity.view_mode.node.teaser - field.instance.node.article.body + - field.instance.node.article.field_image - field.instance.node.article.field_tags - - entity.view_mode.node.teaser + - node.type.article module: - image - - text - taxonomy + - text diff -u b/core/profiles/standard/config/entity.view_display.user.user.compact.yml b/core/profiles/standard/config/entity.view_display.user.user.compact.yml --- b/core/profiles/standard/config/entity.view_display.user.user.compact.yml +++ b/core/profiles/standard/config/entity.view_display.user.user.compact.yml @@ -17,4 +17,4 @@ - module: - - image entity: - entity.view_mode.user.compact + module: + - image diff -u b/core/profiles/standard/config/rdf.mapping.node.article.yml b/core/profiles/standard/config/rdf.mapping.node.article.yml --- b/core/profiles/standard/config/rdf.mapping.node.article.yml +++ b/core/profiles/standard/config/rdf.mapping.node.article.yml @@ -44,4 +44,4 @@ - module: - - node entity: - node.type.article + module: + - node diff -u b/core/profiles/standard/config/rdf.mapping.node.page.yml b/core/profiles/standard/config/rdf.mapping.node.page.yml --- b/core/profiles/standard/config/rdf.mapping.node.page.yml +++ b/core/profiles/standard/config/rdf.mapping.node.page.yml @@ -35,4 +35,4 @@ - module: - - node entity: - node.type.page + module: + - node diff -u b/core/profiles/standard/config/rdf.mapping.taxonomy_term.tags.yml b/core/profiles/standard/config/rdf.mapping.taxonomy_term.tags.yml --- b/core/profiles/standard/config/rdf.mapping.taxonomy_term.tags.yml +++ b/core/profiles/standard/config/rdf.mapping.taxonomy_term.tags.yml @@ -14,4 +14,4 @@ - module: - - taxonomy entity: - taxonomy.vocabulary.tags + module: + - taxonomy diff -u b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php --- b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php +++ b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityBaseUnitTest.php @@ -28,7 +28,7 @@ protected $entity; /** - * The entity info used for testing.. + * The entity type used for testing. * * @var \Drupal\Core\Entity\EntityTypeInterface|\PHPUnit_Framework_MockObject_MockObject */ only in patch2: unchanged: --- a/core/modules/forum/config/rdf.mapping.node.forum.yml +++ b/core/modules/forum/config/rdf.mapping.node.forum.yml @@ -31,3 +31,8 @@ fieldMappings: callable: 'Drupal\rdf\SchemaOrgDataConverter::interactionCount' arguments: interaction_type: 'UserComments' +dependencies: + entity: + - node.type.forum + module: + - node only in patch2: unchanged: --- a/core/modules/forum/config/rdf.mapping.taxonomy_term.forums.yml +++ b/core/modules/forum/config/rdf.mapping.taxonomy_term.forums.yml @@ -11,3 +11,8 @@ fieldMappings: description: properties: - 'schema:description' +dependencies: + entity: + - taxonomy.vocabulary.forums + module: + - taxonomy only in patch2: unchanged: --- /dev/null +++ b/core/modules/picture/tests/Drupal/picture/Tests/PictureMappingEntityTest.php @@ -0,0 +1,138 @@ + '', + 'name' => '\Drupal\picture\Entity\PictureMapping unit test', + 'group' => 'Picture', + ); + } + + /** + * {@inheritdoc} + */ + public function setUp() { + $this->entityTypeId = $this->randomName(); + $this->provider = $this->randomName(); + $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface'); + $this->entityType->expects($this->any()) + ->method('getProvider') + ->will($this->returnValue($this->provider)); + + $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface'); + $this->entityManager->expects($this->any()) + ->method('getDefinition') + ->with($this->entityTypeId) + ->will($this->returnValue($this->entityType)); + + $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface'); + + $this->breakpointGroupId = $this->randomName(9); + $this->breakpointGroup = $this->getMock('Drupal\breakpoint\Entity\BreakpointGroup', array(), array(array('id' => $this->breakpointGroupId))); + + $this->breakpointGroupStorageController = $this->getMock('\Drupal\Core\Config\Entity\ConfigStorageControllerInterface'); + $this->breakpointGroupStorageController + ->expects($this->any()) + ->method('load') + ->with($this->breakpointGroupId) + ->will($this->returnValue($this->breakpointGroup)); + + $this->entityManager->expects($this->any()) + ->method('getStorageController') + ->will($this->returnValue($this->breakpointGroupStorageController)); + + $container = new ContainerBuilder(); + $container->set('entity.manager', $this->entityManager); + $container->set('uuid', $this->uuid); + \Drupal::setContainer($container); + } + + /** + * @covers ::calculateDependencies + */ + public function testCalculateDependencies() { + $picture_mapping = new PictureMapping(array(), $this->entityTypeId); + // Set the breakpoint group after creating the entity to avoid the calls + // in the constructor. + $picture_mapping->breakpointGroup = $this->breakpointGroupId; + $this->breakpointGroup->expects($this->once()) + ->method('getConfigDependencyName') + ->will($this->returnValue('breakpoint.breakpoint_group.' . $this->breakpointGroupId)); + + $dependencies = $picture_mapping->calculateDependencies(); + $this->assertContains('breakpoint.breakpoint_group.' . $this->breakpointGroupId, $dependencies['entity']); + } + +} only in patch2: unchanged: --- a/core/modules/views/lib/Drupal/views/ViewExecutable.php +++ b/core/modules/views/lib/Drupal/views/ViewExecutable.php @@ -2239,4 +2239,16 @@ public function hasFormElements() { return FALSE; } + /** + * Calculates dependencies for the view. + * + * @see \Drupal\views\Entity\View::calculateDependencies() + * + * @return array + * An array of dependencies grouped by type (module, theme, entity). + */ + public function calculateDependencies() { + return $this->storage->calculateDependencies(); + } + }