function LocaleJavascriptTranslationTest::testFileParsing

Same name and namespace in other branches
  1. 7.x modules/locale/locale.test \LocaleJavascriptTranslationTest::testFileParsing()
  2. 9 core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php \Drupal\Tests\locale\Functional\LocaleJavascriptTranslationTest::testFileParsing()
  3. 8.9.x core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php \Drupal\Tests\locale\Functional\LocaleJavascriptTranslationTest::testFileParsing()
  4. 11.x core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php \Drupal\Tests\locale\Functional\LocaleJavascriptTranslationTest::testFileParsing()

File

core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php, line 30

Class

LocaleJavascriptTranslationTest
Tests parsing js files for translatable strings.

Namespace

Drupal\Tests\locale\Functional

Code

public function testFileParsing() : void {
  // This test is for ensuring that the regular expression in
  // _locale_parse_js_file() finds translatable source strings in all valid
  // JavaScript syntax regardless of the coding style used, especially with
  // respect to optional whitespace, line breaks, etc.
  // - We test locale_test.js, because that is the one that contains a
  //   variety of whitespace styles.
  $files[] = __DIR__ . '/../../locale_test.js';
  foreach ($files as $filename) {
    // Parse the file to look for source strings.
    _locale_parse_js_file($filename);
    // Get all of the source strings that were found.
    $strings = $this->container
      ->get('locale.storage')
      ->getStrings([
      'type' => 'javascript',
      'name' => $filename,
    ]);
    $source_strings = [];
    foreach ($strings as $string) {
      $source_strings[$string->source] = $string->context;
    }
    $etx = PoItem::DELIMITER;
    // List of all strings that should be in the file.
    $test_strings = [
      'Standard Call t' => '',
      'Whitespace Call t' => '',
      'Single Quote t' => '',
      "Single Quote \\'Escaped\\' t" => '',
      'Single Quote Concat strings t' => '',
      'Double Quote t' => '',
      "Double Quote \\\"Escaped\\\" t" => '',
      'Double Quote Concat strings t' => '',
      'Context !key Args t' => 'Context string',
      'Context Unquoted t' => 'Context string unquoted',
      'Context Single Quoted t' => 'Context string single quoted',
      'Context Double Quoted t' => 'Context string double quoted',
      "Standard Call plural{$etx}Standard Call @count plural" => '',
      "Whitespace Call plural{$etx}Whitespace Call @count plural" => '',
      "Single Quote plural{$etx}Single Quote @count plural" => '',
      "Single Quote \\'Escaped\\' plural{$etx}Single Quote \\'Escaped\\' @count plural" => '',
      "Double Quote plural{$etx}Double Quote @count plural" => '',
      "Double Quote \\\"Escaped\\\" plural{$etx}Double Quote \\\"Escaped\\\" @count plural" => '',
      "Context !key Args plural{$etx}Context !key Args @count plural" => 'Context string',
      "Context Unquoted plural{$etx}Context Unquoted @count plural" => 'Context string unquoted',
      "Context Single Quoted plural{$etx}Context Single Quoted @count plural" => 'Context string single quoted',
      "Context Double Quoted plural{$etx}Context Double Quoted @count plural" => 'Context string double quoted',
      "No count argument plural - singular{$etx}No count argument plural - plural" => '',
    ];
    // Assert that all strings were found properly.
    foreach ($test_strings as $str => $context) {
      // Make sure that the string was found in the file.
      $this->assertTrue(isset($source_strings[$str]), "Found source string: {$str}");
      // Make sure that the proper context was matched.
      $this->assertArrayHasKey($str, $source_strings);
      $this->assertSame($context, $source_strings[$str]);
    }
    $this->assertSameSize($test_strings, $source_strings, 'Found correct number of source strings.');
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.