diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php index 8c59434..eea7671 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php @@ -70,7 +70,10 @@ function setUp() { // Create a translatable test field. $this->field_name = drupal_strtolower($this->randomName() . '_field_name'); - // Create instance in all entity variations. + // Create an untranslatable test field. + $this->untranslatable_field_name = drupal_strtolower($this->randomName() . '_field_name'); + + // Create field instances in all entity variations. foreach (entity_test_entity_types() as $entity_type) { entity_create('field_entity', array( 'name' => $this->field_name, @@ -85,6 +88,19 @@ function setUp() { 'bundle' => $entity_type, ))->save(); $this->instance[$entity_type] = field_read_instance($entity_type, $this->field_name, $entity_type); + + entity_create('field_entity', array( + 'name' => $this->untranslatable_field_name, + 'entity_type' => $entity_type, + 'type' => 'text', + 'cardinality' => 4, + 'translatable' => FALSE, + ))->save(); + entity_create('field_instance', array( + 'field_name' => $this->untranslatable_field_name, + 'entity_type' => $entity_type, + 'bundle' => $entity_type, + ))->save(); } // Create the default languages. @@ -552,24 +568,48 @@ function testFieldDefinitions() { } /** - * Tests field SQL storage. + * Tests that changing entity language does not break field language. */ - function testFieldSqlStorage() { + public function testLanguageChange() { $entity_type = 'entity_test_mul'; - $this->untranslatable_field_name = drupal_strtolower($this->randomName() . '_field_name'); + $controller = $this->entityManager->getStorageController($entity_type); + $langcode = $this->langcodes[0]; - entity_create('field_entity', array( - 'name' => $this->untranslatable_field_name, - 'entity_type' => $entity_type, - 'type' => 'text', - 'cardinality' => 4, - 'translatable' => FALSE, - ))->save(); - entity_create('field_instance', array( - 'field_name' => $this->untranslatable_field_name, - 'entity_type' => $entity_type, - 'bundle' => $entity_type, - ))->save(); + // check that field languages match entity language regardless of field + // translatability. + $values = array( + 'langcode' => $langcode, + $this->field_name => $this->randomName(), + $this->untranslatable_field_name => $this->randomName(), + ); + $entity = $controller->create($values); + foreach (array($this->field_name, $this->untranslatable_field_name) as $field_name) { + $this->assertEqual($entity->get($field_name)->getLangcode(), $langcode, 'Field language works as expected.'); + } + + // Check that field languages keep matching entity language even after + // changing it. + $langcode = $this->langcodes[1]; + $entity->langcode->value = $langcode; + foreach (array($this->field_name, $this->untranslatable_field_name) as $field_name) { + $this->assertEqual($entity->get($field_name)->getLangcode(), $langcode, 'Field language works as expected after changing entity language.'); + } + + // Check that entity translation does not affect the language of original + // field values and untranslatable ones. + $langcode = $this->langcodes[0]; + $entity->addTranslation($this->langcodes[2], array($this->field_name => $this->randomName())); + $entity->langcode->value = $langcode; + foreach (array($this->field_name, $this->untranslatable_field_name) as $field_name) { + $this->assertEqual($entity->get($field_name)->getLangcode(), $langcode, 'Field language works as expected after translating the entity and changing language.'); + } + } + + /** + * Tests field SQL storage. + */ + public function testFieldSqlStorage() { + $entity_type = 'entity_test_mul'; $controller = $this->entityManager->getStorageController($entity_type); $values = array(