diff -r 07239de796bb -r e756a8c72c3d cms/drupal/modules/locale/tests/locale_test.module --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/drupal/modules/locale/tests/locale_test.module Fri Sep 08 12:04:06 2017 +0200 @@ -0,0 +1,242 @@ + t('Custom')); + } +} + +/** + * Implements hook_boot(). + * + * For testing domain language negotiation, we fake it by setting + * the HTTP_HOST here + */ +function locale_test_boot() { + if (variable_get('locale_test_domain')) { + $_SERVER['HTTP_HOST'] = variable_get('locale_test_domain'); + } +} + +/** + * Implements hook_init(). + */ +function locale_test_init() { + locale_test_store_language_negotiation(); + if (isset($GLOBALS['language']) && isset($GLOBALS['language']->provider)) { + drupal_set_message(t('Language negotiation provider: @name', array('@name' => $GLOBALS['language']->provider))); + } +} + +/** + * Implements hook_language_types_info(). + */ +function locale_test_language_types_info() { + if (variable_get('locale_test_language_types', FALSE)) { + return array( + 'test_language_type' => array( + 'name' => t('Test'), + 'description' => t('A test language type.'), + ), + 'fixed_test_language_type' => array( + 'fixed' => array('test_language_provider'), + ), + ); + } +} + +/** + * Implements hook_menu(). + * + * @return array + */ +function locale_test_menu() { + $items = array(); + $items['locale_test_plural_format_page'] = array( + 'page callback' => 'locale_test_plural_format_page', + 'access callback' => TRUE, + 'type' => MENU_CALLBACK, + ); + + return $items; +} + +/** + * 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)) { + unset($language_types[LANGUAGE_TYPE_CONTENT]['fixed']); + } +} + +/** + * Implements hook_language_negotiation_info(). + */ +function locale_test_language_negotiation_info() { + if (variable_get('locale_test_language_negotiation_info', FALSE)) { + $info = array( + 'callbacks' => array( + 'language' => 'locale_test_language_provider', + ), + 'file' => drupal_get_path('module', 'locale_test') .'/locale_test.module', + 'weight' => -10, + 'description' => t('This is a test language provider.'), + ); + + return array( + 'test_language_provider' => array( + 'name' => t('Test'), + 'types' => array(LANGUAGE_TYPE_CONTENT, 'test_language_type', 'fixed_test_language_type'), + ) + $info, + 'test_language_provider_ts' => array( + 'name' => t('Type-specific test'), + 'types' => array('test_language_type'), + ) + $info, + ); + } +} + +/** + * Implements hook_language_negotiation_info_alter(). + */ +function locale_test_language_negotiation_info_alter(array &$language_providers) { + if (variable_get('locale_test_language_negotiation_info_alter', FALSE)) { + unset($language_providers[LOCALE_LANGUAGE_NEGOTIATION_INTERFACE]); + } +} + +/** + * Store the last negotiated languages. + */ +function locale_test_store_language_negotiation() { + $last = array(); + foreach (language_types() as $type) { + $last[$type] = $GLOBALS[$type]->language; + } + variable_set('locale_test_language_negotiation_last', $last); +} + +/** + * Test language provider. + */ +function locale_test_language_provider($languages) { + return 'it'; +} + +/** + * Returns markup for locale_get_plural testing. + * + * @return array + */ +function locale_test_plural_format_page() { + $tests = _locale_test_plural_format_tests(); + $result = array(); + foreach ($tests as $test) { + $string_param = array( + '@lang' => $test['language'], + '@locale_get_plural' => locale_get_plural($test['count'], $test['language']) + ); + $result[] = array( + '#prefix' => '
', + '#markup' => format_string('Language: @lang, locale_get_plural: @locale_get_plural.', $string_param), + ); + } + return $result; +} + +/** + * Helper function with list of test cases + * + * @return array + */ +function _locale_test_plural_format_tests() { + return array( + // Test data for English (no formula present). + array( + 'count' => 1, + 'language' => 'en', + 'expected-result' => 0, + ), + array( + 'count' => 0, + 'language' => 'en', + 'expected-result' => 1, + ), + array( + 'count' => 5, + 'language' => 'en', + 'expected-result' => 1, + ), + + // Test data for French (simpler formula). + array( + 'count' => 1, + 'language' => 'fr', + 'expected-result' => 0, + ), + array( + 'count' => 0, + 'language' => 'fr', + 'expected-result' => 1, + ), + array( + 'count' => 5, + 'language' => 'fr', + 'expected-result' => 1, + ), + + // Test data for Croatian (more complex formula). + array( + 'count' => 1, + 'language' => 'hr', + 'expected-result' => 0, + ), + array( + 'count' => 21, + 'language' => 'hr', + 'expected-result' => 0, + ), + array( + 'count' => 0, + 'language' => 'hr', + 'expected-result' => 2, + ), + array( + 'count' => 2, + 'language' => 'hr', + 'expected-result' => 1, + ), + array( + 'count' => 8, + 'language' => 'hr', + 'expected-result' => 2, + ), + + // Test data for Hungarian (nonexistent language). + array( + 'count' => 1, + 'language' => 'hu', + 'expected-result' => -1, + ), + array( + 'count' => 21, + 'language' => 'hu', + 'expected-result' => -1, + ), + array( + 'count' => 0, + 'language' => 'hu', + 'expected-result' => -1, + ), + ); +}