View source
<?php
require_once drupal_get_path('module', 'simpletest') . '/drupal_web_test_case.php';
class Drupali18nTestCase extends DrupalWebTestCase {
var $install_locale = 'en';
function addLanguage($langcode, $default = FALSE, $load = TRUE) {
require_once './includes/locale.inc';
locale_add_language($langcode, NULL, NULL, NULL, NULL, NULL, 1, $default);
language_list('language', TRUE);
drupal_init_language();
}
function drupalCreateTranslations(&$source, $languages = NULL) {
$languages = $languages ? $languages : array_keys(language_list());
if (empty($source->tnid)) {
db_query("UPDATE {node} SET tnid = %d, translate = %d WHERE nid = %d", $source->nid, 0, $source->nid);
$source->tnid = $source->nid;
}
$translations[$source->language] = $source;
foreach ($languages as $lang) {
if ($lang != $source->language) {
$translations[$lang] = $this
->drupalCreateNode(array(
'type' => $source->type,
'language' => $lang,
'translation_source' => $source,
'status' => $source->status,
'promote' => $source->promote,
'uid' => $source->uid,
));
}
}
return $translations;
}
function enableBlock($module, $delta, $region = 'left') {
db_query("UPDATE {blocks} SET status = %d, weight = %d, region = '%s', throttle = %d WHERE module = '%s' AND delta = '%s' AND theme = '%s'", 1, 0, $region, 0, $module, $delta, variable_get('theme_default', 'garland'));
cache_clear_all();
}
function initTheme() {
global $theme, $theme_key;
unset($theme);
unset($theme_key);
init_theme();
_block_rehash();
}
function setUp() {
global $db_prefix, $user, $language;
global $install_locale;
$this->db_prefix_original = $db_prefix;
$clean_url_original = variable_get('clean_url', 0);
$db_prefix = 'simpletest' . mt_rand(1000, 1000000);
include_once './includes/install.inc';
drupal_install_system();
$args = func_get_args();
$install_locale = $this->install_locale;
$i18n_modules = array(
'locale',
'translation',
'i18n',
'i18n_test',
);
$modules = array_unique(array_merge(drupal_verify_profile('default', $this->install_locale), $args, $i18n_modules));
drupal_install_modules($modules);
if ($this->install_locale != 'en') {
$this
->addLanguage($this->install_locale, TRUE);
}
$task = 'profile';
default_profile_tasks($task, '');
actions_synchronize();
_drupal_flush_css_js();
$this
->refreshVariables();
$this
->checkPermissions(array(), TRUE);
user_access(NULL, NULL, TRUE);
$this->originalUser = $user;
session_save_session(FALSE);
$user = user_load(array(
'uid' => 1,
));
variable_set('install_profile', 'default');
variable_set('install_task', 'profile-finished');
variable_set('clean_url', $clean_url_original);
variable_set('site_mail', 'simpletest@example.com');
$this->originalFileDirectory = file_directory_path();
variable_set('file_directory_path', file_directory_path() . '/' . $db_prefix);
$directory = file_directory_path();
file_check_directory($directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
set_time_limit($this->timeLimit);
require_once 'includes/language.inc';
$this
->initTheme();
variable_set('language_negotiation', LANGUAGE_NEGOTIATION_PATH);
}
protected function tearDown() {
parent::tearDown();
language_list('language', TRUE);
drupal_init_language();
if (module_exists('locale')) {
locale(NULL, NULL, TRUE);
}
}
protected function i18nGet($langcode, $path = '', array $options = array(), array $headers = array()) {
$options += array(
'language' => $this
->getLanguage($langcode),
);
return $this
->drupalGet($path, $options, $headers);
}
public function getLanguage($langcode) {
if (is_object($langcode)) {
return $langcode;
}
else {
$language_list = language_list();
return $language_list[$langcode];
}
}
public function switchLanguage($newlang = NULL) {
$newlang = $newlang ? $newlang : $this->install_locale;
$GLOBALS['language'] = $this
->getLanguage($newlang);
}
public function getOtherLanguages() {
$languages = language_list();
unset($languages[language_default('language')]);
return $languages;
}
public function i18nstringsCreateTranslation($name, $lang, $length = 20) {
$translation = $this
->randomName($length, "i18n-{$lang}-");
$count = self::i18nstringsSaveTranslation($name, $lang, $translation);
$this
->assertTrue($count, "A translation({$lang}) has been created for string {$name}");
return $translation;
}
public static function i18nstringsSaveTranslation($name, $lang, $translation, $update = FALSE) {
$source = i18nstrings_get_source($name);
if ($source) {
if ($update) {
db_query("UPDATE {locales_target} SET translation = '%s' WHERE lid = %d AND language = '%s'", $translation, $source->lid, $lang);
}
else {
db_query("INSERT INTO {locales_target} (translation, lid, language) VALUES ('%s', %d, '%s')", $translation, $source->lid, $lang);
}
return db_affected_rows();
}
else {
return 0;
}
}
function printDebug($data, $title = '') {
$string = is_array($data) || is_object($data) ? print_r($data, TRUE) : $data;
$output = $title ? $title . ':' . $string : $string;
$this
->assertTrue(TRUE, $output, 'Debug');
}
function printObject($object, $title = 'Object') {
$output = $this
->formatTable($object);
$this
->printDebug($output, $title);
}
function printPage() {
$this
->printDebug($this
->drupalGetContent());
}
function dumpTable($table) {
$result = db_query('SELECT * FROM {' . $table . '}');
$output = 'Table dump <strong>' . $table . '</strong>:';
while ($row = db_fetch_array($result)) {
$rows[] = $row;
if (empty($header)) {
$header = array_keys($row);
}
}
if (!empty($rows)) {
$output .= theme('table', $header, $rows);
}
else {
$output .= ' No rows';
}
$this
->assertTrue(TRUE, $output);
}
function formatTable($object) {
foreach ($object as $key => $value) {
$rows[] = array(
$key,
is_array($value) || is_object($value) ? $this
->formatTable($value) : $value,
);
}
if (!empty($rows)) {
return theme('table', array(), $rows);
}
else {
return 'No properties';
}
}
}