From 1a9758c6734bda78a9393eb85cd2244f8bfad952 Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Sat, 9 Oct 2010 13:46:09 +0000 Subject: [PATCH] - Patch #871298 by plach: improve comment language test coverage. --- modules/locale/locale.test | 90 +++++++++++++++++++++++++ modules/locale/tests/locale_test.module | 14 ++++ 2 files changed, 104 insertions(+) diff --git a/modules/locale/locale.test b/modules/locale/locale.test index 20bf5a292955..242458316ede 100644 --- a/modules/locale/locale.test +++ b/modules/locale/locale.test @@ -17,6 +17,7 @@ * - a functional test for configuring a different path alias per language; * - a functional test for multilingual support by content type and on nodes. * - a functional test for multilingual fields. + * - a functional test for comment language. */ @@ -1930,6 +1931,95 @@ class LocaleMultilingualFieldsFunctionalTest extends DrupalWebTestCase { } } +/** + * Functional tests for comment language. + */ +class LocaleCommentLanguageFunctionalTest extends DrupalWebTestCase { + + public static function getInfo() { + return array( + 'name' => 'Comment language', + 'description' => 'Tests for comment language.', + 'group' => 'Locale', + ); + } + + function setUp() { + parent::setUp('locale', 'locale_test'); + + // Create and login user. + $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer languages', 'access administration pages', 'administer content types', 'create article content')); + $this->drupalLogin($admin_user); + + // Add language. + $edit = array('langcode' => 'fr'); + $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language')); + + // Set "Article" content type to use multilingual support. + $edit = array('language_content_type' => 1); + $this->drupalPost('admin/structure/types/manage/article', $edit, t('Save content type')); + + // Enable content language negotiation UI. + variable_set('locale_test_content_language_type', TRUE); + + // Set interface language detection to user and content language detection + // to URL. + $edit = array( + 'language[enabled][locale-user]' => TRUE, + 'language_content[enabled][locale-url]' => TRUE + ); + $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings')); + + // Change user language preference, this way interface language is always + // French no matter what path prefix the URLs have. + $edit = array('language' => 'fr'); + $this->drupalPost("user/{$admin_user->uid}/edit", $edit, t('Save')); + } + + /** + * Test that comment language is properly set. + */ + function testCommentLanguage() { + drupal_static_reset('language_list'); + + // Create two nodes, one for english and one for french, and comment each + // node using both english and french as content language by changing URL + // language prefixes. Meanwhile interface language is always French, which + // is the user language preference. This way we can ensure that node + // language and interface language do not influence comment language, as + // only content language has to. + foreach (language_list() as $node_langcode => $node_language) { + $language_none = LANGUAGE_NONE; + + // Create "Article" content. + $title = $this->randomName(); + $edit = array( + "title" => $title, + "body[$language_none][0][value]" => $this->randomName(), + "language" => $node_langcode, + ); + $this->drupalPost("node/add/article", $edit, t('Save')); + $node = $this->drupalGetNodeByTitle($title); + + foreach (language_list() as $langcode => $language) { + // Post a comment with content language $langcode. + $prefix = empty($language->prefix) ? '' : $language->prefix . '/'; + $edit = array("comment_body[$language_none][0][value]" => $this->randomName()); + $this->drupalPost("{$prefix}node/{$node->nid}", $edit, t('Save')); + + // Check that comment language matches the current content language. + $comment = db_select('comment', 'c') + ->fields('c') + ->condition('nid', $node->nid) + ->orderBy('cid', 'DESC') + ->execute() + ->fetchObject(); + $args = array('%node_language' => $node_langcode, '%comment_language' => $comment->language, '%langcode' => $langcode); + $this->assertEqual($comment->language, $langcode, t('The comment posted with content language %langcode and belonging to the node with language %node_language has language %comment_language', $args)); + } + } + } +} /** * Functional tests for localizing date formats. */ diff --git a/modules/locale/tests/locale_test.module b/modules/locale/tests/locale_test.module index fe166a91c1b3..933de899893e 100644 --- a/modules/locale/tests/locale_test.module +++ b/modules/locale/tests/locale_test.module @@ -17,6 +17,8 @@ function locale_test_locale($op = 'groups') { } /** + * Implements hook_boot(). + * * For testing domain language negotiation, we fake it by setting * the HTTP_HOST here */ @@ -25,3 +27,15 @@ function locale_test_boot() { $_SERVER['HTTP_HOST'] = variable_get('locale_test_domain'); } } + +/** + * Implements hook_language_types_info_alter(). + */ +function locale_test_language_types_info_alter(array &$language_types) { + if (variable_get('locale_test_content_language_type', FALSE)) { + $language_types[LANGUAGE_TYPE_CONTENT] = array( + 'name' => t('Content'), + 'description' => t('Order of language detection methods for content. If a version of content is available in the detected language, it will be displayed.'), + ); + } +} -- GitLab