'Block translation', 'group' => 'Internationalization', 'description' => 'Block translation functions' ); } function setUp() { parent::setUp('118n', 'locale', 'i18nstrings', 'i18nblocks'); $this->addLanguage('es'); $this->addLanguage('de'); // Create and login user $admin_user = $this->drupalCreateUser(array('administer blocks')); $this->drupalLogin($admin_user); } function testBlockTranslation() { // Create a translatable block $box = $this->i18nCreateBox(array('language' => I18N_BLOCK_LOCALIZE)); $i18nblock = i18nblocks_load('block', $box->bid); $this->assertTrue($i18nblock->ibid && $i18nblock->language == I18N_BLOCK_LOCALIZE, "The block has been created with the right i18n settings."); // Create translations for title and body, source strings should be already there $translations = $this->i18nTranslateBlock('block', $box-bid, array('title', 'body')); // Now set a language for the block and confirm it shows just for that one (without translation) $languages = $this->getOtherLanguages(); $setlanguage = array_shift($languages); $otherlanguage = array_shift($languages); $this->i18nUpdateBlock('block', $box->bid, array('language' => $setlanguage->language)); // Do not show in default language $this->drupalGet(''); $this->assertNoText($box->title); // Show in block's language but not translated $this->i18nGet($setlanguage); $this->assertText($box->title); // Do not show in the other language $this->i18nGet($otherlanguage); $this->assertNoText($box->title); $this->assertNoText($translations[$otherlanguage->language]['title']); // Add a custom title to any other block: Navigation (user, 1) $title = $this->randomName(10); $this->i18nUpdateBlock('user', 1, array('title' => $title)); $this->assertText($title, "The new custom title is displayed on the home page."); $translate = $this->i18nTranslateBlock('user', 1, array('title')); $this->drupalGet(''); // Refresh block strings, the ones for the first box should be gone. Not the others $box2 = $this->i18nCreateBox(array('language' => I18N_BLOCK_LOCALIZE)); $translations = $this->i18nTranslateBlock('block', $box2->bid, array('title', 'body')); i18nstrings_refresh_group('blocks', TRUE); $this->assertFalse(i18nstrings_get_source("blocks:block:$box->bid:title", $box->title), "The string for the box title is gone."); $this->assertFalse(i18nstrings_get_source("blocks:block:$box->bid:body", $box->body), "The string for the box body is gone."); $this->assertTrue(i18nstrings_get_source("blocks:user:1:title"), "We have a string for the Navigation block title"); $this->assertTrue(i18nstrings_get_source("blocks:block:$box2->bid:title", $box2->title), "The string for the second box title is still there."); $this->assertTrue(i18nstrings_get_source("blocks:block:$box2->bid:body", $box2->body), "The string for the second box body is still there."); // Test a block with filtering and input formats $box3 = $this->i18nCreateBox(array( 'title' => '
Title', 'body' => "One line\nTwo lines", 'language' => I18N_BLOCK_LOCALIZE, )); $language = current($this->getOtherLanguages()); // We add language name to the title just to make sure we get the right translation later $this->i18nstringsSaveTranslation("blocks:block:$box3->bid:title", $language->language, $box3->title . $language->name); $this->i18nstringsSaveTranslation("blocks:block:$box3->bid:body", $language->language, $box3->body); // This should be the actual HTML displayed $title = check_plain($box3->title); $body = check_markup($box3->body); $this->drupalGet(''); $this->assertRaw($title, "Title being displayed for default language: " . $title); $this->assertRaw($body, "Body being displayed for default language: " . check_plain($body)); $this->i18nGet($language); $this->assertRaw($title . $language->name, "Translated title displayed with right filtering."); $this->assertRaw($body, "Translated body displayed with right filtering."); } /** * Translate block fields to all languages */ function i18nTranslateBlock($module, $delta, $fields = array('title', 'body')) { foreach ($this->getOtherLanguages() as $language) { foreach ($fields as $key) { $text[$key] = $this->i18nstringsCreateTranslation("blocks:$module:$delta:$key", $language->language); } // Now check translated strings display on page $this->i18nGet($language->language, ''); foreach ($text as $string) { $this->assertText($string); } $translations[$language->language] = $text; } return $translations; } /** * Test creating custom block (i.e. box), moving it to a specific region and then deleting it. */ function i18nCreateBox($box = array(), $region = 'left', $check_display = TRUE) { // Add a new box by filling out the input form on the admin/build/block/add page. $box += array( 'info' => $this->randomName(8), 'title' => $this->randomName(8), 'body' => $this->randomName(32), ); $this->drupalPost('admin/build/block/add', $box, t('Save block')); // Confirm that the box has been created, and then query the created bid. $this->assertText(t('The block has been created.'), 'Box successfully created.'); $bid = db_result(db_query("SELECT bid FROM {boxes} WHERE info = '%s'", array($box['info']))); // Check to see if the box was created by checking that it's in the database.. $this->assertNotNull($bid, 'Box found in database'); // Display the block on left region $this->i18nUpdateBlockRegion('block', $bid, $region); if ($check_display) { // Confirm that the box is being displayed. $this->assertText(check_plain($box['title']), 'Box successfully being displayed on the page.'); } $box['bid'] = $block['delta'] = $bid; $box['module'] = 'block'; return (object)$box; } /** * Update block */ function i18nUpdateBlock($module, $delta, $update = array()) { $this->drupalPost("admin/build/block/configure/$module/$delta", $update, t('Save block')); $this->assertText(t('The block configuration has been saved.')); } /** * Update block region */ function i18nUpdateBlockRegion($module, $delta, $region) { // Set the created box to a specific region. // TODO: Implement full region checking. $edit = array(); $edit[$module . '_'. $delta .'[region]'] = $region; $this->drupalPost('admin/build/block', $edit, t('Save blocks')); // Confirm that the box was moved to the proper region. $this->assertText(t('The block settings have been updated.'), "Box successfully moved to $region region."); } /** * Delete block */ function i18nDeleteBlock($bid) { // Delete the created box & verify that it's been deleted and no longer appearing on the page. $this->drupalPost('admin/build/block/delete/'. $bid, array(), t('Delete')); $this->assertRaw(t('The block %title has been removed.', array('%title' => $box['info'])), t('Box successfully deleted.')); $this->assertNoText(t($box['title']), t('Box no longer appears on page.')); } }