X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fcore%2Fmodules%2Flocale%2Fsrc%2FTests%2FLocaleImportFunctionalTest.php;fp=web%2Fcore%2Fmodules%2Flocale%2Fsrc%2FTests%2FLocaleImportFunctionalTest.php;h=0000000000000000000000000000000000000000;hb=bfbba508964731508b9bd6d5835c2edc858db95b;hp=c1d9a612a9c93d5383b4f79bea453cf1b83c5631;hpb=cb9a80db11fc6b014e5b1e693a5a391c95eb5d9a;p=yaffs-website
diff --git a/web/core/modules/locale/src/Tests/LocaleImportFunctionalTest.php b/web/core/modules/locale/src/Tests/LocaleImportFunctionalTest.php
deleted file mode 100644
index c1d9a612a..000000000
--- a/web/core/modules/locale/src/Tests/LocaleImportFunctionalTest.php
+++ /dev/null
@@ -1,642 +0,0 @@
-adminUser = $this->drupalCreateUser(['administer languages', 'translate interface', 'access administration pages']);
- $this->adminUserAccessSiteReports = $this->drupalCreateUser(['administer languages', 'translate interface', 'access administration pages', 'access site reports']);
- $this->drupalLogin($this->adminUser);
-
- // Enable import of translations. By default this is disabled for automated
- // tests.
- $this->config('locale.settings')
- ->set('translation.import_enabled', TRUE)
- ->save();
- }
-
- /**
- * Test import of standalone .po files.
- */
- public function testStandalonePoFile() {
- // Try importing a .po file.
- $this->importPoFile($this->getPoFile(), [
- 'langcode' => 'fr',
- ]);
- $this->config('locale.settings');
- // The import should automatically create the corresponding language.
- $this->assertRaw(t('The language %language has been created.', ['%language' => 'French']), 'The language has been automatically created.');
-
- // The import should have created 8 strings.
- $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', ['%number' => 8, '%update' => 0, '%delete' => 0]), 'The translation file was successfully imported.');
-
- // This import should have saved plural forms to have 2 variants.
- $locale_plurals = \Drupal::service('locale.plural.formula')->getNumberOfPlurals('fr');
- $this->assertEqual(2, $locale_plurals, 'Plural number initialized.');
-
- // Ensure we were redirected correctly.
- $this->assertUrl(\Drupal::url('locale.translate_page', [], ['absolute' => TRUE]), [], 'Correct page redirection.');
-
- // Try importing a .po file with invalid tags.
- $this->importPoFile($this->getBadPoFile(), [
- 'langcode' => 'fr',
- ]);
-
- // The import should have created 1 string and rejected 2.
- $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', ['%number' => 1, '%update' => 0, '%delete' => 0]), 'The translation file was successfully imported.');
-
- $skip_message = \Drupal::translation()->formatPlural(2, 'One translation string was skipped because of disallowed or malformed HTML. See the log for details.', '@count translation strings were skipped because of disallowed or malformed HTML. See the log for details.', [':url' => \Drupal::url('dblog.overview')]);
- $this->assertRaw($skip_message, 'Unsafe strings were skipped.');
-
- // Repeat the process with a user that can access site reports, and this
- // time the different warnings must contain links to the log.
- $this->drupalLogin($this->adminUserAccessSiteReports);
-
- // Try importing a .po file with invalid tags.
- $this->importPoFile($this->getBadPoFile(), [
- 'langcode' => 'fr',
- ]);
-
- $skip_message = \Drupal::translation()->formatPlural(2, 'One translation string was skipped because of disallowed or malformed HTML. See the log for details.', '@count translation strings were skipped because of disallowed or malformed HTML. See the log for details.', [':url' => \Drupal::url('dblog.overview')]);
- $this->assertRaw($skip_message, 'Unsafe strings were skipped.');
-
- // Check empty files import with a user that cannot access site reports..
- $this->drupalLogin($this->adminUser);
- // Try importing a zero byte sized .po file.
- $this->importPoFile($this->getEmptyPoFile(), [
- 'langcode' => 'fr',
- ]);
- // The import should have created 0 string and rejected 0.
- $this->assertRaw(t('One translation file could not be imported. See the log for details.'), 'The empty translation file import reported no translations imported.');
-
- // Repeat the process with a user that can access site reports, and this
- // time the different warnings must contain links to the log.
- $this->drupalLogin($this->adminUserAccessSiteReports);
- // Try importing a zero byte sized .po file.
- $this->importPoFile($this->getEmptyPoFile(), [
- 'langcode' => 'fr',
- ]);
- // The import should have created 0 string and rejected 0.
- $this->assertRaw(t('One translation file could not be imported. See the log for details.', [':url' => \Drupal::url('dblog.overview')]), 'The empty translation file import reported no translations imported.');
-
- // Try importing a .po file which doesn't exist.
- $name = $this->randomMachineName(16);
- $this->drupalPostForm('admin/config/regional/translate/import', [
- 'langcode' => 'fr',
- 'files[file]' => $name,
- ], t('Import'));
- $this->assertUrl(\Drupal::url('locale.translate_import', [], ['absolute' => TRUE]), [], 'Correct page redirection.');
- $this->assertText(t('File to import not found.'), 'File to import not found message.');
-
- // Try importing a .po file with overriding strings, and ensure existing
- // strings are kept.
- $this->importPoFile($this->getOverwritePoFile(), [
- 'langcode' => 'fr',
- ]);
-
- // The import should have created 1 string.
- $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', ['%number' => 1, '%update' => 0, '%delete' => 0]), 'The translation file was successfully imported.');
- // Ensure string wasn't overwritten.
- $search = [
- 'string' => 'Montag',
- 'langcode' => 'fr',
- 'translation' => 'translated',
- ];
- $this->drupalPostForm('admin/config/regional/translate', $search, t('Filter'));
- $this->assertText(t('No strings available.'), 'String not overwritten by imported string.');
-
- // This import should not have changed number of plural forms.
- $locale_plurals = \Drupal::service('locale.plural.formula')->getNumberOfPlurals('fr');
- $this->assertEqual(2, $locale_plurals, 'Plural numbers untouched.');
-
- // Try importing a .po file with overriding strings, and ensure existing
- // strings are overwritten.
- $this->importPoFile($this->getOverwritePoFile(), [
- 'langcode' => 'fr',
- 'overwrite_options[not_customized]' => TRUE,
- ]);
-
- // The import should have updated 2 strings.
- $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', ['%number' => 0, '%update' => 2, '%delete' => 0]), 'The translation file was successfully imported.');
- // Ensure string was overwritten.
- $search = [
- 'string' => 'Montag',
- 'langcode' => 'fr',
- 'translation' => 'translated',
- ];
- $this->drupalPostForm('admin/config/regional/translate', $search, t('Filter'));
- $this->assertNoText(t('No strings available.'), 'String overwritten by imported string.');
- // This import should have changed number of plural forms.
- $locale_plurals = \Drupal::service('locale.plural.formula')->reset()->getNumberOfPlurals('fr');
- $this->assertEqual(3, $locale_plurals, 'Plural numbers changed.');
-
- // Importing a .po file and mark its strings as customized strings.
- $this->importPoFile($this->getCustomPoFile(), [
- 'langcode' => 'fr',
- 'customized' => TRUE,
- ]);
-
- // The import should have created 6 strings.
- $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', ['%number' => 6, '%update' => 0, '%delete' => 0]), 'The customized translation file was successfully imported.');
-
- // The database should now contain 6 customized strings (two imported
- // strings are not translated).
- $count = db_query('SELECT COUNT(*) FROM {locales_target} WHERE customized = :custom', [':custom' => 1])->fetchField();
- $this->assertEqual($count, 6, 'Customized translations successfully imported.');
-
- // Try importing a .po file with overriding strings, and ensure existing
- // customized strings are kept.
- $this->importPoFile($this->getCustomOverwritePoFile(), [
- 'langcode' => 'fr',
- 'overwrite_options[not_customized]' => TRUE,
- 'overwrite_options[customized]' => FALSE,
- ]);
-
- // The import should have created 1 string.
- $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', ['%number' => 1, '%update' => 0, '%delete' => 0]), 'The customized translation file was successfully imported.');
- // Ensure string wasn't overwritten.
- $search = [
- 'string' => 'januari',
- 'langcode' => 'fr',
- 'translation' => 'translated',
- ];
- $this->drupalPostForm('admin/config/regional/translate', $search, t('Filter'));
- $this->assertText(t('No strings available.'), 'Customized string not overwritten by imported string.');
-
- // Try importing a .po file with overriding strings, and ensure existing
- // customized strings are overwritten.
- $this->importPoFile($this->getCustomOverwritePoFile(), [
- 'langcode' => 'fr',
- 'overwrite_options[not_customized]' => FALSE,
- 'overwrite_options[customized]' => TRUE,
- ]);
-
- // The import should have updated 2 strings.
- $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', ['%number' => 0, '%update' => 2, '%delete' => 0]), 'The customized translation file was successfully imported.');
- // Ensure string was overwritten.
- $search = [
- 'string' => 'januari',
- 'langcode' => 'fr',
- 'translation' => 'translated',
- ];
- $this->drupalPostForm('admin/config/regional/translate', $search, t('Filter'));
- $this->assertNoText(t('No strings available.'), 'Customized string overwritten by imported string.');
-
- }
-
- /**
- * Test msgctxt context support.
- */
- public function testLanguageContext() {
- // Try importing a .po file.
- $this->importPoFile($this->getPoFileWithContext(), [
- 'langcode' => 'hr',
- ]);
-
- // We cast the return value of t() to string so as to retrieve the
- // translated value, rendered as a string.
- $this->assertIdentical((string) t('May', [], ['langcode' => 'hr', 'context' => 'Long month name']), 'Svibanj', 'Long month name context is working.');
- $this->assertIdentical((string) t('May', [], ['langcode' => 'hr']), 'Svi.', 'Default context is working.');
- }
-
- /**
- * Test empty msgstr at end of .po file see #611786.
- */
- public function testEmptyMsgstr() {
- $langcode = 'hu';
-
- // Try importing a .po file.
- $this->importPoFile($this->getPoFileWithMsgstr(), [
- 'langcode' => $langcode,
- ]);
-
- $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', ['%number' => 1, '%update' => 0, '%delete' => 0]), 'The translation file was successfully imported.');
- $this->assertIdentical((string) t('Operations', [], ['langcode' => $langcode]), 'Műveletek', 'String imported and translated.');
-
- // Try importing a .po file.
- $this->importPoFile($this->getPoFileWithEmptyMsgstr(), [
- 'langcode' => $langcode,
- 'overwrite_options[not_customized]' => TRUE,
- ]);
- $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', ['%number' => 0, '%update' => 0, '%delete' => 1]), 'The translation file was successfully imported.');
-
- $str = "Operations";
- $search = [
- 'string' => $str,
- 'langcode' => $langcode,
- 'translation' => 'untranslated',
- ];
- $this->drupalPostForm('admin/config/regional/translate', $search, t('Filter'));
- $this->assertText($str, 'Search found the string as untranslated.');
- }
-
- /**
- * Tests .po file import with configuration translation.
- */
- public function testConfigPoFile() {
- // Values for translations to assert. Config key, original string,
- // translation and config property name.
- $config_strings = [
- 'system.maintenance' => [
- '@site is currently under maintenance. We should be back shortly. Thank you for your patience.',
- '@site karbantartás alatt áll. Rövidesen visszatérünk. Köszönjük a türelmet.',
- 'message',
- ],
- 'user.role.anonymous' => [
- 'Anonymous user',
- 'Névtelen felhasználó',
- 'label',
- ],
- ];
-
- // Add custom language for testing.
- $langcode = 'xx';
- $edit = [
- 'predefined_langcode' => 'custom',
- 'langcode' => $langcode,
- 'label' => $this->randomMachineName(16),
- 'direction' => LanguageInterface::DIRECTION_LTR,
- ];
- $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
-
- // Check for the source strings we are going to translate. Adding the
- // custom language should have made the process to export configuration
- // strings to interface translation executed.
- $locale_storage = $this->container->get('locale.storage');
- foreach ($config_strings as $config_string) {
- $string = $locale_storage->findString(['source' => $config_string[0], 'context' => '', 'type' => 'configuration']);
- $this->assertTrue($string, 'Configuration strings have been created upon installation.');
- }
-
- // Import a .po file to translate.
- $this->importPoFile($this->getPoFileWithConfig(), [
- 'langcode' => $langcode,
- ]);
-
- // Translations got recorded in the interface translation system.
- foreach ($config_strings as $config_string) {
- $search = [
- 'string' => $config_string[0],
- 'langcode' => $langcode,
- 'translation' => 'all',
- ];
- $this->drupalPostForm('admin/config/regional/translate', $search, t('Filter'));
- $this->assertText($config_string[1], format_string('Translation of @string found.', ['@string' => $config_string[0]]));
- }
-
- // Test that translations got recorded in the config system.
- $overrides = \Drupal::service('language.config_factory_override');
- foreach ($config_strings as $config_key => $config_string) {
- $override = $overrides->getOverride($langcode, $config_key);
- $this->assertEqual($override->get($config_string[2]), $config_string[1]);
- }
- }
-
- /**
- * Tests .po file import with user.settings configuration.
- */
- public function testConfigtranslationImportingPoFile() {
- // Set the language code.
- $langcode = 'de';
-
- // Import a .po file to translate.
- $this->importPoFile($this->getPoFileWithConfigDe(), [
- 'langcode' => $langcode]);
-
- // Check that the 'Anonymous' string is translated.
- $config = \Drupal::languageManager()->getLanguageConfigOverride($langcode, 'user.settings');
- $this->assertEqual($config->get('anonymous'), 'Anonymous German');
- }
-
- /**
- * Test the translation are imported when a new language is created.
- */
- public function testCreatedLanguageTranslation() {
- // Import a .po file to add de language.
- $this->importPoFile($this->getPoFileWithConfigDe(), ['langcode' => 'de']);
-
- // Get the language.entity.de label and check it's been translated.
- $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'language.entity.de');
- $this->assertEqual($override->get('label'), 'Deutsch');
- }
-
- /**
- * Helper function: import a standalone .po file in a given language.
- *
- * @param string $contents
- * Contents of the .po file to import.
- * @param array $options
- * (optional) Additional options to pass to the translation import form.
- */
- public function importPoFile($contents, array $options = []) {
- $name = \Drupal::service('file_system')->tempnam('temporary://', "po_") . '.po';
- file_put_contents($name, $contents);
- $options['files[file]'] = $name;
- $this->drupalPostForm('admin/config/regional/translate/import', $options, t('Import'));
- drupal_unlink($name);
- }
-
- /**
- * Helper function that returns a proper .po file.
- */
- public function getPoFile() {
- return <<< 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"
-
-msgid "One sheep"
-msgid_plural "@count sheep"
-msgstr[0] "un mouton"
-msgstr[1] "@count moutons"
-
-msgid "Monday"
-msgstr "lundi"
-
-msgid "Tuesday"
-msgstr "mardi"
-
-msgid "Wednesday"
-msgstr "mercredi"
-
-msgid "Thursday"
-msgstr "jeudi"
-
-msgid "Friday"
-msgstr "vendredi"
-
-msgid "Saturday"
-msgstr "samedi"
-
-msgid "Sunday"
-msgstr "dimanche"
-EOF;
- }
-
- /**
- * Helper function that returns a empty .po file.
- */
- public function getEmptyPoFile() {
- return '';
- }
-
- /**
- * Helper function that returns a bad .po file.
- */
- public function getBadPoFile() {
- return <<< 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"
-
-msgid "Save configuration"
-msgstr "Enregistrer la configuration"
-
-msgid "edit"
-msgstr "modifier
"
-
-msgid "delete"
-msgstr "supprimer"
-
-EOF;
- }
-
- /**
- * Helper function that returns a proper .po file for testing.
- */
- public function getOverwritePoFile() {
- return <<< 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=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\\n"
-
-msgid "Monday"
-msgstr "Montag"
-
-msgid "Day"
-msgstr "Jour"
-EOF;
- }
-
- /**
- * Helper function that returns a .po file which strings will be marked
- * as customized.
- */
- public function getCustomPoFile() {
- return <<< 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"
-
-msgid "One dog"
-msgid_plural "@count dogs"
-msgstr[0] "un chien"
-msgstr[1] "@count chiens"
-
-msgid "January"
-msgstr "janvier"
-
-msgid "February"
-msgstr "février"
-
-msgid "March"
-msgstr "mars"
-
-msgid "April"
-msgstr "avril"
-
-msgid "June"
-msgstr "juin"
-EOF;
- }
-
- /**
- * Helper function that returns a .po file for testing customized strings.
- */
- public function getCustomOverwritePoFile() {
- return <<< 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"
-
-msgid "January"
-msgstr "januari"
-
-msgid "February"
-msgstr "februari"
-
-msgid "July"
-msgstr "juillet"
-EOF;
- }
-
- /**
- * Helper function that returns a .po file with context.
- */
- public function getPoFileWithContext() {
- // Croatian (code hr) is one of the languages that have a different
- // form for the full name and the abbreviated name for the month of May.
- return <<< 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=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\\n"
-
-msgctxt "Long month name"
-msgid "May"
-msgstr "Svibanj"
-
-msgid "May"
-msgstr "Svi."
-EOF;
- }
-
- /**
- * Helper function that returns a .po file with an empty last item.
- */
- public function getPoFileWithEmptyMsgstr() {
- return <<< 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"
-
-msgid "Operations"
-msgstr ""
-
-EOF;
- }
-
- /**
- * Helper function that returns a .po file with an empty last item.
- */
- public function getPoFileWithMsgstr() {
- return <<< 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"
-
-msgid "Operations"
-msgstr "Műveletek"
-
-msgid "Will not appear in Drupal core, so we can ensure the test passes"
-msgstr ""
-
-EOF;
- }
-
- /**
- * Helper function that returns a .po file with configuration translations.
- */
- public function getPoFileWithConfig() {
- return <<< 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"
-
-msgid "@site is currently under maintenance. We should be back shortly. Thank you for your patience."
-msgstr "@site karbantartás alatt áll. Rövidesen visszatérünk. Köszönjük a türelmet."
-
-msgid "Anonymous user"
-msgstr "Névtelen felhasználó"
-
-EOF;
- }
-
- /**
- * Helper function that returns a .po file with configuration translations.
- */
- public function getPoFileWithConfigDe() {
- return <<< 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"
-
-msgid "Anonymous"
-msgstr "Anonymous German"
-
-msgid "German"
-msgstr "Deutsch"
-
-EOF;
- }
-
-}