diff --git a/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php b/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php index 54f1c7c..afda40a 100644 --- a/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php +++ b/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php @@ -200,7 +200,7 @@ public function getExportProperties() { * * This fills in default options for components: * - that are not explicitly known as either "visible" or "hidden" in the - * display. + * display, * - or that are not supposed to be configurable. */ protected function init() { diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php index befce3a..28dc5eb 100644 --- a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php +++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php @@ -249,7 +249,7 @@ public function testBaseFieldComponent() { } // Check that data manually written for fields whose display is not - // configurable are discarded when loading the display. + // configurable is discarded when loading the display. $data['content']['test_display_non_configurable'] = $expected['test_display_non_configurable']; $data['content']['test_display_non_configurable']['weight']++; $config->setData($data)->save(); diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php index 4953002..dc1d93e 100644 --- a/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php +++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php @@ -14,7 +14,7 @@ */ class EntityFormDisplayTest extends DrupalUnitTestBase { - public static $modules = array('entity', 'field', 'entity_test', 'user'); + public static $modules = array('entity', 'field', 'entity_test', 'user', 'text'); public static function getInfo() { return array( @@ -80,18 +80,18 @@ public function testFieldComponent() { $form_display->setComponent($field_name); $field_type_info = \Drupal::service('plugin.manager.field.field_type')->getDefinition($field->type); $default_widget = $field_type_info['default_widget']; - $widget_settings = \Drupal::service('plugin.manager.field.widget')->getDefinition($default_widget); + $widget_settings = \Drupal::service('plugin.manager.field.widget')->getDefaultSettings($default_widget); $expected = array( 'weight' => 0, 'type' => $default_widget, - 'settings' => $widget_settings['settings'], + 'settings' => $widget_settings, ); $this->assertEqual($form_display->getComponent($field_name), $expected); // Check that the getWidget() method returns the correct widget plugin. $widget = $form_display->getRenderer($field_name); $this->assertEqual($widget->getPluginId(), $default_widget); - $this->assertEqual($widget->getSettings(), $widget_settings['settings']); + $this->assertEqual($widget->getSettings(), $widget_settings); // Check that the widget is statically persisted, by assigning an // arbitrary property and reading it back. @@ -120,6 +120,64 @@ public function testFieldComponent() { $this->assertEqual($widget->getPluginId(), $default_widget); } + + /** + * Tests the behavior of a field component for a base field. + */ + public function testBaseFieldComponent() { + $display = entity_create('entity_form_display', array( + 'targetEntityType' => 'entity_test_base_field_display', + 'bundle' => 'entity_test_base_field_display', + 'mode' => 'default', + )); + + // Check that default options are correctly filled in. + $formatter_settings = \Drupal::service('plugin.manager.field.widget')->getDefaultSettings('text_textfield'); + $expected = array( + 'test_no_display' => NULL, + 'test_display_configurable' => array( + 'type' => 'text_textfield', + 'settings' => $formatter_settings, + 'weight' => 10, + ), + 'test_display_non_configurable' => array( + 'type' => 'text_textfield', + 'settings' => $formatter_settings, + 'weight' => 11, + ), + ); + foreach ($expected as $field_name => $options) { + $this->assertEqual($display->getComponent($field_name), $options); + } + + // Check that saving the display only writes data for fields whose display + // is configurable. + $display->save(); + $config = \Drupal::config('entity.form_display.' . $display->id()); + $data = $config->get(); + $this->assertFalse(isset($data['content']['test_no_display'])); + $this->assertFalse(isset($data['hidden']['test_no_display'])); + $this->assertEqual($data['content']['test_display_configurable'], $expected['test_display_configurable']); + $this->assertFalse(isset($data['content']['test_display_non_configurable'])); + $this->assertFalse(isset($data['hidden']['test_display_non_configurable'])); + + // Check that defaults are correctly filled when loading the display. + $display = entity_load('entity_form_display', $display->id()); + foreach ($expected as $field_name => $options) { + $this->assertEqual($display->getComponent($field_name), $options); + } + + // Check that data manually written for fields whose display is not + // configurable is discarded when loading the display. + $data['content']['test_display_non_configurable'] = $expected['test_display_non_configurable']; + $data['content']['test_display_non_configurable']['weight']++; + $config->setData($data)->save(); + $display = entity_load('entity_form_display', $display->id()); + foreach ($expected as $field_name => $options) { + $this->assertEqual($display->getComponent($field_name), $options); + } + } + /** * Tests deleting field instance. */ diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestBaseFieldDisplay.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestBaseFieldDisplay.php index 8f60bfa..8134acf 100644 --- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestBaseFieldDisplay.php +++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestBaseFieldDisplay.php @@ -10,7 +10,7 @@ use Drupal\Core\Field\FieldDefinition; /** - * Defines the test entity class. + * Defines a test entity class for base fields display. * * @EntityType( * id = "entity_test_base_field_display", @@ -72,7 +72,6 @@ public static function baseFieldDefinitions($entity_type) { 'weight' => 11, )); - return $fields; }