diff --git a/plugin/tmgmt.ui.translator.inc b/plugin/tmgmt.ui.translator.inc index 2705ced..ce521c1 100644 --- a/plugin/tmgmt.ui.translator.inc +++ b/plugin/tmgmt.ui.translator.inc @@ -37,7 +37,7 @@ class TMGMTDefaultTranslatorUIController extends TMGMTPluginBase implements TMGM '#collapsed' => TRUE, ); - $options = array(LANGUAGE_NONE => t('Undefined')); + $options = array(LANGUAGE_NONE => '(' . t('Undefined') . ')'); $non_configured = array(); foreach ($supported_remote_languages as $language) { $options[$language] = $language; diff --git a/tests/tmgmt_test.plugin.translator.inc b/tests/tmgmt_test.plugin.translator.inc index ab21147..dfb5ac4 100644 --- a/tests/tmgmt_test.plugin.translator.inc +++ b/tests/tmgmt_test.plugin.translator.inc @@ -105,4 +105,11 @@ class TMGMTTestTranslatorPluginController extends TMGMTDefaultTranslatorPluginCo public function rejectForm($form, &$form_state) { return $form; } + + /** + * {@inheritdoc} + */ + public function getSupportedRemoteLanguages(TMGMTTranslator $translator) { + return variable_get('tmgmt_test_supported_remote_languages', array()); + } } diff --git a/ui/tmgmt_ui.test b/ui/tmgmt_ui.test index 7b6528b..e0c781a 100644 --- a/ui/tmgmt_ui.test +++ b/ui/tmgmt_ui.test @@ -628,4 +628,59 @@ class TMGMTUITestCase extends TMGMTBaseTestCase { $this->assertNoText($node_sk->title); } + /** + * Test the translator language mapping settings form part. + */ + function testLanguageMappingSettingsUi() { + $this->loginAsAdmin(); + + // The initial state when no supported remote languages are provided. + $this->drupalGet('admin/config/regional/tmgmt_translator/manage/test_translator'); + $this->assertFieldByName('settings[remote_languages_mappings][en]', LANGUAGE_NONE); + $this->assertFieldByName('settings[remote_languages_mappings][de]', LANGUAGE_NONE); + $this->assertFieldByName('settings[remote_languages_mappings][el]', LANGUAGE_NONE); + $this->assertFieldByName('settings[remote_languages_mappings][es]', LANGUAGE_NONE); + + // Set supported remote languages that need to correspond with the result + // of getDefaultRemoteLanguagesMappings(). + variable_set('tmgmt_test_supported_remote_languages', array('en-us', 'de-ch', 'el')); + $this->drupalGet('admin/config/regional/tmgmt_translator/manage/test_translator'); + + // Test if the values have been preselected correctly in the initial state. + $this->assertFieldByName('settings[remote_languages_mappings][en]', 'en-us'); + $this->assertFieldByName('settings[remote_languages_mappings][de]', 'de-ch'); + $this->assertFieldByName('settings[remote_languages_mappings][el]', 'el'); + $this->assertFieldByName('settings[remote_languages_mappings][es]', LANGUAGE_NONE); + + // As "es" language has no target language we should get the warning msg. + $this->assertRaw(t('Local language %list does not have target language and thus cannot be used for translation.', array('%list' => 'es'))); + + // Save the settings form with having "el" language selected for two local + // languages. It must trigger an validation error. + $this->drupalPost(NULL, array('settings[remote_languages_mappings][es]' => 'el'), t('Save translator')); + $this->assertRaw(t('Remote language %list is assigned to more than one local language.', array('%list' => 'el'))); + + // Save the mappings and test if saved correctly. + $this->drupalPost(NULL, array('settings[remote_languages_mappings][es]' => LANGUAGE_NONE), t('Save translator')); + entity_get_controller('tmgmt_translator')->resetCache(); + $translator = tmgmt_translator_load('test_translator'); + $this->assertEqual($translator->getSetting('remote_languages_mappings'), array ( + 'en' => 'en-us', + 'de' => 'de-ch', + 'el' => 'el', + 'es' => 'und', + )); + + // Simulate a change of the supported remote language list. + variable_set('tmgmt_test_supported_remote_languages', array('en-us', 'de-ch', 'es')); + $this->drupalGet('admin/config/regional/tmgmt_translator/manage/test_translator'); + // The "el" language disappeared and is now not configured. The "es" + // language appeared but is still considered as not configured. + $this->assertRaw(t('Local languages %list do not have target language and thus cannot be used for translation.', array('%list' => 'el, es'))); + $this->assertFieldByName('settings[remote_languages_mappings][en]', 'en-us'); + $this->assertFieldByName('settings[remote_languages_mappings][de]', 'de-ch'); + $this->assertFieldByName('settings[remote_languages_mappings][el]', LANGUAGE_NONE); + $this->assertFieldByName('settings[remote_languages_mappings][es]', LANGUAGE_NONE); + } + }