function TranslationTest::testFieldAvailableLanguages

Ensures that only valid values are returned by field_available_languages().

File

drupal/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php, line 75
Definition of Drupal\field\Tests\TranslationTest.

Class

TranslationTest
Unit test class for the multilanguage fields logic.

Namespace

Drupal\field\Tests

Code

function testFieldAvailableLanguages() {

  // Test 'translatable' fieldable info.
  field_test_entity_info_translatable('test_entity', FALSE);
  $field = clone $this->field;
  $field['field_name'] .= '_untranslatable';

  // Enable field translations for the entity.
  field_test_entity_info_translatable('test_entity', TRUE);

  // Test hook_field_languages() invocation on a translatable field.
  \Drupal::state()
    ->set('field_test.field_available_languages_alter', TRUE);
  $langcodes = field_content_languages();
  $available_langcodes = field_available_languages($this->entity_type, $this->field);
  foreach ($available_langcodes as $delta => $langcode) {
    if ($langcode != 'xx' && $langcode != 'en') {
      $this
        ->assertTrue(in_array($langcode, $langcodes), format_string('%language is an enabled language.', array(
        '%language' => $langcode,
      )));
    }
  }
  $this
    ->assertTrue(in_array('xx', $available_langcodes), format_string('%language was made available.', array(
    '%language' => 'xx',
  )));
  $this
    ->assertFalse(in_array('en', $available_langcodes), format_string('%language was made unavailable.', array(
    '%language' => 'en',
  )));

  // Test field_available_languages() behavior for untranslatable fields.
  $this->field['translatable'] = FALSE;
  field_update_field($this->field);
  $available_langcodes = field_available_languages($this->entity_type, $this->field);
  $this
    ->assertTrue(count($available_langcodes) == 1 && $available_langcodes[0] === Language::LANGCODE_NOT_SPECIFIED, 'For untranslatable fields only Language::LANGCODE_NOT_SPECIFIED is available.');
}