diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleContentTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleContentTest.php index c55927f..3800a79 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleContentTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleContentTest.php @@ -124,7 +124,7 @@ function testContentTypeLanguageConfiguration() { // Edit the content and ensure correct language is selected. $path = 'node/' . $node->nid . '/edit'; $this->drupalGet($path); - $this->assertRaw('', t('Correct language selected.')); + $this->assertRaw('', 'Correct language selected.'); // Ensure we can change the node language. $edit = array( 'langcode' => 'en', diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleExportTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleExportTest.php index 954e74d..ba4c186 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleExportTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleExportTest.php @@ -65,9 +65,9 @@ function testExportTranslation() { ), t('Export')); // Ensure we have a translation file. - $this->assertRaw('# French translation of Drupal', t('Exported French translation file.')); + $this->assertRaw('# French translation of Drupal', 'Exported French translation file.'); // Ensure our imported translations exist in the file. - $this->assertRaw('msgstr "lundi"', t('French translations present in exported file.')); + $this->assertRaw('msgstr "lundi"', 'French translations present in exported file.'); // Import some more French translations which will be marked as customized. $name = tempnam('temporary://', "po2_") . '.po'; @@ -95,11 +95,11 @@ function testExportTranslation() { ), t('Export')); // Ensure we have a translation file. - $this->assertRaw('# French translation of Drupal', t('Exported French translation file with only customized strings.')); + $this->assertRaw('# French translation of Drupal', 'Exported French translation file with only customized strings.'); // Ensure the customized translations exist in the file. - $this->assertRaw('msgstr "janvier"', t('French custom translation present in exported file.')); + $this->assertRaw('msgstr "janvier"', 'French custom translation present in exported file.'); // Ensure no untranslated strings exist in the file. - $this->assertNoRaw('msgid "February"', t('Untranslated string not present in exported file.')); + $this->assertNoRaw('msgid "February"', 'Untranslated string not present in exported file.'); // Export only untranslated French translations. $this->drupalPost('admin/config/regional/translate/export', array( @@ -110,11 +110,11 @@ function testExportTranslation() { ), t('Export')); // Ensure we have a translation file. - $this->assertRaw('# French translation of Drupal', t('Exported French translation file with only untranslated strings.')); + $this->assertRaw('# French translation of Drupal', 'Exported French translation file with only untranslated strings.'); // Ensure no customized translations exist in the file. - $this->assertNoRaw('msgstr "janvier"', t('French custom translation not present in exported file.')); + $this->assertNoRaw('msgstr "janvier"', 'French custom translation not present in exported file.'); // Ensure the untranslated strings exist in the file. - $this->assertRaw('msgid "February"', t('Untranslated string present in exported file.')); + $this->assertRaw('msgid "February"', 'Untranslated string present in exported file.'); } /** @@ -128,7 +128,7 @@ function testExportTranslationTemplateFile() { // Get the translation template file. $this->drupalPost('admin/config/regional/translate/export', array(), t('Export')); // Ensure we have a translation file. - $this->assertRaw('# LANGUAGE translation of PROJECT', t('Exported translation template file.')); + $this->assertRaw('# LANGUAGE translation of PROJECT', 'Exported translation template file.'); } /** diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleImportFunctionalTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleImportFunctionalTest.php index fcc74d0..198207b 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleImportFunctionalTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleImportFunctionalTest.php @@ -55,17 +55,17 @@ function testStandalonePoFile() { )); $config = config('locale.settings'); // The import should automatically create the corresponding language. - $this->assertRaw(t('The language %language has been created.', array('%language' => 'French')), t('The language has been automatically created.')); + $this->assertRaw(t('The language %language has been created.', array('%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.', array('%number' => 8, '%update' => 0, '%delete' => 0)), t('The translation file was successfully imported.')); + $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%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::state()->get('locale.translation.plurals') ?: array(); - $this->assert($locale_plurals['fr']['plurals'] == 2, t('Plural number initialized.')); + $this->assert($locale_plurals['fr']['plurals'] == 2, 'Plural number initialized.'); // Ensure we were redirected correctly. - $this->assertEqual($this->getUrl(), url('admin/config/regional/translate', array('absolute' => TRUE)), t('Correct page redirection.')); + $this->assertEqual($this->getUrl(), url('admin/config/regional/translate', array('absolute' => TRUE)), 'Correct page redirection.'); // Try importing a .po file with invalid tags. @@ -74,10 +74,10 @@ function testStandalonePoFile() { )); // 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.', array('%number' => 1, '%update' => 0, '%delete' => 0)), t('The translation file was successfully imported.')); + $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%number' => 1, '%update' => 0, '%delete' => 0)), 'The translation file was successfully imported.'); $skip_message = format_plural(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.', array('@url' => url('admin/reports/dblog'))); - $this->assertRaw($skip_message, t('Unsafe strings were skipped.')); + $this->assertRaw($skip_message, 'Unsafe strings were skipped.'); // Try importing a zero byte sized .po file. $this->importPoFile($this->getEmptyPoFile(), array( @@ -93,8 +93,8 @@ function testStandalonePoFile() { 'langcode' => 'fr', 'files[file]' => $name, ), t('Import')); - $this->assertEqual($this->getUrl(), url('admin/config/regional/translate/import', array('absolute' => TRUE)), t('Correct page redirection.')); - $this->assertText(t('File to import not found.'), t('File to import not found message.')); + $this->assertEqual($this->getUrl(), url('admin/config/regional/translate/import', array('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 @@ -104,7 +104,7 @@ function testStandalonePoFile() { )); // 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.', array('%number' => 1, '%update' => 0, '%delete' => 0)), t('The translation file was successfully imported.')); + $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%number' => 1, '%update' => 0, '%delete' => 0)), 'The translation file was successfully imported.'); // Ensure string wasn't overwritten. $search = array( 'string' => 'Montag', @@ -112,11 +112,11 @@ function testStandalonePoFile() { 'translation' => 'translated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText(t('No strings available.'), t('String not overwritten by imported string.')); + $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::state()->get('locale.translation.plurals') ?: array(); - $this->assert($locale_plurals['fr']['plurals'] == 2, t('Plural numbers untouched.')); + $this->assert($locale_plurals['fr']['plurals'] == 2, 'Plural numbers untouched.'); // Try importing a .po file with overriding strings, and ensure existing // strings are overwritten. @@ -126,7 +126,7 @@ function testStandalonePoFile() { )); // 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.', array('%number' => 0, '%update' => 2, '%delete' => 0)), t('The translation file was successfully imported.')); + $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%number' => 0, '%update' => 2, '%delete' => 0)), 'The translation file was successfully imported.'); // Ensure string was overwritten. $search = array( 'string' => 'Montag', @@ -134,10 +134,10 @@ function testStandalonePoFile() { 'translation' => 'translated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertNoText(t('No strings available.'), t('String overwritten by imported string.')); + $this->assertNoText(t('No strings available.'), 'String overwritten by imported string.'); // This import should have changed number of plural forms. $locale_plurals = \Drupal::state()->get('locale.translation.plurals') ?: array(); - $this->assert($locale_plurals['fr']['plurals'] == 3, t('Plural numbers changed.')); + $this->assert($locale_plurals['fr']['plurals'] == 3, 'Plural numbers changed.'); // Importing a .po file and mark its strings as customized strings. $this->importPoFile($this->getCustomPoFile(), array( @@ -146,12 +146,12 @@ function testStandalonePoFile() { )); // 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.', array('%number' => 6, '%update' => 0, '%delete' => 0)), t('The customized translation file was successfully imported.')); + $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%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 lid FROM {locales_target} WHERE customized = :custom', array(':custom' => 1))->rowCount(); - $this->assertEqual($count, 6, t('Customized translations succesfully imported.')); + $this->assertEqual($count, 6, 'Customized translations succesfully imported.'); // Try importing a .po file with overriding strings, and ensure existing // customized strings are kept. @@ -162,7 +162,7 @@ function testStandalonePoFile() { )); // 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.', array('%number' => 1, '%update' => 0, '%delete' => 0)), t('The customized translation file was successfully imported.')); + $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%number' => 1, '%update' => 0, '%delete' => 0)), 'The customized translation file was successfully imported.'); // Ensure string wasn't overwritten. $search = array( 'string' => 'januari', @@ -170,7 +170,7 @@ function testStandalonePoFile() { 'translation' => 'translated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText(t('No strings available.'), t('Customized string not overwritten by imported string.')); + $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. @@ -181,7 +181,7 @@ function testStandalonePoFile() { )); // 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.', array('%number' => 0, '%update' => 2, '%delete' => 0)), t('The customized translation file was successfully imported.')); + $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%number' => 0, '%update' => 2, '%delete' => 0)), 'The customized translation file was successfully imported.'); // Ensure string was overwritten. $search = array( 'string' => 'januari', @@ -189,7 +189,7 @@ function testStandalonePoFile() { 'translation' => 'translated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertNoText(t('No strings available.'), t('Customized string overwritten by imported string.')); + $this->assertNoText(t('No strings available.'), 'Customized string overwritten by imported string.'); } @@ -202,8 +202,8 @@ function testLanguageContext() { 'langcode' => 'hr', )); - $this->assertIdentical(t('May', array(), array('langcode' => 'hr', 'context' => 'Long month name')), 'Svibanj', t('Long month name context is working.')); - $this->assertIdentical(t('May', array(), array('langcode' => 'hr')), 'Svi.', t('Default context is working.')); + $this->assertIdentical(t('May', array(), array('langcode' => 'hr', 'context' => 'Long month name')), 'Svibanj', 'Long month name context is working.'); + $this->assertIdentical(t('May', array(), array('langcode' => 'hr')), 'Svi.', 'Default context is working.'); } /** @@ -217,15 +217,15 @@ function testEmptyMsgstr() { 'langcode' => $langcode, )); - $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%number' => 1, '%update' => 0, '%delete' => 0)), t('The translation file was successfully imported.')); - $this->assertIdentical(t('Operations', array(), array('langcode' => $langcode)), 'Műveletek', t('String imported and translated.')); + $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%number' => 1, '%update' => 0, '%delete' => 0)), 'The translation file was successfully imported.'); + $this->assertIdentical(t('Operations', array(), array('langcode' => $langcode)), 'Műveletek', 'String imported and translated.'); // Try importing a .po file. $this->importPoFile($this->getPoFileWithEmptyMsgstr(), array( '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.', array('%number' => 0, '%update' => 0, '%delete' => 1)), t('The translation file was successfully imported.')); + $this->assertRaw(t('One translation file imported. %number translations were added, %update translations were updated and %delete translations were removed.', array('%number' => 0, '%update' => 0, '%delete' => 1)), 'The translation file was successfully imported.'); $str = "Operations"; $search = array( @@ -234,7 +234,7 @@ function testEmptyMsgstr() { 'translation' => 'untranslated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText($str, t('Search found the string as untranslated.')); + $this->assertText($str, 'Search found the string as untranslated.'); } /** diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleJavascriptTranslation.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleJavascriptTranslation.php index de5dd08..9ad0439 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleJavascriptTranslation.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleJavascriptTranslation.php @@ -96,12 +96,17 @@ function testFileParsing() { $args = array('%source' => $str, '%context' => $context); // Make sure that the string was found in the file. - $this->assertTrue(isset($source_strings[$str]), t("Found source string: %source", $args)); + $this->assertTrue(isset($source_strings[$str]), format_string("Found source string: %source", $args)); // Make sure that the proper context was matched. - $this->assertTrue(isset($source_strings[$str]) && $source_strings[$str] === $context, strlen($context) > 0 ? t("Context for %source is %context", $args) : t("Context for %source is blank", $args)); + $test = isset($source_strings[$str]) && $source_strings[$str] === $context; + if (strlen($context) > 0) { + $this->assertTrue($test, format_string('Context for %source is %context', $args)); + } + else { + $this->assertTrue($test, format_string('Context for %source is blank', $args)); + } } - - $this->assertEqual(count($source_strings), count($test_strings), t("Found correct number of source strings.")); + $this->assertEqual(count($source_strings), count($test_strings), "Found correct number of source strings."); } } diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleLibraryInfoAlterTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleLibraryInfoAlterTest.php index 0581124..912d657 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleLibraryInfoAlterTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleLibraryInfoAlterTest.php @@ -38,6 +38,6 @@ public static function getInfo() { public function testLibraryInfoAlter() { drupal_add_library('system', 'jquery.ui.datepicker'); $scripts = drupal_get_js(); - $this->assertTrue(strpos($scripts, 'locale.datepicker.js'), t('locale.datepicker.js added to scripts.')); + $this->assertTrue(strpos($scripts, 'locale.datepicker.js'), 'locale.datepicker.js added to scripts.'); } } diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocalePathTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocalePathTest.php index 77b27c8..e21b09d 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocalePathTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocalePathTest.php @@ -69,7 +69,7 @@ function testPathLanguageConfiguration() { // Check that the "xx" front page is readily available because path prefix // negotiation is pre-configured. $this->drupalGet($prefix); - $this->assertText(t('Welcome to Drupal'), t('The "xx" front page is readibly available.')); + $this->assertText(t('Welcome to Drupal'), 'The "xx" front page is readibly available.'); // Create a node. $node = $this->drupalCreateNode(array('type' => 'page')); @@ -95,11 +95,11 @@ function testPathLanguageConfiguration() { // Confirm English language path alias works. $this->drupalGet($english_path); - $this->assertText($node->label(), t('English alias works.')); + $this->assertText($node->label(), 'English alias works.'); // Confirm custom language path alias works. $this->drupalGet($prefix . '/' . $custom_language_path); - $this->assertText($node->label(), t('Custom language alias works.')); + $this->assertText($node->label(), 'Custom language alias works.'); // Create a custom path. $custom_path = $this->randomName(8); @@ -112,10 +112,10 @@ function testPathLanguageConfiguration() { ); $this->container->get('path.crud')->save($edit['source'], $edit['alias'], $edit['langcode']); $lookup_path = $this->container->get('path.alias_manager')->getPathAlias('node/' . $node->nid, 'en'); - $this->assertEqual($english_path, $lookup_path, t('English language alias has priority.')); + $this->assertEqual($english_path, $lookup_path, 'English language alias has priority.'); // Same check for language 'xx'. $lookup_path = $this->container->get('path.alias_manager')->getPathAlias('node/' . $node->nid, $prefix); - $this->assertEqual($custom_language_path, $lookup_path, t('Custom language alias has priority.')); + $this->assertEqual($custom_language_path, $lookup_path, 'Custom language alias has priority.'); $this->container->get('path.crud')->delete($edit); // Create language nodes to check priority of aliases. @@ -142,17 +142,17 @@ function testPathLanguageConfiguration() { $this->drupalGet(''); $custom_path_url = base_path() . $GLOBALS['script_path'] . $custom_path; $elements = $this->xpath('//a[@href=:href and .=:title]', array(':href' => $custom_path_url, ':title' => $first_node->label())); - $this->assertTrue(!empty($elements), t('First node links to the path alias.')); + $this->assertTrue(!empty($elements), 'First node links to the path alias.'); $elements = $this->xpath('//a[@href=:href and .=:title]', array(':href' => $custom_path_url, ':title' => $second_node->label())); - $this->assertTrue(!empty($elements), t('Second node links to the path alias.')); + $this->assertTrue(!empty($elements), 'Second node links to the path alias.'); // Confirm that the custom path leads to the first node. $this->drupalGet($custom_path); - $this->assertText($first_node->label(), t('Custom alias returns first node.')); + $this->assertText($first_node->label(), 'Custom alias returns first node.'); // Confirm that the custom path with prefix leads to the second node. $this->drupalGet($prefix . '/' . $custom_path); - $this->assertText($second_node->label(), t('Custom alias with prefix returns second node.')); + $this->assertText($second_node->label(), 'Custom alias with prefix returns second node.'); } } diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocalePluralFormatTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocalePluralFormatTest.php index d7ce9ab..15a1c55 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocalePluralFormatTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocalePluralFormatTest.php @@ -149,9 +149,9 @@ function testPluralEditExport() { 'langcode' => 'fr', ), t('Export')); // Ensure we have a translation file. - $this->assertRaw('# French translation of Drupal', t('Exported French translation file.')); + $this->assertRaw('# French translation of Drupal', 'Exported French translation file.'); // Ensure our imported translations exist in the file. - $this->assertRaw("msgid \"Monday\"\nmsgstr \"lundi\"", t('French translations present in exported file.')); + $this->assertRaw("msgid \"Monday\"\nmsgstr \"lundi\"", 'French translations present in exported file.'); // Check for plural export specifically. $this->assertRaw("msgid \"1 hour\"\nmsgid_plural \"@count hours\"\nmsgstr[0] \"@count heure\"\nmsgstr[1] \"@count heures\"", 'Plural translations exported properly.'); @@ -160,11 +160,11 @@ function testPluralEditExport() { 'langcode' => 'hr', ), t('Export')); // Ensure we have a translation file. - $this->assertRaw('# Croatian translation of Drupal', t('Exported Croatian translation file.')); + $this->assertRaw('# Croatian translation of Drupal', 'Exported Croatian translation file.'); // Ensure our imported translations exist in the file. - $this->assertRaw("msgid \"Monday\"\nmsgstr \"Ponedjeljak\"", t('Croatian translations present in exported file.')); + $this->assertRaw("msgid \"Monday\"\nmsgstr \"Ponedjeljak\"", 'Croatian translations present in exported file.'); // Check for plural export specifically. - $this->assertRaw("msgid \"1 hour\"\nmsgid_plural \"@count hours\"\nmsgstr[0] \"@count sat\"\nmsgstr[1] \"@count sata\"\nmsgstr[2] \"@count sati\"", t('Plural translations exported properly.')); + $this->assertRaw("msgid \"1 hour\"\nmsgid_plural \"@count hours\"\nmsgstr[0] \"@count sat\"\nmsgstr[1] \"@count sata\"\nmsgstr[2] \"@count sati\"", 'Plural translations exported properly.'); // Check if the source appears on the translation page. $this->drupalGet('admin/config/regional/translate'); @@ -250,15 +250,15 @@ function testPluralEditExport() { ), t('Export')); // Check for plural export specifically. $this->assertRaw("msgid \"1 hour\"\nmsgid_plural \"@count hours\"\nmsgstr[0] \"@count heure edited\"\nmsgstr[1] \"@count heures\"", 'Edited French plural translations for hours exported properly.'); - $this->assertRaw("msgid \"1 day\"\nmsgid_plural \"@count days\"\nmsgstr[0] \"1 jour\"\nmsgstr[1] \"@count jours\"", t('Added French plural translations for days exported properly.')); + $this->assertRaw("msgid \"1 day\"\nmsgid_plural \"@count days\"\nmsgstr[0] \"1 jour\"\nmsgstr[1] \"@count jours\"", 'Added French plural translations for days exported properly.'); // Get the Croatian translations. $this->drupalPost('admin/config/regional/translate/export', array( 'langcode' => 'hr', ), t('Export')); // Check for plural export specifically. - $this->assertRaw("msgid \"1 hour\"\nmsgid_plural \"@count hours\"\nmsgstr[0] \"@count sat\"\nmsgstr[1] \"@count sata edited\"\nmsgstr[2] \"@count sati\"", t('Edited Croatian plural translations exported properly.')); - $this->assertRaw("msgid \"1 day\"\nmsgid_plural \"@count days\"\nmsgstr[0] \"@count dan\"\nmsgstr[1] \"@count dana\"\nmsgstr[2] \"@count dana\"", t('Added Croatian plural translations exported properly.')); + $this->assertRaw("msgid \"1 hour\"\nmsgid_plural \"@count hours\"\nmsgstr[0] \"@count sat\"\nmsgstr[1] \"@count sata edited\"\nmsgstr[2] \"@count sati\"", 'Edited Croatian plural translations exported properly.'); + $this->assertRaw("msgid \"1 day\"\nmsgid_plural \"@count days\"\nmsgstr[0] \"@count dan\"\nmsgstr[1] \"@count dana\"\nmsgstr[2] \"@count dana\"", 'Added Croatian plural translations exported properly.'); } /** diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php index 63ef579..3f58726 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php @@ -38,7 +38,7 @@ function testEnglishTranslation() { $this->drupalLogin($admin_user); $this->drupalPost('admin/config/regional/language/edit/en', array('locale_translate_english' => TRUE), t('Save language')); - $this->assertLinkByHref('/admin/config/regional/translate/translate?langcode=en', 0, t('Enabled interface translation to English.')); + $this->assertLinkByHref('/admin/config/regional/translate/translate?langcode=en', 0, 'Enabled interface translation to English.'); } /** @@ -75,8 +75,8 @@ function testStringTranslation() { t($name, array(), array('langcode' => $langcode)); // Reset locale cache. $this->container->get('string_translation')->reset(); - $this->assertRaw('"edit-languages-' . $langcode .'-weight"', t('Language code found.')); - $this->assertText(t($name), t('Test language added.')); + $this->assertRaw('"edit-languages-' . $langcode .'-weight"', 'Language code found.'); + $this->assertText(t($name), 'Test language added.'); $this->drupalLogout(); // Search for the name and translate it. @@ -87,7 +87,7 @@ function testStringTranslation() { 'translation' => 'untranslated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText($name, t('Search found the string as untranslated.')); + $this->assertText($name, 'Search found the string as untranslated.'); // Assume this is the only result, given the random name. // We save the lid from the path. @@ -97,15 +97,15 @@ function testStringTranslation() { $lid => $this->randomName(), ); // No t() here, it's surely not translated yet. - $this->assertText($name, t('name found on edit screen.')); - $this->assertNoOption('edit-langcode', 'en', t('No way to translate the string to English.')); + $this->assertText($name, 'name found on edit screen.'); + $this->assertNoOption('edit-langcode', 'en', 'No way to translate the string to English.'); $this->drupalLogout(); $this->drupalLogin($admin_user); $this->drupalPost('admin/config/regional/language/edit/en', array('locale_translate_english' => TRUE), t('Save language')); $this->drupalLogout(); $this->drupalLogin($translate_user); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText($name, t('Search found the string as untranslated.')); + $this->assertText($name, 'Search found the string as untranslated.'); // Assume this is the only result, given the random name. $textarea = current($this->xpath('//textarea')); @@ -114,15 +114,15 @@ function testStringTranslation() { $lid => $translation, ); $this->drupalPost('admin/config/regional/translate/translate', $edit, t('Save translations')); - $this->assertText(t('The strings have been saved.'), t('The strings have been saved.')); - $this->assertEqual($this->getUrl(), url('admin/config/regional/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.')); + $this->assertText(t('The strings have been saved.'), 'The strings have been saved.'); + $this->assertEqual($this->getUrl(), url('admin/config/regional/translate/translate', array('absolute' => TRUE)), 'Correct page redirection.'); $search = array( 'string' => $name, 'langcode' => $langcode, 'translation' => 'translated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertRaw($translation, t('Non-English translation properly saved.')); + $this->assertRaw($translation, 'Non-English translation properly saved.'); $search = array( @@ -143,19 +143,19 @@ function testStringTranslation() { 'translation' => 'translated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertRaw($translation_to_en, t('English translation properly saved.')); + $this->assertRaw($translation_to_en, 'English translation properly saved.'); // Reset the tag cache on the tester side in order to pick up the call to // cache()->deleteTags() on the tested side. drupal_static_reset('Drupal\Core\Cache\CacheBackendInterface::tagCache'); - $this->assertTrue($name != $translation && t($name, array(), array('langcode' => $langcode)) == $translation, t('t() works for non-English.')); + $this->assertTrue($name != $translation && t($name, array(), array('langcode' => $langcode)) == $translation, 't() works for non-English.'); // Refresh the locale() cache to get fresh data from t() below. We are in // the same HTTP request and therefore t() is not refreshed by saving the // translation above. $this->container->get('string_translation')->reset(); // Now we should get the proper fresh translation from t(). - $this->assertTrue($name != $translation_to_en && t($name, array(), array('langcode' => 'en')) == $translation_to_en, t('t() works for English.')); + $this->assertTrue($name != $translation_to_en && t($name, array(), array('langcode' => 'en')) == $translation_to_en, 't() works for English.'); $this->assertTrue(t($name, array(), array('langcode' => Language::LANGCODE_SYSTEM)) == $name, 't() works for Language::LANGCODE_SYSTEM.'); $search = array( @@ -164,7 +164,7 @@ function testStringTranslation() { 'translation' => 'untranslated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText(t('No strings available.'), t('String is translated.')); + $this->assertText(t('No strings available.'), 'String is translated.'); $this->drupalLogout(); @@ -175,11 +175,11 @@ function testStringTranslation() { $this->drupalPost($path, array(), t('Delete')); // We need raw here because %language and %langcode will add HTML. $t_args = array('%language' => $name, '%langcode' => $langcode); - $this->assertRaw(t('The %language (%langcode) language has been removed.', $t_args), t('The test language has been removed.')); + $this->assertRaw(t('The %language (%langcode) language has been removed.', $t_args), 'The test language has been removed.'); // Reload to remove $name. $this->drupalGet($path); // Verify that language is no longer found. - $this->assertResponse(404, t('Language no longer found.')); + $this->assertResponse(404, 'Language no longer found.'); $this->drupalLogout(); // Delete the string. @@ -197,7 +197,7 @@ function testStringTranslation() { $lid => '', ); $this->drupalPost('admin/config/regional/translate/translate', $edit, t('Save translations')); - $this->assertRaw($name, t('The strings have been saved.')); + $this->assertRaw($name, 'The strings have been saved.'); $this->drupalLogin($translate_user); $search = array( 'string' => $name, @@ -205,7 +205,7 @@ function testStringTranslation() { 'translation' => 'untranslated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertNoText(t('No strings available.'), t('The translation has been removed')); + $this->assertNoText(t('No strings available.'), 'The translation has been removed'); } /* @@ -261,14 +261,14 @@ function testJavaScriptTranslation() { $locale_javascripts = \Drupal::state()->get('locale.translation.javascript') ?: array(); $js_file = 'public://' . $config->get('javascript.directory') . '/' . $langcode . '_' . $locale_javascripts[$langcode] . '.js'; - $this->assertTrue($result = file_exists($js_file), t('JavaScript file created: %file', array('%file' => $result ? $js_file : t('not found')))); + $this->assertTrue($result = file_exists($js_file), format_string('JavaScript file created: %file', array('%file' => $result ? $js_file : 'not found'))); // Test JavaScript translation rebuilding. file_unmanaged_delete($js_file); - $this->assertTrue($result = !file_exists($js_file), t('JavaScript file deleted: %file', array('%file' => $result ? $js_file : t('found')))); + $this->assertTrue($result = !file_exists($js_file), format_string('JavaScript file deleted: %file', array('%file' => $result ? $js_file : 'found'))); cache_invalidate_tags(array('content' => TRUE)); _locale_rebuild_js($langcode); - $this->assertTrue($result = file_exists($js_file), t('JavaScript file rebuilt: %file', array('%file' => $result ? $js_file : t('not found')))); + $this->assertTrue($result = file_exists($js_file), format_string('JavaScript file rebuilt: %file', array('%file' => $result ? $js_file : 'not found'))); } /** @@ -322,8 +322,8 @@ function testStringValidation() { $this->drupalPost('admin/config/regional/translate/translate', $edit, t('Save translations')); // Check for a form error on the textarea. $form_class = $this->xpath('//form[@id="locale-translate-edit-form"]//textarea/@class'); - $this->assertNotIdentical(FALSE, strpos($form_class[0], 'error'), t('The string was rejected as unsafe.')); - $this->assertNoText(t('The string has been saved.'), t('The string was not saved.')); + $this->assertNotIdentical(FALSE, strpos($form_class[0], 'error'), 'The string was rejected as unsafe.'); + $this->assertNoText(t('The string has been saved.'), 'The string was not saved.'); } } @@ -383,7 +383,7 @@ function testStringSearch() { // assertText() seems to remove the input field where $name always could be // found, so this is not a false assert. See how assertNoText succeeds // later. - $this->assertText($name, t('Search found the string.')); + $this->assertText($name, 'Search found the string.'); // Ensure untranslated string doesn't appear if searching on 'only // translated strings'. @@ -393,7 +393,7 @@ function testStringSearch() { 'translation' => 'translated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText(t('No strings available.'), t("Search didn't find the string.")); + $this->assertText(t('No strings available.'), "Search didn't find the string."); // Ensure untranslated string appears if searching on 'only untranslated // strings'. @@ -403,7 +403,7 @@ function testStringSearch() { 'translation' => 'untranslated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertNoText(t('No strings available.'), t('Search found the string.')); + $this->assertNoText(t('No strings available.'), 'Search found the string.'); // Add translation. // Assume this is the only result, given the random name. @@ -423,7 +423,7 @@ function testStringSearch() { 'translation' => 'translated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertNoText(t('No strings available.'), t('Search found the translation.')); + $this->assertNoText(t('No strings available.'), 'Search found the translation.'); // Ensure translated source string doesn't appear if searching on 'only // untranslated strings'. @@ -433,7 +433,7 @@ function testStringSearch() { 'translation' => 'untranslated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText(t('No strings available.'), t("Search didn't find the source string.")); + $this->assertText(t('No strings available.'), "Search didn't find the source string."); // Ensure translated string doesn't appear if searching on 'only // untranslated strings'. @@ -443,7 +443,7 @@ function testStringSearch() { 'translation' => 'untranslated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText(t('No strings available.'), t("Search didn't find the translation.")); + $this->assertText(t('No strings available.'), "Search didn't find the translation."); // Ensure translated string does appear if searching on the custom language. $search = array( @@ -452,7 +452,7 @@ function testStringSearch() { 'translation' => 'all', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertNoText(t('No strings available.'), t('Search found the translation.')); + $this->assertNoText(t('No strings available.'), 'Search found the translation.'); // Ensure translated string doesn't appear if searching in System (English). $search = array( @@ -461,7 +461,7 @@ function testStringSearch() { 'translation' => 'all', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText(t('No strings available.'), t("Search didn't find the translation.")); + $this->assertText(t('No strings available.'), "Search didn't find the translation."); // Search for a string that isn't in the system. $unavailable_string = $this->randomName(16); @@ -471,7 +471,7 @@ function testStringSearch() { 'translation' => 'all', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText(t('No strings available.'), t("Search didn't find the invalid string.")); + $this->assertText(t('No strings available.'), "Search didn't find the invalid string."); } /** diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUninstallTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUninstallTest.php index c53ed7a..e4bcc6a 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUninstallTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUninstallTest.php @@ -68,7 +68,11 @@ function testUninstallProcess() { global $user; $user = drupal_anonymous_user(); +<<<<<<< HEAD $this->assertEqual(language(Language::TYPE_INTERFACE)->id, $this->langcode, t('Current language: %lang', array('%lang' => language(Language::TYPE_INTERFACE)->id))); +======= + $this->assertEqual(language(Language::TYPE_INTERFACE)->langcode, $this->langcode, format_string('Current language: %lang', array('%lang' => language(Language::TYPE_INTERFACE)->langcode))); +>>>>>>> Rerollong the patch for the locale module https://drupal.org/node/1797364#comment-7573647 // Enable multilingual workflow option for articles. language_save_default_configuration('node', 'article', array('langcode' => 'site_default', 'language_show' => TRUE)); @@ -89,7 +93,7 @@ function testUninstallProcess() { $config = config('locale.settings'); $locale_javascripts = \Drupal::state()->get('locale.translation.javascript') ?: array(); $js_file = 'public://' . $config->get('javascript.directory') . '/fr_' . $locale_javascripts['fr'] . '.js'; - $this->assertTrue($result = file_exists($js_file), t('JavaScript file created: %file', array('%file' => $result ? $js_file : t('none')))); + $this->assertTrue(file_exists($js_file), format_string('JavaScript file created: %file', array('%file' => $js_file))); // Disable string caching. $config->set('cache_strings', 0)->save(); @@ -115,31 +119,35 @@ function testUninstallProcess() { // Visit the front page. $this->drupalGet(''); // Check the init language logic. +<<<<<<< HEAD $this->assertEqual(language(Language::TYPE_INTERFACE)->id, 'en', t('Language after uninstall: %lang', array('%lang' => language(Language::TYPE_INTERFACE)->id))); +======= + $this->assertEqual(language(Language::TYPE_INTERFACE)->langcode, 'en', format_string('Language after uninstall: %lang', array('%lang' => language(Language::TYPE_INTERFACE)->langcode))); +>>>>>>> Rerollong the patch for the locale module https://drupal.org/node/1797364#comment-7573647 // Check JavaScript files deletion. - $this->assertTrue($result = !file_exists($js_file), t('JavaScript file deleted: %file', array('%file' => $result ? $js_file : t('found')))); + $this->assertFalse(file_exists($js_file), format_string('JavaScript file deleted: %file', array('%file' => $js_file))); // Check language count. $language_count = variable_get('language_count', 1); - $this->assertEqual($language_count, 1, t('Language count: %count', array('%count' => $language_count))); + $this->assertEqual($language_count, 1, format_string('Language count: %count', array('%count' => $language_count))); // Check language negotiation. require_once DRUPAL_ROOT . '/core/includes/language.inc'; - $this->assertTrue(count(language_types_get_all()) == count(language_types_get_default()), t('Language types reset')); + $this->assertTrue(count(language_types_get_all()) == count(language_types_get_default()), 'Language types reset'); $language_negotiation = language_negotiation_method_get_first(Language::TYPE_INTERFACE) == LANGUAGE_NEGOTIATION_SELECTED; - $this->assertTrue($language_negotiation, t('Interface language negotiation: %setting', array('%setting' => t($language_negotiation ? 'none' : 'set')))); + $this->assertTrue($language_negotiation, format_string('Interface language negotiation: %setting', array('%setting' => $language_negotiation ? 'none' : 'set'))); $language_negotiation = language_negotiation_method_get_first(Language::TYPE_CONTENT) == LANGUAGE_NEGOTIATION_SELECTED; - $this->assertTrue($language_negotiation, t('Content language negotiation: %setting', array('%setting' => t($language_negotiation ? 'none' : 'set')))); + $this->assertTrue($language_negotiation, format_string('Content language negotiation: %setting', array('%setting' => $language_negotiation ? 'none' : 'set'))); $language_negotiation = language_negotiation_method_get_first(Language::TYPE_URL) == LANGUAGE_NEGOTIATION_SELECTED; - $this->assertTrue($language_negotiation, t('URL language negotiation: %setting', array('%setting' => t($language_negotiation ? 'none' : 'set')))); + $this->assertTrue($language_negotiation, format_string('URL language negotiation: %setting', array('%setting' => $language_negotiation ? 'none' : 'set'))); // Check language negotiation method settings. - $this->assertFalse(config('language.negotiation')->get('url.source'), t('URL language negotiation method indicator settings cleared.')); - $this->assertFalse(config('language.negotiation')->get('session.parameter'), t('Visit language negotiation method settings cleared.')); + $this->assertFalse(config('language.negotiation')->get('url.source'), 'URL language negotiation method indicator settings cleared.'); + $this->assertFalse(config('language.negotiation')->get('session.parameter'), 'Visit language negotiation method settings cleared.'); // Check JavaScript parsed. $javascript_parsed_count = count(\Drupal::state()->get('system.javascript_parsed') ?: array()); - $this->assertEqual($javascript_parsed_count, 0, t('JavaScript parsed count: %count', array('%count' => $javascript_parsed_count))); + $this->assertEqual($javascript_parsed_count, 0, format_string('JavaScript parsed count: %count', array('%count' => $javascript_parsed_count))); } } diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php index 44bfabe..870648f 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php @@ -38,7 +38,253 @@ function setUp() { // We use German as test language. This language must match the translation // file that come with the locale_test module (test.de.po) and can therefore // not be chosen randomly. + $this->addLanguage('de'); + + $this->drupalPost('admin/config/regional/language/add', array('predefined_langcode' => 'de'), t('Add language')); + + // Setup timestamps to identify old and new translation sources. + $this->timestamp_old = REQUEST_TIME - 300; + $this->timestamp_medium = REQUEST_TIME - 200; + $this->timestamp_new = REQUEST_TIME - 100; + $this->timestamp_now = REQUEST_TIME; + } + + /** + * Sets the value of the default translations directory. + * + * @param string $path + * Path of the translations directory relative to the drupal installation + * directory. + */ + private function setTranslationsDirectory($path) { + $this->tranlations_directory = $path; + file_prepare_directory($path, FILE_CREATE_DIRECTORY); + config('locale.settings')->set('translation.path', $path)->save(); + } + + /** + * Adds a language. + * + * @param $langcode + * The language code of the language to add. + */ + function addLanguage($langcode) { + $edit = array('predefined_langcode' => $langcode); + $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language')); + drupal_static_reset('language_list'); + $this->assertTrue(language_load($langcode), format_string('Language %langcode added.', array('%langcode' => $langcode))); + } + + /** + * Creates a translation file and tests its timestamp. + * + * @param string $path + * Path of the file relative to the public file path. + * @param string $filename + * Name of the file to create. + * @param integer $timestamp + * Timestamp to set the file to. Defaults to current time. + * @param array $translations + * Array of source/target value translation strings. Only singular strings + * are supported, no plurals. No double quotes are allowed in source and + * translations strings. + */ + private function makePoFile($path, $filename, $timestamp = NULL, $translations = array()) { + $timestamp = $timestamp ? $timestamp : REQUEST_TIME; + $path = 'public://' . $path; + $text = ''; + $po_header = << 1);\\n" + +EOF; + + // Convert array of translations to Gettext source and translation strings. + if ($translations) { + foreach ($translations as $source => $target) { + $text .= 'msgid "'. $source . '"' . "\n"; + $text .= 'msgstr "'. $target . '"' . "\n"; + } + } + + file_prepare_directory($path, FILE_CREATE_DIRECTORY); + $file = entity_create('file', array( + 'uid' => 1, + 'filename' => $filename, + 'uri' => $path . '/' . $filename, + 'filemime' => 'text/x-gettext-translation', + 'timestamp' => $timestamp, + 'status' => FILE_STATUS_PERMANENT, + )); + file_put_contents($file->getFileUri(), $po_header . $text); + touch(drupal_realpath($file->getFileUri()), $timestamp); + $file->save(); + } + + /** + * Setup the environment containting local and remote translation files. + * + * Update tests require a simulated environment for local and remote files. + * Normally remote files are located at a remote server (e.g. ftp.drupal.org). + * For testing we can not rely on this. A directory in the file system of the + * test site is designated for remote files and is addressed using an absolute + * URL. Because Drupal does not allow files with a po extension to be accessed + * (denied in .htaccess) the translation files get a _po extension. Another + * directory is designated for local translation files. + * + * The environment is set up with the following files. File creation times are + * set to create different variations in test conditions. + * contrib_module_one + * - remote file: timestamp new + * - local file: timestamp old + * contrib_module_two + * - remote file: timestamp old + * - local file: timestamp new + * contrib_module_three + * - remote file: timestamp old + * - local file: timestamp old + * custom_module_one + * - local file: timestamp new + * Time stamp of current translation set by setCurrentTranslations() is always + * timestamp medium. This makes it easy to predict which translation will be + * imported. + */ + private function setTranslationFiles() { + $config = config('locale.settings'); + + // A flag is set to let the locale_test module replace the project data with + // a set of test projects which match the below project files. + \Drupal::state()->set('locale.test_projects_alter', TRUE); + + // Setup the environment. + $public_path = variable_get('file_public_path', conf_path() . '/files'); + $this->setTranslationsDirectory($public_path . '/local'); + $config->set('translation.default_filename', '%project-%version.%language._po')->save(); + + // Setting up sets of translations for the translation files. + $translations_one = array('January' => 'Januar_1', 'February' => 'Februar_1', 'March' => 'Marz_1'); + $translations_two = array( 'February' => 'Februar_2', 'March' => 'Marz_2', 'April' => 'April_2'); + $translations_three = array('April' => 'April_3', 'May' => 'Mai_3', 'June' => 'Juni_3'); + + // Add a number of files to the local file system to serve as remote + // translation server and match the project definitions set in + // locale_test_locale_translation_projects_alter(). + $this->makePoFile('remote/8.x/contrib_module_one', 'contrib_module_one-8.x-1.1.de._po', $this->timestamp_new, $translations_one); + $this->makePoFile('remote/8.x/contrib_module_two', 'contrib_module_two-8.x-2.0-beta4.de._po', $this->timestamp_old, $translations_two); + $this->makePoFile('remote/8.x/contrib_module_three', 'contrib_module_three-8.x-1.0.de._po', $this->timestamp_old, $translations_three); + + // Add a number of files to the local file system to serve as local + // translation files and match the project definitions set in + // locale_test_locale_translation_projects_alter(). + $this->makePoFile('local', 'contrib_module_one-8.x-1.1.de._po', $this->timestamp_old, $translations_one); + $this->makePoFile('local', 'contrib_module_two-8.x-2.0-beta4.de._po', $this->timestamp_new, $translations_two); + $this->makePoFile('local', 'contrib_module_three-8.x-1.0.de._po', $this->timestamp_old, $translations_three); + $this->makePoFile('local', 'custom_module_one.de.po', $this->timestamp_new); + } + + /** + * Setup existing translations in the database and set up the status of + * existing translations. + */ + private function setCurrentTranslations() { + // Add non customized translations to the database. + $langcode = 'de'; + $context = ''; + $non_customized_translations = array( + 'March' => 'Marz', + 'June' => 'Juni', + ); + foreach ($non_customized_translations as $source => $translation) { + $string = $this->container->get('locale.storage')->createString(array( + 'source' => $source, + 'context' => $context, + )) + ->save(); + $target = $this->container->get('locale.storage')->createTranslation(array( + 'lid' => $string->getId(), + 'language' => $langcode, + 'translation' => $translation, + 'customized' => LOCALE_NOT_CUSTOMIZED, + ))->save(); + } + + // Add customized translations to the database. + $customized_translations = array( + 'January' => 'Januar_customized', + 'February' => 'Februar_customized', + 'May' => 'Mai_customized', + ); + foreach ($customized_translations as $source => $translation) { + $string = $this->container->get('locale.storage')->createString(array( + 'source' => $source, + 'context' => $context, + )) + ->save(); + $target = $this->container->get('locale.storage')->createTranslation(array( + 'lid' => $string->getId(), + 'language' => $langcode, + 'translation' => $translation, + 'customized' => LOCALE_CUSTOMIZED, + ))->save(); + } + + // Add a state of current translations in locale_files. + $default = array( + 'langcode' => $langcode, + 'uri' => '', + 'timestamp' => $this->timestamp_medium, + 'last_checked' => $this->timestamp_medium, + ); + $data[] = array( + 'project' => 'contrib_module_one', + 'filename' => 'contrib_module_one-8.x-1.1.de._po', + 'version' => '8.x-1.1', + ); + $data[] = array( + 'project' => 'contrib_module_two', + 'filename' => 'contrib_module_two-8.x-2.0-beta4.de._po', + 'version' => '8.x-2.0-beta4', + ); + $data[] = array( + 'project' => 'contrib_module_three', + 'filename' => 'contrib_module_three-8.x-1.0.de._po', + 'version' => '8.x-1.0', + ); + $data[] = array( + 'project' => 'custom_module_one', + 'filename' => 'custom_module_one.de.po', + 'version' => '', + ); + foreach ($data as $file) { + $file = (object) array_merge($default, $file); + drupal_write_record('locale_file', $file); + } + } + + /** + * Checks the translation of a string. + * + * @param string $source + * Translation source string + * @param string $translation + * Translation to check. Use empty string to check for a not existing + * translation. + * @param string $langcode + * Language code of the language to translate to. + * @param string $message + * (optional) A message to display with the assertion. + */ + function assertTranslation($source, $translation, $langcode, $message = '') { + $db_translation = db_query('SELECT translation FROM {locales_target} lt INNER JOIN {locales_source} ls ON ls.lid = lt.lid WHERE ls.source = :source AND lt.language = :langcode', array(':source' => $source, ':langcode' => $langcode))->fetchField(); + $db_translation = $db_translation == FALSE ? '' : $db_translation; + $this->assertEqual($translation, $db_translation, $message ? $message : format_string('Correct translation of %source (%language)', array('%source' => $source, '%language' => $langcode))); + } /** @@ -443,8 +689,8 @@ function testEnableCustomLanguage() { // Ensure the translation file is automatically imported when the language // was added. - $this->assertText(t('One translation file imported.'), t('Language file automatically imported.')); - $this->assertText(t('One translation string was skipped because of disallowed or malformed HTML'), t('Language file automatically imported.')); + $this->assertText(t('One translation file imported.'), 'Language file automatically imported.'); + $this->assertText(t('One translation string was skipped because of disallowed or malformed HTML'), 'Language file automatically imported.'); // Ensure the strings were successfully imported. $search = array( @@ -453,7 +699,7 @@ function testEnableCustomLanguage() { 'translation' => 'translated', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertNoText(t('No strings available.'), t('String successfully imported.')); + $this->assertNoText(t('No strings available.'), 'String successfully imported.'); // Ensure the multiline string was imported. $search = array( @@ -462,7 +708,7 @@ function testEnableCustomLanguage() { 'translation' => 'all', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText('Multiline translation string to make sure that import works with it.', t('String successfully imported.')); + $this->assertText('Multiline translation string to make sure that import works with it.', 'String successfully imported.'); // Ensure 'Allowed HTML source string' was imported but the translation for // 'Another allowed HTML source string' was not because it contains invalid @@ -473,8 +719,8 @@ function testEnableCustomLanguage() { 'translation' => 'all', ); $this->drupalPost('admin/config/regional/translate/translate', $search, t('Filter')); - $this->assertText('Allowed HTML source string', t('String successfully imported.')); - $this->assertNoText('Another allowed HTML source string', t('String with disallowed translation not imported.')); + $this->assertText('Allowed HTML source string', 'String successfully imported.'); + $this->assertNoText('Another allowed HTML source string', 'String with disallowed translation not imported.'); } }