View source
<?php
namespace Drupal\config_translation\Tests;
use Drupal\Component\Serialization\Json;
use Drupal\Component\Utility\SafeMarkup;
use Drupal\Component\Utility\Unicode;
use Drupal\Core\Language\Language;
use Drupal\Core\Language\LanguageInterface;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\simpletest\WebTestBase;
class ConfigTranslationUiTest extends WebTestBase {
public static $modules = [
'block',
'config_translation',
'config_translation_test',
'contact',
'contact_test',
'contextual',
'entity_test',
'field_test',
'field_ui',
'filter',
'filter_test',
'node',
'views',
'views_ui',
];
protected $langcodes = array(
'fr',
'ta',
);
protected $adminUser;
protected $translatorUser;
protected $localeStorage;
protected function setUp() {
parent::setUp();
$translator_permissions = [
'translate configuration',
];
$filter_test_format = entity_load('filter_format', 'filter_test');
$filtered_html_format = entity_load('filter_format', 'filtered_html');
$full_html_format = entity_load('filter_format', 'full_html');
$admin_permissions = array_merge($translator_permissions, [
'administer languages',
'administer site configuration',
'link to any page',
'administer contact forms',
'administer filters',
$filtered_html_format
->getPermissionName(),
$full_html_format
->getPermissionName(),
$filter_test_format
->getPermissionName(),
'access site-wide contact form',
'access contextual links',
'administer views',
'administer account settings',
'administer themes',
'bypass node access',
'administer content types',
'translate interface',
]);
$this->translatorUser = $this
->drupalCreateUser($translator_permissions);
$this->adminUser = $this
->drupalCreateUser($admin_permissions);
foreach ($this->langcodes as $langcode) {
ConfigurableLanguage::createFromLangcode($langcode)
->save();
}
$this->localeStorage = $this->container
->get('locale.storage');
$this
->drupalPlaceBlock('local_tasks_block');
$this
->drupalPlaceBlock('page_title_block');
}
public function testSiteInformationTranslationUi() {
$this
->drupalLogin($this->adminUser);
$site_name = 'Site name for testing configuration translation';
$site_slogan = 'Site slogan for testing configuration translation';
$fr_site_name = 'Nom du site pour tester la configuration traduction';
$fr_site_slogan = 'Slogan du site pour tester la traduction de configuration';
$translation_base_url = 'admin/config/system/site-information/translate';
$this
->setSiteInformation($site_name, $site_slogan);
$this
->drupalGet('admin/config/system/site-information');
$this
->assertLinkByHref($translation_base_url);
$this
->drupalGet($translation_base_url);
$this
->clickLink(t('Edit'));
$this
->drupalPostForm(NULL, [], t('Save configuration'));
$this
->assertUrl($translation_base_url);
$this
->assertLinkByHref("{$translation_base_url}/fr/add");
$this
->clickLink(t('Add'));
$this
->assertRaw($site_name);
$this
->assertRaw($site_slogan);
$edit = array(
'translation[config_names][system.site][name]' => $fr_site_name,
'translation[config_names][system.site][slogan]' => $fr_site_slogan,
);
$this
->drupalPostForm("{$translation_base_url}/fr/add", $edit, t('Save translation'));
$this
->assertRaw(t('Successfully saved @language translation.', array(
'@language' => 'French',
)));
$this
->assertNoLinkByHref("{$translation_base_url}/fr/add");
$this
->assertLinkByHref("{$translation_base_url}/fr/edit");
$this
->assertLinkByHref("{$translation_base_url}/fr/delete");
$this
->drupalGet("{$translation_base_url}/fr/edit");
$this
->assertFieldByName('translation[config_names][system.site][name]', $fr_site_name);
$this
->assertFieldByName('translation[config_names][system.site][slogan]', $fr_site_slogan);
$this
->drupalPlaceBlock('system_branding_block', [
'region' => 'header',
]);
$this
->drupalGet('fr');
$this
->assertRaw($fr_site_name);
$this
->assertRaw($fr_site_slogan);
$this
->drupalGet("fr/{$translation_base_url}/fr/edit");
$this
->assertText($site_name);
$this
->assertText($site_slogan);
}
public function testSourceValueDuplicateSave() {
$this
->drupalLogin($this->adminUser);
$site_name = 'Site name for testing configuration translation';
$site_slogan = 'Site slogan for testing configuration translation';
$translation_base_url = 'admin/config/system/site-information/translate';
$this
->setSiteInformation($site_name, $site_slogan);
$this
->drupalGet($translation_base_url);
$edit = array(
'translation[config_names][system.site][name]' => 'FR ' . $site_name,
'translation[config_names][system.site][slogan]' => 'FR ' . $site_slogan,
);
$this
->drupalPostForm("{$translation_base_url}/fr/add", $edit, t('Save translation'));
$override = \Drupal::languageManager()
->getLanguageConfigOverride('fr', 'system.site');
$expected = array(
'name' => 'FR ' . $site_name,
'slogan' => 'FR ' . $site_slogan,
);
$this
->assertEqual($expected, $override
->get());
$this
->drupalGet("{$translation_base_url}/fr/edit");
$this
->assertNoText('FR ' . $site_name);
$this
->assertNoText('FR ' . $site_slogan);
$edit = array(
'translation[config_names][system.site][name]' => $site_name,
'translation[config_names][system.site][slogan]' => 'FR ' . $site_slogan,
);
$this
->drupalPostForm(NULL, $edit, t('Save translation'));
$this
->assertRaw(t('Successfully updated @language translation.', array(
'@language' => 'French',
)));
$override = \Drupal::languageManager()
->getLanguageConfigOverride('fr', 'system.site');
$expected = 'FR ' . $site_slogan;
$this
->assertEqual($expected, $override
->get('slogan'));
$this
->drupalGet("{$translation_base_url}/fr/edit");
$this
->assertNoText('FR ' . $site_slogan);
$edit = array(
'translation[config_names][system.site][name]' => $site_name,
'translation[config_names][system.site][slogan]' => $site_slogan,
);
$this
->drupalPostForm(NULL, $edit, t('Save translation'));
$override = \Drupal::languageManager()
->getLanguageConfigOverride('fr', 'system.site');
$this
->assertTrue($override
->isNew());
$this
->drupalLogout();
$this
->drupalLogin($this->translatorUser);
$this
->drupalGet('admin/config/system/site-information');
$this
->assertResponse(403);
$this
->drupalGet($translation_base_url);
$this
->assertNoLink(t('Edit'));
$this
->assertLinkByHref("{$translation_base_url}/fr/add");
}
public function testContactConfigEntityTranslation() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/structure/contact');
$this
->assertLinkByHref('admin/structure/contact/manage/feedback');
$label = 'Send your feedback';
$edit = array(
'label' => $label,
'recipients' => 'sales@example.com,support@example.com',
'reply' => 'Thank you for your mail',
);
$this
->drupalPostForm('admin/structure/contact/manage/feedback', $edit, t('Save'));
$translation_base_url = 'admin/structure/contact/manage/feedback/translate';
$this
->assertLinkByHref($translation_base_url);
$this
->drupalGet('admin/structure/contact/manage/feedback');
$this
->assertLink(t('Translate @type', array(
'@type' => 'contact form',
)));
$this
->drupalGet('contact/feedback');
$this
->assertText($label);
foreach ($this->langcodes as $langcode) {
$this
->drupalGet($translation_base_url);
$this
->assertLink(t('Translate @type', array(
'@type' => 'contact form',
)));
$translation_page_url = "{$translation_base_url}/{$langcode}/add";
$this
->assertLinkByHref($translation_page_url);
$this
->drupalGet($translation_page_url);
$this
->assertText($label);
$edit = array(
'translation[config_names][contact.form.feedback][label]' => 'Website feedback - ' . $langcode,
'translation[config_names][contact.form.feedback][reply]' => 'Thank you for your mail - ' . $langcode,
);
$this
->drupalPostForm($translation_page_url, $edit, t('Save translation'));
$override = \Drupal::languageManager()
->getLanguageConfigOverride($langcode, 'contact.form.feedback');
$expected = array(
'label' => 'Website feedback - ' . $langcode,
'reply' => 'Thank you for your mail - ' . $langcode,
);
$this
->assertEqual($expected, $override
->get());
$this
->assertNoLinkByHref("{$translation_base_url}/{$langcode}/add");
$this
->assertLinkByHref("{$translation_base_url}/{$langcode}/edit");
$this
->assertLinkByHref("{$translation_base_url}/{$langcode}/delete");
$this
->drupalGet($langcode . '/contact/feedback');
$this
->assertText('Website feedback - ' . $langcode);
$edit = array(
'subject[0][value]' => 'Test subject',
'message[0][value]' => 'Test message',
);
$this
->drupalPostForm(NULL, $edit, t('Send message'));
}
foreach ($this->langcodes as $langcode) {
$langcode_prefixes = array_merge(array(
'',
), $this->langcodes);
foreach ($langcode_prefixes as $langcode_prefix) {
$this
->drupalGet(ltrim("{$langcode_prefix}/{$translation_base_url}/{$langcode}/edit", '/'));
$this
->assertFieldByName('translation[config_names][contact.form.feedback][label]', 'Website feedback - ' . $langcode);
$this
->assertText($label);
}
}
$captured_emails = $this
->drupalGetMails();
foreach ($captured_emails as $email) {
if ($email['id'] == 'contact_page_autoreply') {
$this
->assertEqual(trim($email['body']), 'Thank you for your mail - ' . $email['langcode']);
}
}
foreach ($this->langcodes as $langcode) {
$replacements = array(
'%label' => t('@label @entity_type', array(
'@label' => $label,
'@entity_type' => Unicode::strtolower(t('Contact form')),
)),
'@language' => \Drupal::languageManager()
->getLanguage($langcode)
->getName(),
);
$this
->drupalGet("{$translation_base_url}/{$langcode}/delete");
$this
->assertRaw(t('Are you sure you want to delete the @language translation of %label?', $replacements));
$this
->assertLinkByHref($translation_base_url);
$this
->drupalPostForm(NULL, array(), t('Delete'));
$this
->assertRaw(t('@language translation of %label was deleted', $replacements));
$this
->assertLinkByHref("{$translation_base_url}/{$langcode}/add");
$this
->assertNoLinkByHref("translation_base_url/{$langcode}/edit");
$this
->assertNoLinkByHref("{$translation_base_url}/{$langcode}/delete");
$override = \Drupal::languageManager()
->getLanguageConfigOverride($langcode, 'contact.form.feedback');
$this
->assertTrue($override
->isNew());
}
$this
->drupalLogout();
$this
->drupalLogin($this->translatorUser);
$this
->drupalGet('admin/structure/contact/manage/feedback');
$this
->assertResponse(403);
$this
->drupalGet($translation_base_url);
$this
->assertNoLink(t('Edit'));
$this
->assertLinkByHref("{$translation_base_url}/fr/add");
}
public function testDateFormatTranslation() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/config/regional/date-time');
$this
->assertLinkByHref('admin/config/regional/date-time/formats/manage/medium');
$edit = array(
'label' => 'Custom medium date',
'id' => 'custom_medium',
'date_format_pattern' => 'Y. m. d. H:i',
);
$this
->drupalPostForm('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
$formats = array(
'medium' => 'Default medium date',
'custom_medium' => 'Custom medium date',
);
foreach ($formats as $id => $label) {
$translation_base_url = 'admin/config/regional/date-time/formats/manage/' . $id . '/translate';
$this
->drupalGet($translation_base_url);
$translation_page_url = "{$translation_base_url}/fr/add";
$this
->assertLinkByHref($translation_page_url);
$this
->drupalGet($translation_page_url);
$this
->assertText($label);
$this
->assertRaw('core/modules/system/js/system.date.js');
$edit = array(
'translation[config_names][core.date_format.' . $id . '][label]' => $id . ' - FR',
'translation[config_names][core.date_format.' . $id . '][pattern]' => 'D',
);
$this
->drupalPostForm($translation_page_url, $edit, t('Save translation'));
$override = \Drupal::languageManager()
->getLanguageConfigOverride('fr', 'core.date_format.' . $id);
$expected = array(
'label' => $id . ' - FR',
'pattern' => 'D',
);
$this
->assertEqual($expected, $override
->get());
$formatted_date = format_date(494015820, $id, NULL, 'America/New_York', 'fr');
$this
->assertEqual($formatted_date, 'Tue', 'Got the right formatted date using the date format translation pattern.');
}
}
public function testAccountSettingsConfigurationTranslation() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/config/people/accounts');
$this
->assertLink(t('Translate @type', array(
'@type' => 'account settings',
)));
$this
->drupalGet('admin/config/people/accounts/translate');
$this
->assertLink(t('Translate @type', array(
'@type' => 'account settings',
)));
$this
->assertLinkByHref('admin/config/people/accounts/translate/fr/add');
$edit = array(
'translation[config_names][user.settings][anonymous]' => 'Anonyme',
'translation[config_names][user.mail][status_blocked][subject]' => 'Testing, your account is blocked.',
'translation[config_names][user.mail][status_blocked][body]' => 'Testing account blocked body.',
);
$this
->drupalPostForm('admin/config/people/accounts/translate/fr/add', $edit, t('Save translation'));
$this
->drupalGet('admin/config/people/accounts/translate/fr/edit');
foreach ($edit as $key => $value) {
$xpath = '//' . (strpos($key, '[body]') ? 'textarea' : 'input') . '[@name="' . $key . '"]';
$this
->assertFieldByXPath($xpath, $value);
}
$this
->assertText(t('Account cancellation confirmation'));
$this
->assertText(t('Password recovery'));
}
public function testSourceAndTargetLanguage() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/config/system/site-information/translate/und/add');
$this
->assertResponse(403);
$this
->drupalGet('admin/config/system/site-information/translate');
$this
->assertNoLinkByHref('admin/config/system/site-information/translate/en/edit');
$this
->assertNoLinkByHref('admin/config/system/site-information/translate/en/add');
$this
->assertNoLinkByHref('admin/config/system/site-information/translate/en/delete');
$this
->assertLinkByHref('admin/config/system/site-information');
$this
->drupalGet('admin/config/system/site-information/translate/en/add');
$this
->assertResponse(403);
$this
->drupalGet('admin/config/system/site-information/translate/en/edit');
$this
->assertResponse(403);
$this
->drupalGet('admin/config/system/site-information/translate/en/delete');
$this
->assertResponse(403);
$this
->config('system.site')
->set('langcode', LanguageInterface::LANGCODE_NOT_SPECIFIED)
->save();
$this
->drupalGet('admin/config/system/site-information');
$this
->assertNoLinkByHref('admin/config/system/site-information/translate');
$this
->drupalGet('admin/config/system/site-information/translate');
$this
->assertResponse(403);
}
public function testViewsTranslationUI() {
$this
->drupalLogin($this->adminUser);
$ids = array(
'entity.view.edit_form:view=frontpage:location=page&name=frontpage&display_id=page_1',
);
$response = $this
->renderContextualLinks($ids, 'node');
$this
->assertResponse(200);
$json = Json::decode($response);
$this
->assertTrue(strpos($json[$ids[0]], 'Translate view'), 'Translate view contextual link added.');
$description = 'All content promoted to the front page.';
$human_readable_name = 'Frontpage';
$display_settings_master = 'Master';
$display_options_master = '(Empty)';
$translation_base_url = 'admin/structure/views/view/frontpage/translate';
$this
->drupalGet($translation_base_url);
$this
->assertLinkByHref("{$translation_base_url}/fr/add");
$this
->clickLink(t('Add'));
$this
->assertRaw($description);
$this
->assertRaw($human_readable_name);
$edit = array(
'translation[config_names][views.view.frontpage][description]' => $description . " FR",
'translation[config_names][views.view.frontpage][label]' => $human_readable_name . " FR",
'translation[config_names][views.view.frontpage][display][default][display_title]' => $display_settings_master . " FR",
'translation[config_names][views.view.frontpage][display][default][display_options][title]' => $display_options_master . " FR",
);
$this
->drupalPostForm("{$translation_base_url}/fr/add", $edit, t('Save translation'));
$this
->assertRaw(t('Successfully saved @language translation.', array(
'@language' => 'French',
)));
$this
->assertNoLinkByHref("{$translation_base_url}/fr/add");
$this
->assertLinkByHref("{$translation_base_url}/fr/edit");
$this
->assertLinkByHref("{$translation_base_url}/fr/delete");
$this
->drupalGet("{$translation_base_url}/fr/edit");
$this
->assertFieldByName('translation[config_names][views.view.frontpage][description]', $description . " FR");
$this
->assertFieldByName('translation[config_names][views.view.frontpage][label]', $human_readable_name . " FR");
$this
->assertFieldByName('translation[config_names][views.view.frontpage][display][default][display_title]', $display_settings_master . " FR");
$this
->assertFieldByName('translation[config_names][views.view.frontpage][display][default][display_options][title]', $display_options_master . " FR");
}
public function testPluralConfigStringsSourceElements() {
$this
->drupalLogin($this->adminUser);
$languages = array(
'vi' => array(
'plurals' => 1,
'expected' => array(
TRUE,
FALSE,
FALSE,
FALSE,
),
),
'fr' => array(
'plurals' => 2,
'expected' => array(
TRUE,
TRUE,
FALSE,
FALSE,
),
),
'sl' => array(
'plurals' => 4,
'expected' => array(
TRUE,
TRUE,
TRUE,
TRUE,
),
),
);
foreach ($languages as $langcode => $data) {
$name = tempnam('temporary://', $langcode . '_') . '.po';
file_put_contents($name, $this
->getPoFile($data['plurals']));
$this
->drupalPostForm('admin/config/regional/translate/import', array(
'langcode' => $langcode,
'files[file]' => $name,
), t('Import'));
$config = \Drupal::service('config.factory')
->getEditable('views.view.files');
$config
->set('langcode', $langcode);
$config
->save();
$translation_url = 'admin/structure/views/view/files/translate/en/add';
$this
->drupalGet($translation_url);
foreach ($data['expected'] as $index => $expected) {
if ($expected) {
$this
->assertRaw('edit-source-config-names-viewsviewfiles-display-default-display-options-fields-count-format-plural-string-' . $index);
}
else {
$this
->assertNoRaw('edit-source-config-names-viewsviewfiles-display-default-display-options-fields-count-format-plural-string-' . $index);
}
}
}
}
public function testPluralConfigStrings() {
$this
->drupalLogin($this->adminUser);
$name = tempnam('temporary://', "sl_") . '.po';
file_put_contents($name, $this
->getPoFile(4));
$this
->drupalPostForm('admin/config/regional/translate/import', array(
'langcode' => 'sl',
'files[file]' => $name,
), t('Import'));
$description = 'Singular form';
$field_value = '1 place';
$field_value_plural = '@count places';
$translation_url = 'admin/structure/views/view/files/translate/sl/add';
$this
->drupalGet($translation_url);
$this
->assertRaw($description);
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][0]', $field_value);
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][1]', $field_value_plural);
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][2]', '');
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][3]', '');
$edit = [
'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][0]' => $field_value . ' SL',
'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][1]' => $field_value_plural . ' 1 SL',
'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][2]' => $field_value_plural . ' 2 SL',
'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][3]' => $field_value_plural . ' 3 SL',
];
$this
->drupalPostForm($translation_url, $edit, t('Save translation'));
$this
->drupalGet($translation_url);
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][0]', "{$field_value} SL");
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][1]', "{$field_value_plural} 1 SL");
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][2]', "{$field_value_plural} 2 SL");
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][3]', "{$field_value_plural} 3 SL");
}
public function testFieldConfigTranslation() {
$field_name = strtolower($this
->randomMachineName());
$field_storage = FieldStorageConfig::create([
'field_name' => $field_name,
'entity_type' => 'entity_test',
'type' => 'test_field',
]);
$translatable_storage_setting = $this
->randomString();
$field_storage
->setSetting('translatable_storage_setting', $translatable_storage_setting);
$field_storage
->save();
$bundle = strtolower($this
->randomMachineName());
entity_test_create_bundle($bundle);
$field = FieldConfig::create([
'field_name' => $field_name,
'entity_type' => 'entity_test',
'bundle' => $bundle,
]);
$translatable_field_setting = $this
->randomString();
$field
->setSetting('translatable_field_setting', $translatable_field_setting);
$field
->save();
$this
->drupalLogin($this->translatorUser);
$this
->drupalGet("/entity_test/structure/{$bundle}/fields/entity_test.{$bundle}.{$field_name}/translate");
$this
->clickLink('Add');
$this
->assertText('Translatable field setting');
$this
->assertEscaped($translatable_field_setting);
$this
->assertText('Translatable storage setting');
$this
->assertEscaped($translatable_storage_setting);
}
public function testLocaleDBStorage() {
$this
->config('locale.settings')
->set('translation.import_enabled', TRUE)
->save();
$this
->drupalLogin($this->adminUser);
$langcode = 'xx';
$name = $this
->randomMachineName(16);
$edit = array(
'predefined_langcode' => 'custom',
'langcode' => $langcode,
'label' => $name,
'direction' => Language::DIRECTION_LTR,
);
$this
->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
$translation = $this
->getTranslation('user.settings', 'anonymous', 'fr');
$this
->assertTrue(empty($translation));
$edit = array(
'translation[config_names][user.settings][anonymous]' => 'Anonyme',
);
$this
->drupalPostForm('admin/config/people/accounts/translate/fr/add', $edit, t('Save translation'));
$translation = $this
->getTranslation('user.settings', 'anonymous', 'fr');
$this
->assertEqual('Anonyme', $translation
->getString());
$edit = array(
'translation[config_names][user.settings][anonymous]' => 'Anonymous',
);
$this
->drupalPostForm('admin/config/people/accounts/translate/fr/edit', $edit, t('Save translation'));
$translation = $this
->getTranslation('user.settings', 'anonymous', 'fr');
$this
->assertEqual('Anonymous', $translation
->getString());
}
public function testSingleLanguageUI() {
$this
->drupalLogin($this->adminUser);
$this
->drupalPostForm('admin/config/regional/language/delete/fr', array(), t('Delete'));
$this
->assertRaw(t('The %language (%langcode) language has been removed.', array(
'%language' => 'French',
'%langcode' => 'fr',
)));
$edit = array(
'site_default_language' => 'ta',
);
$this
->drupalPostForm('admin/config/regional/language', $edit, t('Save configuration'));
$this
->assertRaw(t('Configuration saved.'));
$this
->drupalPostForm('admin/config/regional/language/delete/en', array(), t('Delete'));
$this
->assertRaw(t('The %language (%langcode) language has been removed.', array(
'%language' => 'English',
'%langcode' => 'en',
)));
$this
->drupalGet('admin/config/people/accounts/translate');
$this
->assertResponse(200);
}
public function testAlterInfo() {
$this
->drupalLogin($this->adminUser);
$this->container
->get('state')
->set('config_translation_test_config_translation_info_alter', TRUE);
$this->container
->get('plugin.manager.config_translation.mapper')
->clearCachedDefinitions();
$this
->drupalGet('admin/config/system/site-information/translate/fr/add');
$this
->assertText(t('Feed channel'));
$this
->assertText(t('Feed description'));
$this
->drupalGet('admin/config/people/accounts/translate/fr/add');
$this
->assertText(t('Name'));
$this
->assertNoText(t('Account cancellation confirmation'));
$this
->assertNoText(t('Password recovery'));
}
public function testSequenceTranslation() {
$this
->drupalLogin($this->adminUser);
$config_factory = $this->container
->get('config.factory');
$expected = array(
'kitten',
'llama',
'elephant',
);
$actual = $config_factory
->getEditable('config_translation_test.content')
->get('animals');
$this
->assertEqual($expected, $actual);
$edit = array(
'translation[config_names][config_translation_test.content][content][value]' => '<p><strong>Hello World</strong> - FR</p>',
'translation[config_names][config_translation_test.content][animals][0]' => 'kitten - FR',
'translation[config_names][config_translation_test.content][animals][1]' => 'llama - FR',
'translation[config_names][config_translation_test.content][animals][2]' => 'elephant - FR',
);
$this
->drupalPostForm('admin/config/media/file-system/translate/fr/add', $edit, t('Save translation'));
$this->container
->get('language.config_factory_override')
->setLanguage(new Language(array(
'id' => 'fr',
)));
$expected = array(
'kitten - FR',
'llama - FR',
'elephant - FR',
);
$actual = $config_factory
->get('config_translation_test.content')
->get('animals');
$this
->assertEqual($expected, $actual);
}
public function testTextFormatTranslation() {
$this
->drupalLogin($this->adminUser);
$config_factory = $this->container
->get('config.factory');
$expected = array(
'value' => '<p><strong>Hello World</strong></p>',
'format' => 'plain_text',
);
$actual = $config_factory
->get('config_translation_test.content')
->getOriginal('content', FALSE);
$this
->assertEqual($expected, $actual);
$translation_base_url = 'admin/config/media/file-system/translate';
$this
->drupalGet($translation_base_url);
$translation_page_url = "{$translation_base_url}/fr/add";
$this
->assertLinkByHref($translation_page_url);
$this
->drupalGet($translation_page_url);
$this
->assertNoFieldByName('translation[config_names][config_translation_test.content][content][format]');
$edit = array(
'translation[config_names][config_translation_test.content][content][value]' => '<p><strong>Hello World</strong> - FR</p>',
);
$this
->drupalPostForm($translation_page_url, $edit, t('Save translation'));
$expected = array(
'value' => '<p><strong>Hello World</strong> - FR</p>',
'format' => 'plain_text',
);
$this->container
->get('language.config_factory_override')
->setLanguage(new Language(array(
'id' => 'fr',
)));
$actual = $config_factory
->get('config_translation_test.content')
->get('content');
$this
->assertEqual($expected, $actual);
$config_factory
->getEditable('config_translation_test.content')
->set('content.format', 'full_html')
->save();
$actual = $config_factory
->get('config_translation_test.content')
->get('content');
$this
->assertEqual($expected, $actual);
$translation_page_url = "{$translation_base_url}/fr/edit";
$this
->drupalLogin($this->translatorUser);
$this
->drupalGet($translation_page_url);
$this
->assertDisabledTextarea('edit-translation-config-names-config-translation-testcontent-content-value');
$this
->drupalPostForm(NULL, array(), t('Save translation'));
$actual = $config_factory
->get('config_translation_test.content')
->get('content');
$this
->assertEqual($expected, $actual);
$this
->drupalLogin($this->adminUser);
$edit = array(
'translation[config_names][config_translation_test.content][content][format]' => 'full_html',
);
$this
->drupalPostForm($translation_page_url, $edit, t('Save translation'));
$expected = array(
'value' => '<p><strong>Hello World</strong> - FR</p>',
'format' => 'full_html',
);
$actual = $config_factory
->get('config_translation_test.content')
->get('content');
$this
->assertEqual($expected, $actual);
}
protected function getTranslation($config_name, $key, $langcode) {
$settings_locations = $this->localeStorage
->getLocations(array(
'type' => 'configuration',
'name' => $config_name,
));
$this
->assertTrue(!empty($settings_locations), format_string('Configuration locations found for %config_name.', array(
'%config_name' => $config_name,
)));
if (!empty($settings_locations)) {
$source = $this->container
->get('config.factory')
->get($config_name)
->get($key);
$source_string = $this->localeStorage
->findString(array(
'source' => $source,
'type' => 'configuration',
));
$this
->assertTrue(!empty($source_string), format_string('Found string for %config_name.%key.', array(
'%config_name' => $config_name,
'%key' => $key,
)));
if (!empty($source_string)) {
$conditions = array(
'lid' => $source_string->lid,
'language' => $langcode,
);
$translations = $this->localeStorage
->getTranslations($conditions + array(
'translated' => TRUE,
));
return reset($translations);
}
}
return FALSE;
}
protected function setSiteInformation($site_name, $site_slogan) {
$edit = array(
'site_name' => $site_name,
'site_slogan' => $site_slogan,
);
$this
->drupalPostForm('admin/config/system/site-information', $edit, t('Save configuration'));
$this
->assertRaw(t('The configuration options have been saved.'));
}
protected function renderContextualLinks($ids, $current_path) {
$post = array();
for ($i = 0; $i < count($ids); $i++) {
$post['ids[' . $i . ']'] = $ids[$i];
}
return $this
->drupalPostWithFormat('contextual/render', 'json', $post, array(
'query' => array(
'destination' => $current_path,
),
));
}
protected function assertDisabledTextarea($id) {
$textarea = $this
->xpath('//textarea[@id=:id and contains(@disabled, "disabled")]', array(
':id' => $id,
));
$textarea = reset($textarea);
$passed = $this
->assertTrue($textarea instanceof \SimpleXMLElement, SafeMarkup::format('Disabled field @id exists.', array(
'@id' => $id,
)));
$expected = 'This field has been disabled because you do not have sufficient permissions to edit it.';
$passed = $passed && $this
->assertEqual((string) $textarea, $expected, SafeMarkup::format('Disabled textarea @id hides text in an inaccessible text format.', array(
'@id' => $id,
)));
$select_id = str_replace('value', 'format--2', $id);
$select = $this
->xpath('//select[@id=:id]', array(
':id' => $select_id,
));
return $passed && $this
->assertFalse($select, SafeMarkup::format('Field @id does not exist.', array(
'@id' => $id,
)));
}
public function getPoFile($plurals) {
$po_file = array();
$po_file[1] = <<<EOF
msgid ""
msgstr ""
"Project-Id-Version: Drupal 8\\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=UTF-8\\n"
"Content-Transfer-Encoding: 8bit\\n"
"Plural-Forms: nplurals=1; plural=0;\\n"
EOF;
$po_file[2] = <<<EOF
msgid ""
msgstr ""
"Project-Id-Version: Drupal 8\\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=UTF-8\\n"
"Content-Transfer-Encoding: 8bit\\n"
"Plural-Forms: nplurals=2; plural=(n>1);\\n"
EOF;
$po_file[4] = <<<EOF
msgid ""
msgstr ""
"Project-Id-Version: Drupal 8\\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=UTF-8\\n"
"Content-Transfer-Encoding: 8bit\\n"
"Plural-Forms: nplurals=4; plural=(((n%100)==1)?(0):(((n%100)==2)?(1):((((n%100)==3)||((n%100)==4))?(2):3)));\\n"
EOF;
return $po_file[$plurals];
}
}