You are here

public function LocalePluralFormatTest::testPluralEditDateFormatter in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/locale/src/Tests/LocalePluralFormatTest.php \Drupal\locale\Tests\LocalePluralFormatTest::testPluralEditDateFormatter()

Tests plural editing of DateFormatter strings

File

core/modules/locale/src/Tests/LocalePluralFormatTest.php, line 150
Contains \Drupal\locale\Tests\LocalePluralFormatTest.

Class

LocalePluralFormatTest
Tests plural handling for various languages.

Namespace

Drupal\locale\Tests

Code

public function testPluralEditDateFormatter() {

  // Import some .po files with formulas to set up the environment.
  // These will also add the languages to the system.
  $this
    ->importPoFile($this
    ->getPoFileWithSimplePlural(), array(
    'langcode' => 'fr',
  ));

  // Set French as the site default language.
  $this
    ->config('system.site')
    ->set('default_langcode', 'fr')
    ->save();

  // Visit User Info page before updating translation strings.
  $this
    ->drupalGet('user');

  // Member for time should be translated.
  $this
    ->assertText("seconde", "'Member for' text is translated.");
  $path = 'admin/config/regional/translate/';
  $search = array(
    'langcode' => 'fr',
    // Limit to only translated strings to ensure that database ordering does
    // not break the test.
    'translation' => 'translated',
  );
  $this
    ->drupalPostForm($path, $search, t('Filter'));

  // Plural values for the langcode fr.
  $this
    ->assertText('@count seconde');
  $this
    ->assertText('@count secondes');

  // Inject a plural source string to the database. We need to use a specific
  // langcode here because the language will be English by default and will
  // not save our source string for performance optimization if we do not ask
  // specifically for a language.
  \Drupal::translation()
    ->formatPlural(1, '1 second', '@count seconds', array(), array(
    'langcode' => 'fr',
  ))
    ->render();
  $lid = db_query("SELECT lid FROM {locales_source} WHERE source = :source AND context = ''", array(
    ':source' => "1 second" . LOCALE_PLURAL_DELIMITER . "@count seconds",
  ))
    ->fetchField();

  // Look up editing page for this plural string and check fields.
  $search = array(
    'string' => '1 second',
    'langcode' => 'fr',
  );
  $this
    ->drupalPostForm('admin/config/regional/translate', $search, t('Filter'));

  // Save complete translations for the string in langcode fr.
  $edit = array(
    "strings[{$lid}][translations][0]" => '1 seconde updated',
    "strings[{$lid}][translations][1]" => '@count secondes updated',
  );
  $this
    ->drupalPostForm($path, $edit, t('Save translations'));

  // User interface input for translating seconds should not be duplicated
  $this
    ->assertUniqueText('@count seconds', 'Interface translation input for @count seconds only appears once.');

  // Member for time should be translated.
  $this
    ->drupalGet('user');
  $this
    ->assertText("seconde", "'Member for' text is translated.");
}