public function LocaleJavascriptTranslationTest::testLocaleTranslationJsDependencies in Drupal 10
Same name and namespace in other branches
- 8 core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php \Drupal\Tests\locale\Functional\LocaleJavascriptTranslationTest::testLocaleTranslationJsDependencies()
 - 9 core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php \Drupal\Tests\locale\Functional\LocaleJavascriptTranslationTest::testLocaleTranslationJsDependencies()
 
Assert translations JS is added before drupal.js, because it depends on it.
File
- core/
modules/ locale/ tests/ src/ Functional/ LocaleJavascriptTranslationTest.php, line 117  
Class
- LocaleJavascriptTranslationTest
 - Tests parsing js files for translatable strings.
 
Namespace
Drupal\Tests\locale\FunctionalCode
public function testLocaleTranslationJsDependencies() {
  // User to add and remove language.
  $admin_user = $this
    ->drupalCreateUser([
    'administer languages',
    'access administration pages',
    'translate interface',
  ]);
  // Add custom language.
  $this
    ->drupalLogin($admin_user);
  // Code for the language.
  $langcode = 'es';
  // The English name for the language.
  $name = $this
    ->randomMachineName(16);
  // The domain prefix.
  $prefix = $langcode;
  $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');
  // Set path prefix.
  $edit = [
    "prefix[{$langcode}]" => $prefix,
  ];
  $this
    ->drupalGet('admin/config/regional/language/detection/url');
  $this
    ->submitForm($edit, 'Save configuration');
  // This forces locale.admin.js string sources to be imported, which contains
  // the next translation.
  $this
    ->drupalGet($prefix . '/admin/config/regional/translate');
  // Translate a string in locale.admin.js to our new language.
  $strings = \Drupal::service('locale.storage')
    ->getStrings([
    'source' => 'Show description',
    'type' => 'javascript',
    'name' => 'core/modules/locale/locale.admin.js',
  ]);
  $string = $strings[0];
  $this
    ->submitForm([
    'string' => 'Show description',
  ], 'Filter');
  $edit = [
    'strings[' . $string->lid . '][translations][0]' => 'Mostrar descripcion',
  ];
  $this
    ->submitForm($edit, 'Save translations');
  // Calculate the filename of the JS including the translations.
  $js_translation_files = \Drupal::state()
    ->get('locale.translation.javascript');
  $js_filename = $prefix . '_' . $js_translation_files[$prefix] . '.js';
  $content = $this
    ->getSession()
    ->getPage()
    ->getContent();
  $this
    ->assertSession()
    ->responseContains('core/misc/drupal.js');
  $this
    ->assertSession()
    ->responseContains($js_filename);
  // Assert translations JS is included before drupal.js.
  $this
    ->assertLessThan(strpos($content, 'core/misc/drupal.js'), strpos($content, $js_filename));
}