You are here

LocaleLocaleLookupTest.php in Drupal 10

File

core/modules/locale/tests/src/Functional/LocaleLocaleLookupTest.php
View source
<?php

namespace Drupal\Tests\locale\Functional;

use Drupal\Component\Gettext\PoItem;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\Tests\BrowserTestBase;

/**
 * Tests LocaleLookup.
 *
 * @group locale
 */
class LocaleLocaleLookupTest extends BrowserTestBase {

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'locale',
    'locale_test',
  ];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();

    // Change the language default object to different values.
    ConfigurableLanguage::createFromLangcode('fr')
      ->save();
    $this
      ->config('system.site')
      ->set('default_langcode', 'fr')
      ->save();
    $this
      ->drupalLogin($this->rootUser);
  }

  /**
   * Tests that there are no circular dependencies.
   */
  public function testCircularDependency() {

    // Ensure that we can enable early_translation_test on a non-english site.
    $this
      ->drupalGet('admin/modules');
    $this
      ->submitForm([
      'modules[early_translation_test][enable]' => TRUE,
    ], 'Install');
    $this
      ->assertSession()
      ->statusCodeEquals(200);
  }

  /**
   * Tests language fallback defaults.
   */
  public function testLanguageFallbackDefaults() {
    $this
      ->drupalGet('');

    // Ensure state of fallback languages persisted by
    // locale_test_language_fallback_candidates_locale_lookup_alter() is empty.
    $this
      ->assertEquals([], \Drupal::state()
      ->get('locale.test_language_fallback_candidates_locale_lookup_alter_candidates'));

    // Make sure there is enough information provided for alter hooks.
    $context = \Drupal::state()
      ->get('locale.test_language_fallback_candidates_locale_lookup_alter_context');
    $this
      ->assertEquals('fr', $context['langcode']);
    $this
      ->assertEquals('locale_lookup', $context['operation']);
  }

  /**
   * Tests old plural style @count[number] fix.
   *
   * @dataProvider providerTestFixOldPluralStyle
   */
  public function testFixOldPluralStyle($translation_value, $expected) {
    $string_storage = \Drupal::service('locale.storage');
    $string = $string_storage
      ->findString([
      'source' => 'Member for',
      'context' => '',
    ]);
    $lid = $string
      ->getId();
    $string_storage
      ->createTranslation([
      'lid' => $lid,
      'language' => 'fr',
      'translation' => $translation_value,
    ])
      ->save();
    _locale_refresh_translations([
      'fr',
    ], [
      $lid,
    ]);

    // Check that 'count[2]' was fixed for render value.
    $this
      ->drupalGet('');
    $this
      ->assertSession()
      ->pageTextContains($expected);

    // Check that 'count[2]' was saved for source value.
    $translation = $string_storage
      ->findTranslation([
      'language' => 'fr',
      'lid' => $lid,
    ])->translation;
    $this
      ->assertSame($translation_value, $translation, 'Source value not changed');
    $this
      ->assertStringContainsString('@count[2]', $translation, 'Source value contains @count[2]');
  }

  /**
   * Provides data for testFixOldPluralStyle().
   *
   * @return array
   *   An array of test data:
   *     - translation value
   *     - expected result
   */
  public function providerTestFixOldPluralStyle() {
    return [
      'non-plural translation' => [
        '@count[2] non-plural test',
        '@count[2] non-plural test',
      ],
      'plural translation' => [
        '@count[2] plural test' . PoItem::DELIMITER,
        '@count plural test',
      ],
    ];
  }

}

Classes

Namesort descending Description
LocaleLocaleLookupTest Tests LocaleLookup.