You are here

LocaleConfigSubscriberForeignTest.php in Drupal 8

File

core/modules/locale/tests/src/Kernel/LocaleConfigSubscriberForeignTest.php
View source
<?php

namespace Drupal\Tests\locale\Kernel;

use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Language\Language;
use Drupal\language\Entity\ConfigurableLanguage;

/**
 * Tests default configuration handling with a foreign default language.
 *
 * @group locale
 */
class LocaleConfigSubscriberForeignTest extends LocaleConfigSubscriberTest {

  /**
   * {@inheritdoc}
   */
  public function register(ContainerBuilder $container) {
    parent::register($container);
    $language = Language::$defaultValues;
    $language['id'] = 'hu';
    $language['name'] = 'Hungarian';
    $container
      ->setParameter('language.default_values', $language);
  }

  /**
   * {@inheritdoc}
   */
  protected function setUpLanguages() {
    parent::setUpLanguages();
    ConfigurableLanguage::createFromLangcode('hu')
      ->save();
  }

  /**
   * {@inheritdoc}
   */
  protected function setUpLocale() {
    parent::setUpLocale();
    $this
      ->setUpTranslation('locale_test.translation', 'test', 'English test', 'Hungarian test', 'hu', TRUE);
  }

  /**
   * Tests that the language of default configuration was updated.
   */
  public function testDefaultConfigLanguage() {
    $this
      ->assertEqual('hu', $this->configFactory
      ->getEditable('locale_test.no_translation')
      ->get('langcode'));
    $this
      ->assertEqual('hu', $this->configFactory
      ->getEditable('locale_test.translation')
      ->get('langcode'));
    $this
      ->assertEqual($this->configFactory
      ->getEditable('locale_test.translation')
      ->get('test'), 'Hungarian test');
  }

  /**
   * Tests creating translations of shipped configuration.
   */
  public function testCreateActiveTranslation() {
    $config_name = 'locale_test.no_translation';
    $this
      ->saveLanguageActive($config_name, 'test', 'Test (Hungarian)', 'hu');
    $this
      ->assertTranslation($config_name, 'Test (Hungarian)', 'hu');
  }

  /**
   * Tests importing community translations of shipped configuration.
   */
  public function testLocaleCreateActiveTranslation() {
    $config_name = 'locale_test.no_translation';
    $this
      ->saveLocaleTranslationData($config_name, 'test', 'Test', 'Test (Hungarian)', 'hu', TRUE);
    $this
      ->assertTranslation($config_name, 'Test (Hungarian)', 'hu', FALSE);
  }

  /**
   * Tests updating translations of shipped configuration.
   */
  public function testUpdateActiveTranslation() {
    $config_name = 'locale_test.translation';
    $this
      ->saveLanguageActive($config_name, 'test', 'Updated Hungarian test', 'hu');
    $this
      ->assertTranslation($config_name, 'Updated Hungarian test', 'hu');
  }

  /**
   * Tests updating community translations of shipped configuration.
   */
  public function testLocaleUpdateActiveTranslation() {
    $config_name = 'locale_test.translation';
    $this
      ->saveLocaleTranslationData($config_name, 'test', 'English test', 'Updated Hungarian test', 'hu', TRUE);
    $this
      ->assertTranslation($config_name, 'Updated Hungarian test', 'hu', FALSE);
  }

  /**
   * Tests deleting a translation override.
   */
  public function testDeleteTranslation() {
    $config_name = 'locale_test.translation';
    $this
      ->deleteLanguageOverride($config_name, 'test', 'English test', 'de');

    // The German translation in this case will be forced to the Hungarian
    // source so its not overwritten with locale data later.
    $this
      ->assertTranslation($config_name, 'Hungarian test', 'de');
  }

  /**
   * Tests deleting translations of shipped configuration.
   */
  public function testDeleteActiveTranslation() {
    $config_name = 'locale_test.translation';
    $this->configFactory
      ->getEditable($config_name)
      ->delete();

    // Deleting active configuration should not change the locale translation.
    $this
      ->assertTranslation($config_name, 'Hungarian test', 'hu', FALSE);
  }

  /**
   * Tests deleting community translations of shipped configuration.
   */
  public function testLocaleDeleteActiveTranslation() {
    $config_name = 'locale_test.translation';
    $this
      ->deleteLocaleTranslationData($config_name, 'test', 'English test', 'hu');

    // Deleting the locale translation should not change active config.
    $this
      ->assertEqual($this->configFactory
      ->getEditable($config_name)
      ->get('test'), 'Hungarian test');
  }

  /**
   * Tests that adding English creates a translation override.
   */
  public function testEnglish() {
    $config_name = 'locale_test.translation';
    ConfigurableLanguage::createFromLangcode('en')
      ->save();

    // Adding a language on the UI would normally call updateConfigTranslations.
    $this->localeConfigManager
      ->updateConfigTranslations([
      $config_name,
    ], [
      'en',
    ]);
    $this
      ->assertConfigOverride($config_name, 'test', 'English test', 'en');
    $this->configFactory
      ->getEditable('locale.settings')
      ->set('translate_english', TRUE)
      ->save();
    $this
      ->saveLocaleTranslationData($config_name, 'test', 'English test', 'Updated English test', 'en');
    $this
      ->assertTranslation($config_name, 'Updated English test', 'en', FALSE);
    $this
      ->saveLanguageOverride($config_name, 'test', 'Updated English', 'en');
    $this
      ->assertTranslation($config_name, 'Updated English', 'en');
    $this
      ->deleteLocaleTranslationData($config_name, 'test', 'English test', 'en');
    $this
      ->assertNoConfigOverride($config_name, 'en');
  }

  /**
   * Saves a language override.
   *
   * This will invoke LocaleConfigSubscriber through the event dispatcher. To
   * make sure the configuration was persisted correctly, the configuration
   * value is checked. Because LocaleConfigSubscriber temporarily disables the
   * override state of the configuration factory we check that the correct value
   * is restored afterwards.
   *
   * @param string $config_name
   *   The configuration name.
   * @param string $key
   *   The configuration key.
   * @param string $value
   *   The configuration value to save.
   * @param string $langcode
   *   The language code.
   */
  protected function saveLanguageActive($config_name, $key, $value, $langcode) {
    $this->configFactory
      ->getEditable($config_name)
      ->set($key, $value)
      ->save();
    $this
      ->assertActiveConfig($config_name, $key, $value, $langcode);
  }

}

Classes

Namesort descending Description
LocaleConfigSubscriberForeignTest Tests default configuration handling with a foreign default language.