Project

General

Profile

Paste
Download (5.42 KB) Statistics
| Branch: | Revision:

root / drupal7 / modules / locale / tests / locale_test.module @ bd0d4c5c

1
<?php
2

    
3
/**
4
 * @file
5
 * Mock module for locale layer tests.
6
 */
7

    
8
/**
9
 * Implements hook_locale().
10
 */
11
function locale_test_locale($op = 'groups') {
12
  switch ($op) {
13
    case 'groups':
14
      return array('custom' => t('Custom'));
15
  }
16
}
17

    
18
/**
19
 * Implements hook_boot().
20
 *
21
 * For testing domain language negotiation, we fake it by setting
22
 * the HTTP_HOST here
23
 */
24
function locale_test_boot() {
25
  if (variable_get('locale_test_domain')) {
26
    $_SERVER['HTTP_HOST'] = variable_get('locale_test_domain');
27
  }
28
}
29

    
30
/**
31
 * Implements hook_init().
32
 */
33
function locale_test_init() {
34
  locale_test_store_language_negotiation();
35
  if (isset($GLOBALS['language']) && isset($GLOBALS['language']->provider)) {
36
    drupal_set_message(t('Language negotiation provider: @name', array('@name' => $GLOBALS['language']->provider)));
37
  }
38
}
39

    
40
/**
41
 * Implements hook_language_types_info().
42
 */
43
function locale_test_language_types_info() {
44
  if (variable_get('locale_test_language_types', FALSE)) {
45
    return array(
46
      'test_language_type' => array(
47
        'name' => t('Test'),
48
        'description' => t('A test language type.'),
49
      ),
50
      'fixed_test_language_type' => array(
51
        'fixed' => array('test_language_provider'),
52
      ),
53
    );
54
  }
55
}
56

    
57
/**
58
 * Implements hook_menu().
59
 *
60
 * @return array
61
 */
62
function locale_test_menu() {
63
  $items = array();
64
  $items['locale_test_plural_format_page'] = array(
65
    'page callback' => 'locale_test_plural_format_page',
66
    'access callback' => TRUE,
67
    'type' => MENU_CALLBACK,
68
  );
69

    
70
  return $items;
71
}
72

    
73
/**
74
 * Implements hook_language_types_info_alter().
75
 */
76
function locale_test_language_types_info_alter(array &$language_types) {
77
  if (variable_get('locale_test_content_language_type', FALSE)) {
78
    unset($language_types[LANGUAGE_TYPE_CONTENT]['fixed']);
79
  }
80
}
81

    
82
/**
83
 * Implements hook_language_negotiation_info().
84
 */
85
function locale_test_language_negotiation_info() {
86
  if (variable_get('locale_test_language_negotiation_info', FALSE)) {
87
    $info = array(
88
      'callbacks' => array(
89
        'language' => 'locale_test_language_provider',
90
      ),
91
      'file' => drupal_get_path('module', 'locale_test') .'/locale_test.module',
92
      'weight' => -10,
93
      'description' => t('This is a test language provider.'),
94
    );
95

    
96
    return array(
97
      'test_language_provider' => array(
98
        'name' => t('Test'),
99
        'types' => array(LANGUAGE_TYPE_CONTENT, 'test_language_type', 'fixed_test_language_type'),
100
      ) + $info,
101
      'test_language_provider_ts' => array(
102
        'name' => t('Type-specific test'),
103
        'types' => array('test_language_type'),
104
      ) + $info,
105
    );
106
  }
107
}
108

    
109
/**
110
 * Implements hook_language_negotiation_info_alter().
111
 */
112
function locale_test_language_negotiation_info_alter(array &$language_providers) {
113
  if (variable_get('locale_test_language_negotiation_info_alter', FALSE)) {
114
    unset($language_providers[LOCALE_LANGUAGE_NEGOTIATION_INTERFACE]);
115
  }
116
}
117

    
118
/**
119
 * Store the last negotiated languages.
120
 */
121
function locale_test_store_language_negotiation() {
122
  $last = array();
123
  foreach (language_types() as $type) {
124
    $last[$type] = $GLOBALS[$type]->language;
125
  }
126
  variable_set('locale_test_language_negotiation_last', $last);
127
}
128

    
129
/**
130
 * Test language provider.
131
 */
132
function locale_test_language_provider($languages) {
133
  return 'it';
134
}
135

    
136
/**
137
 * Returns markup for locale_get_plural testing.
138
 *
139
 * @return array
140
 */
141
function locale_test_plural_format_page() {
142
  $tests = _locale_test_plural_format_tests();
143
  $result = array();
144
  foreach ($tests as $test) {
145
    $string_param = array(
146
      '@lang' => $test['language'],
147
      '@locale_get_plural' => locale_get_plural($test['count'], $test['language'])
148
    );
149
    $result[] = array(
150
      '#prefix' => '<br/>',
151
      '#markup' => format_string('Language: @lang, locale_get_plural: @locale_get_plural.', $string_param),
152
    );
153
  }
154
  return $result;
155
}
156

    
157
/**
158
 * Helper function with list of test cases
159
 *
160
 * @return array
161
 */
162
function _locale_test_plural_format_tests() {
163
  return array(
164
    // Test data for English (no formula present).
165
    array(
166
      'count' => 1,
167
      'language' => 'en',
168
      'expected-result' => 0,
169
    ),
170
    array(
171
      'count' => 0,
172
      'language' => 'en',
173
      'expected-result' => 1,
174
    ),
175
    array(
176
      'count' => 5,
177
      'language' => 'en',
178
      'expected-result' => 1,
179
    ),
180

    
181
    // Test data for French (simpler formula).
182
    array(
183
      'count' => 1,
184
      'language' => 'fr',
185
      'expected-result' => 0,
186
    ),
187
    array(
188
      'count' => 0,
189
      'language' => 'fr',
190
      'expected-result' => 1,
191
    ),
192
    array(
193
      'count' => 5,
194
      'language' => 'fr',
195
      'expected-result' => 1,
196
    ),
197

    
198
    // Test data for Croatian (more complex formula).
199
    array(
200
      'count' => 1,
201
      'language' => 'hr',
202
      'expected-result' => 0,
203
    ),
204
    array(
205
      'count' => 21,
206
      'language' => 'hr',
207
      'expected-result' => 0,
208
    ),
209
    array(
210
      'count' => 0,
211
      'language' => 'hr',
212
      'expected-result' => 2,
213
    ),
214
    array(
215
      'count' => 2,
216
      'language' => 'hr',
217
      'expected-result' => 1,
218
    ),
219
    array(
220
      'count' => 8,
221
      'language' => 'hr',
222
      'expected-result' => 2,
223
    ),
224

    
225
    // Test data for Hungarian (nonexistent language).
226
    array(
227
      'count' => 1,
228
      'language' => 'hu',
229
      'expected-result' => -1,
230
    ),
231
    array(
232
      'count' => 21,
233
      'language' => 'hu',
234
      'expected-result' => -1,
235
    ),
236
    array(
237
      'count' => 0,
238
      'language' => 'hu',
239
      'expected-result' => -1,
240
    ),
241
  );
242
}