You are here

public function LocaleUpdateTest::testEnableCustomLanguage in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/locale/tests/src/Functional/LocaleUpdateTest.php \Drupal\Tests\locale\Functional\LocaleUpdateTest::testEnableCustomLanguage()

Tests automatic translation import when a custom language is added.

File

core/modules/locale/tests/src/Functional/LocaleUpdateTest.php, line 418

Class

LocaleUpdateTest
Tests for updating the interface translations of projects.

Namespace

Drupal\Tests\locale\Functional

Code

public function testEnableCustomLanguage() {

  // Make the hidden test modules look like a normal custom module.
  \Drupal::state()
    ->set('locale.test_system_info_alter', TRUE);

  // Enable a module.
  $edit = [
    'modules[locale_test_translate][enable]' => 'locale_test_translate',
  ];
  $this
    ->drupalGet('admin/modules');
  $this
    ->submitForm($edit, 'Install');

  // Create a custom language with language code 'xx' and a random
  // name.
  $langcode = 'xx';
  $name = $this
    ->randomMachineName(16);
  $edit = [
    'predefined_langcode' => 'custom',
    'langcode' => $langcode,
    'label' => $name,
    'direction' => LanguageInterface::DIRECTION_LTR,
  ];
  $this
    ->drupalGet('admin/config/regional/language/add');
  $this
    ->submitForm($edit, 'Add custom language');

  // Ensure the translation file is automatically imported when the language
  // was added.
  $this
    ->assertSession()
    ->pageTextContains('One translation file imported.');
  $this
    ->assertSession()
    ->pageTextContains('One translation string was skipped because of disallowed or malformed HTML');

  // Ensure the strings were successfully imported.
  $search = [
    'string' => 'lundi',
    'langcode' => $langcode,
    'translation' => 'translated',
  ];
  $this
    ->drupalGet('admin/config/regional/translate');
  $this
    ->submitForm($search, 'Filter');
  $this
    ->assertSession()
    ->pageTextNotContains('No strings available.');

  // Ensure the multiline string was imported.
  $search = [
    'string' => 'Source string for multiline translation',
    'langcode' => $langcode,
    'translation' => 'all',
  ];
  $this
    ->drupalGet('admin/config/regional/translate');
  $this
    ->submitForm($search, 'Filter');
  $this
    ->assertSession()
    ->pageTextContains('Multiline translation string to make sure that import works with it.');

  // Ensure 'Allowed HTML source string' was imported but the translation for
  // 'Another allowed HTML source string' was not because it contains invalid
  // HTML.
  $search = [
    'string' => 'HTML source string',
    'langcode' => $langcode,
    'translation' => 'all',
  ];
  $this
    ->drupalGet('admin/config/regional/translate');
  $this
    ->submitForm($search, 'Filter');
  $this
    ->assertSession()
    ->pageTextContains('Allowed HTML source string');
  $this
    ->assertSession()
    ->pageTextNotContains('Another allowed HTML source string');
}