function LocaleJavascriptTranslationTest::testFileParsing

Same name and namespace in other branches
  1. 7.x modules/locale/locale.test \LocaleJavascriptTranslationTest::testFileParsing()
  2. 8.9.x core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php \Drupal\Tests\locale\Functional\LocaleJavascriptTranslationTest::testFileParsing()
  3. 10 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 29

Class

LocaleJavascriptTranslationTest
Tests parsing js files for translatable strings.

Namespace

Drupal\Tests\locale\Functional

Code

public function testFileParsing() {
    // 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.es6.js, because that is the one that contains a
    //   variety of whitespace styles.
    // - We also test the transpiled locale_test.js as an extra double-check
    //   that JavaScript transpilation doesn't change what
    //   _locale_parse_js_file() finds.
    $files[] = __DIR__ . '/../../locale_test.es6.js';
    $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) {
            $args = [
                '%source' => $str,
                '%context' => $context,
            ];
            // Make sure that the string was found in the file.
            $this->assertTrue(isset($source_strings[$str]), new FormattableMarkup('Found source string: %source', $args));
            // 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.