View source
<?php
class TMGMTPluginsTestCase extends TMGMTBaseTestCase {
static function getInfo() {
return array(
'name' => 'Plugin tests',
'description' => 'Verifies basic functionality of source and translator plugins',
'group' => 'Translation Management',
);
}
function createJob($source = 'en', $target = 'de', $uid = 1) {
$job = parent::createJob();
for ($i = 1; $i < 3; $i++) {
if ($i == 3) {
$data['data'] = array(
'dummy' => array(
'deep_nesting' => array(
'#text' => 'Stored data',
),
),
);
$job
->addItem('test_source', 'test', $i, array(
$data,
));
}
$job
->addItem('test_source', 'test', $i);
}
$job->translator = $this->default_translator->name;
return $job;
}
function testBasicWorkflow() {
$submit_job = $this
->createJob();
$submit_job->settings = array(
'action' => 'submit',
);
$submit_job
->requestTranslation();
$submit_job = tmgmt_job_load($submit_job->tjid);
$this
->assertTrue($submit_job
->isActive());
$messages = $submit_job
->getMessages();
$last_message = end($messages);
$this
->assertEqual('Test submit.', $last_message->message);
$translate_job = $this
->createJob();
$translate_job->settings = array(
'action' => 'translate',
);
$translate_job
->requestTranslation();
$translate_job = tmgmt_job_load($translate_job->tjid);
foreach ($translate_job
->getItems() as $job_item) {
$this
->assertTrue($job_item
->isNeedsReview());
}
$messages = $translate_job
->getMessages();
list($debug, $translated, $needs_review) = array_values($messages);
$this
->assertEqual('Test translator called.', $debug->message);
$this
->assertEqual('debug', $debug->type);
$this
->assertEqual('Test translation created.', $translated->message);
$this
->assertEqual('status', $translated->type);
$this
->assertEqual('The translation of !source to @language is finished and can now be <a href="!review_url">reviewed</a>.', $needs_review->message);
$this
->assertEqual('status', $needs_review->type);
$i = 1;
foreach ($translate_job
->getItems() as $item) {
if ($i != 3) {
$expected_text = 'de_Text for job item with type ' . $item->item_type . ' and id ' . $item->item_id . '.';
}
else {
$expected_text = 'de_Stored data';
}
$item_data = $item
->getData();
$this
->assertEqual($expected_text, $item_data['dummy']['deep_nesting']['#translation']['#text']);
$i++;
}
foreach ($translate_job
->getItems() as $job_item) {
$job_item
->acceptTranslation();
}
foreach ($translate_job
->getItems() as $item) {
$this
->assertTrue(variable_get('tmgmt_test_saved_translation_' . $item->item_type . '_' . $item->item_id, FALSE));
}
$reject_job = $this
->createJob();
$reject_job->settings = array(
'action' => 'reject',
);
$reject_job
->requestTranslation();
$this
->assertTrue($reject_job
->isRejected());
$messages = $reject_job
->getMessages();
$last_message = end($messages);
$this
->assertEqual('This is not supported.', $last_message->message);
$this
->assertEqual('error', $last_message->type);
$failing_job = $this
->createJob();
$failing_job->settings = array(
'action' => 'fail',
);
$failing_job
->requestTranslation();
$this
->assertTrue($failing_job
->isUnprocessed());
$messages = $failing_job
->getMessages();
$last_message = end($messages);
$this
->assertEqual('Service not reachable.', $last_message->message);
$this
->assertEqual('error', $last_message->type);
}
function testRemoteLanguagesMappings() {
$this
->loginAsAdmin();
$this
->setEnvironment('de');
$controller = $this->default_translator
->getController();
$mappings = $controller
->getRemoteLanguagesMappings($this->default_translator);
$this
->assertEqual($mappings, array(
'en' => 'en-us',
'de' => 'de-ch',
));
$this
->assertEqual($controller
->mapToRemoteLanguage($this->default_translator, 'en'), 'en-us');
$this
->assertEqual($controller
->mapToRemoteLanguage($this->default_translator, 'de'), 'de-ch');
$this
->assertEqual($controller
->mapToLocalLanguage($this->default_translator, 'en-us'), 'en');
$this
->assertEqual($controller
->mapToLocalLanguage($this->default_translator, 'de-ch'), 'de');
$this->default_translator->settings['remote_languages_mappings']['de'] = 'de-de';
$this->default_translator->settings['remote_languages_mappings']['en'] = 'en-uk';
$this->default_translator
->save();
$this
->assertEqual($controller
->mapToRemoteLanguage($this->default_translator, 'en'), 'en-uk');
$this
->assertEqual($controller
->mapToRemoteLanguage($this->default_translator, 'de'), 'de-de');
$info =& drupal_static('_tmgmt_plugin_info');
$info['translator']['test_translator']['map remote languages'] = FALSE;
$this
->assertEqual($controller
->mapToRemoteLanguage($this->default_translator, 'en'), 'en');
$this
->assertEqual($controller
->mapToRemoteLanguage($this->default_translator, 'de'), 'de');
}
function testEscaping() {
$controller = $this->default_translator
->getController();
$tests = array(
array(
'item' => array(
'#text' => 'no escaping',
),
'expected' => 'no escaping',
),
array(
'item' => array(
'#text' => 'single placeholder',
'#escape' => array(
7 => array(
'string' => 'placeholder',
),
),
),
'expected' => 'single [[[placeholder]]]',
),
array(
'item' => array(
'#text' => 'two placeholder, the second placeholder',
'#escape' => array(
4 => array(
'string' => 'placeholder',
),
28 => array(
'string' => 'placeholder',
),
),
),
'expected' => 'two [[[placeholder]]], the second [[[placeholder]]]',
),
array(
'item' => array(
'#text' => 'something, something else',
'#escape' => array(
0 => array(
'string' => 'something',
),
21 => array(
'string' => 'else',
),
),
),
'expected' => '[[[something]]], something [[[else]]]',
),
array(
'item' => array(
'#text' => 'something, something else',
'#escape' => array(
21 => array(
'string' => 'else',
),
11 => array(
'string' => 'something',
),
),
),
'expected' => 'something, [[[something]]] [[[else]]]',
),
);
foreach ($tests as $test) {
$escaped = $controller
->escapeText($test['item']);
$this
->assertEqual($escaped, $test['expected']);
$this
->assertEqual($controller
->unescapeText($escaped), $test['item']['#text']);
}
}
}