Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\Component\Gettext;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Component\Gettext\PoHeader;
|
Chris@0
|
6 use PHPUnit\Framework\TestCase;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * Unit tests for the Gettext PO file header handling features.
|
Chris@0
|
10 *
|
Chris@0
|
11 * @see Drupal\Component\Gettext\PoHeader.
|
Chris@0
|
12 *
|
Chris@0
|
13 * @group Gettext
|
Chris@0
|
14 */
|
Chris@0
|
15 class PoHeaderTest extends TestCase {
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * Tests that plural expressions are evaluated correctly.
|
Chris@0
|
19 *
|
Chris@0
|
20 * Validate that the given plural expressions is evaluated with the correct
|
Chris@0
|
21 * plural formula.
|
Chris@0
|
22 *
|
Chris@0
|
23 * @param string $plural
|
Chris@0
|
24 * The plural expression.
|
Chris@0
|
25 * @param array $expected
|
Chris@0
|
26 * Array of expected plural positions keyed by plural value.
|
Chris@0
|
27 *
|
Chris@0
|
28 * @dataProvider providerTestPluralsFormula
|
Chris@0
|
29 */
|
Chris@0
|
30 public function testPluralsFormula($plural, $expected) {
|
Chris@0
|
31 $p = new PoHeader();
|
Chris@0
|
32 $parsed = $p->parsePluralForms($plural);
|
Chris@0
|
33 list($nplurals, $new_plural) = $parsed;
|
Chris@0
|
34 foreach ($expected as $number => $plural_form) {
|
Chris@0
|
35 $result = isset($new_plural[$number]) ? $new_plural[$number] : $new_plural['default'];
|
Chris@0
|
36 $this->assertEquals($result, $plural_form, 'Difference found at ' . $number . ': ' . $plural_form . ' versus ' . $result);
|
Chris@0
|
37 }
|
Chris@0
|
38 }
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * Data provider for testPluralsFormula.
|
Chris@0
|
42 *
|
Chris@0
|
43 * Gets pairs of plural expressions and expected plural positions keyed by
|
Chris@0
|
44 * plural value.
|
Chris@0
|
45 *
|
Chris@0
|
46 * @return array
|
Chris@0
|
47 * Pairs of plural expressions and expected plural positions keyed by plural
|
Chris@0
|
48 * value.
|
Chris@0
|
49 */
|
Chris@0
|
50 public function providerTestPluralsFormula() {
|
Chris@0
|
51 return [
|
Chris@0
|
52 [
|
Chris@0
|
53 'nplurals=1; plural=0;',
|
Chris@0
|
54 ['default' => 0],
|
Chris@0
|
55 ],
|
Chris@0
|
56 [
|
Chris@0
|
57 'nplurals=2; plural=(n > 1);',
|
Chris@0
|
58 [0 => 0, 1 => 0, 'default' => 1],
|
Chris@0
|
59 ],
|
Chris@0
|
60 [
|
Chris@0
|
61 'nplurals=2; plural=(n!=1);',
|
Chris@0
|
62 [1 => 0, 'default' => 1],
|
Chris@0
|
63 ],
|
Chris@0
|
64 [
|
Chris@0
|
65 'nplurals=2; plural=(((n==1)||((n%10)==1))?(0):1);',
|
Chris@0
|
66 [
|
Chris@0
|
67 1 => 0,
|
Chris@0
|
68 11 => 0,
|
Chris@0
|
69 21 => 0,
|
Chris@0
|
70 31 => 0,
|
Chris@0
|
71 41 => 0,
|
Chris@0
|
72 51 => 0,
|
Chris@0
|
73 61 => 0,
|
Chris@0
|
74 71 => 0,
|
Chris@0
|
75 81 => 0,
|
Chris@0
|
76 91 => 0,
|
Chris@0
|
77 101 => 0,
|
Chris@0
|
78 111 => 0,
|
Chris@0
|
79 121 => 0,
|
Chris@0
|
80 131 => 0,
|
Chris@0
|
81 141 => 0,
|
Chris@0
|
82 151 => 0,
|
Chris@0
|
83 161 => 0,
|
Chris@0
|
84 171 => 0,
|
Chris@0
|
85 181 => 0,
|
Chris@0
|
86 191 => 0,
|
Chris@0
|
87 'default' => 1,
|
Chris@0
|
88 ],
|
Chris@0
|
89 ],
|
Chris@0
|
90 [
|
Chris@0
|
91 'nplurals=3; plural=((((n%10)==1)&&((n%100)!=11))?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));',
|
Chris@0
|
92 [
|
Chris@0
|
93 1 => 0,
|
Chris@0
|
94 2 => 1,
|
Chris@0
|
95 3 => 1,
|
Chris@0
|
96 4 => 1,
|
Chris@0
|
97 21 => 0,
|
Chris@0
|
98 22 => 1,
|
Chris@0
|
99 23 => 1,
|
Chris@0
|
100 24 => 1,
|
Chris@0
|
101 31 => 0,
|
Chris@0
|
102 32 => 1,
|
Chris@0
|
103 33 => 1,
|
Chris@0
|
104 34 => 1,
|
Chris@0
|
105 41 => 0,
|
Chris@0
|
106 42 => 1,
|
Chris@0
|
107 43 => 1,
|
Chris@0
|
108 44 => 1,
|
Chris@0
|
109 51 => 0,
|
Chris@0
|
110 52 => 1,
|
Chris@0
|
111 53 => 1,
|
Chris@0
|
112 54 => 1,
|
Chris@0
|
113 61 => 0,
|
Chris@0
|
114 62 => 1,
|
Chris@0
|
115 63 => 1,
|
Chris@0
|
116 64 => 1,
|
Chris@0
|
117 71 => 0,
|
Chris@0
|
118 72 => 1,
|
Chris@0
|
119 73 => 1,
|
Chris@0
|
120 74 => 1,
|
Chris@0
|
121 81 => 0,
|
Chris@0
|
122 82 => 1,
|
Chris@0
|
123 83 => 1,
|
Chris@0
|
124 84 => 1,
|
Chris@0
|
125 91 => 0,
|
Chris@0
|
126 92 => 1,
|
Chris@0
|
127 93 => 1,
|
Chris@0
|
128 94 => 1,
|
Chris@0
|
129 101 => 0,
|
Chris@0
|
130 102 => 1,
|
Chris@0
|
131 103 => 1,
|
Chris@0
|
132 104 => 1,
|
Chris@0
|
133 121 => 0,
|
Chris@0
|
134 122 => 1,
|
Chris@0
|
135 123 => 1,
|
Chris@0
|
136 124 => 1,
|
Chris@0
|
137 131 => 0,
|
Chris@0
|
138 132 => 1,
|
Chris@0
|
139 133 => 1,
|
Chris@0
|
140 134 => 1,
|
Chris@0
|
141 141 => 0,
|
Chris@0
|
142 142 => 1,
|
Chris@0
|
143 143 => 1,
|
Chris@0
|
144 144 => 1,
|
Chris@0
|
145 151 => 0,
|
Chris@0
|
146 152 => 1,
|
Chris@0
|
147 153 => 1,
|
Chris@0
|
148 154 => 1,
|
Chris@0
|
149 161 => 0,
|
Chris@0
|
150 162 => 1,
|
Chris@0
|
151 163 => 1,
|
Chris@0
|
152 164 => 1,
|
Chris@0
|
153 171 => 0,
|
Chris@0
|
154 172 => 1,
|
Chris@0
|
155 173 => 1,
|
Chris@0
|
156 174 => 1,
|
Chris@0
|
157 181 => 0,
|
Chris@0
|
158 182 => 1,
|
Chris@0
|
159 183 => 1,
|
Chris@0
|
160 184 => 1,
|
Chris@0
|
161 191 => 0,
|
Chris@0
|
162 192 => 1,
|
Chris@0
|
163 193 => 1,
|
Chris@0
|
164 194 => 1,
|
Chris@0
|
165 'default' => 2,
|
Chris@0
|
166 ],
|
Chris@0
|
167 ],
|
Chris@0
|
168 [
|
Chris@0
|
169 'nplurals=3; plural=((n==1)?(0):(((n>=2)&&(n<=4))?(1):2));',
|
Chris@0
|
170 [
|
Chris@0
|
171 1 => 0,
|
Chris@0
|
172 2 => 1,
|
Chris@0
|
173 3 => 1,
|
Chris@0
|
174 4 => 1,
|
Chris@0
|
175 'default' => 2,
|
Chris@0
|
176 ],
|
Chris@0
|
177 ],
|
Chris@0
|
178 [
|
Chris@0
|
179 'nplurals=3; plural=((n==1)?(0):(((n==0)||(((n%100)>0)&&((n%100)<20)))?(1):2));',
|
Chris@0
|
180 [
|
Chris@0
|
181 0 => 1,
|
Chris@0
|
182 1 => 0,
|
Chris@0
|
183 2 => 1,
|
Chris@0
|
184 3 => 1,
|
Chris@0
|
185 4 => 1,
|
Chris@0
|
186 5 => 1,
|
Chris@0
|
187 6 => 1,
|
Chris@0
|
188 7 => 1,
|
Chris@0
|
189 8 => 1,
|
Chris@0
|
190 9 => 1,
|
Chris@0
|
191 10 => 1,
|
Chris@0
|
192 11 => 1,
|
Chris@0
|
193 12 => 1,
|
Chris@0
|
194 13 => 1,
|
Chris@0
|
195 14 => 1,
|
Chris@0
|
196 15 => 1,
|
Chris@0
|
197 16 => 1,
|
Chris@0
|
198 17 => 1,
|
Chris@0
|
199 18 => 1,
|
Chris@0
|
200 19 => 1,
|
Chris@0
|
201 101 => 1,
|
Chris@0
|
202 102 => 1,
|
Chris@0
|
203 103 => 1,
|
Chris@0
|
204 104 => 1,
|
Chris@0
|
205 105 => 1,
|
Chris@0
|
206 106 => 1,
|
Chris@0
|
207 107 => 1,
|
Chris@0
|
208 108 => 1,
|
Chris@0
|
209 109 => 1,
|
Chris@0
|
210 110 => 1,
|
Chris@0
|
211 111 => 1,
|
Chris@0
|
212 112 => 1,
|
Chris@0
|
213 113 => 1,
|
Chris@0
|
214 114 => 1,
|
Chris@0
|
215 115 => 1,
|
Chris@0
|
216 116 => 1,
|
Chris@0
|
217 117 => 1,
|
Chris@0
|
218 118 => 1,
|
Chris@0
|
219 119 => 1,
|
Chris@0
|
220 'default' => 2,
|
Chris@0
|
221 ],
|
Chris@0
|
222 ],
|
Chris@0
|
223 [
|
Chris@0
|
224 'nplurals=3; plural=((n==1)?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));',
|
Chris@0
|
225 [
|
Chris@0
|
226 1 => 0,
|
Chris@0
|
227 2 => 1,
|
Chris@0
|
228 3 => 1,
|
Chris@0
|
229 4 => 1,
|
Chris@0
|
230 22 => 1,
|
Chris@0
|
231 23 => 1,
|
Chris@0
|
232 24 => 1,
|
Chris@0
|
233 32 => 1,
|
Chris@0
|
234 33 => 1,
|
Chris@0
|
235 34 => 1,
|
Chris@0
|
236 42 => 1,
|
Chris@0
|
237 43 => 1,
|
Chris@0
|
238 44 => 1,
|
Chris@0
|
239 52 => 1,
|
Chris@0
|
240 53 => 1,
|
Chris@0
|
241 54 => 1,
|
Chris@0
|
242 62 => 1,
|
Chris@0
|
243 63 => 1,
|
Chris@0
|
244 64 => 1,
|
Chris@0
|
245 72 => 1,
|
Chris@0
|
246 73 => 1,
|
Chris@0
|
247 74 => 1,
|
Chris@0
|
248 82 => 1,
|
Chris@0
|
249 83 => 1,
|
Chris@0
|
250 84 => 1,
|
Chris@0
|
251 92 => 1,
|
Chris@0
|
252 93 => 1,
|
Chris@0
|
253 94 => 1,
|
Chris@0
|
254 102 => 1,
|
Chris@0
|
255 103 => 1,
|
Chris@0
|
256 104 => 1,
|
Chris@0
|
257 122 => 1,
|
Chris@0
|
258 123 => 1,
|
Chris@0
|
259 124 => 1,
|
Chris@0
|
260 132 => 1,
|
Chris@0
|
261 133 => 1,
|
Chris@0
|
262 134 => 1,
|
Chris@0
|
263 142 => 1,
|
Chris@0
|
264 143 => 1,
|
Chris@0
|
265 144 => 1,
|
Chris@0
|
266 152 => 1,
|
Chris@0
|
267 153 => 1,
|
Chris@0
|
268 154 => 1,
|
Chris@0
|
269 162 => 1,
|
Chris@0
|
270 163 => 1,
|
Chris@0
|
271 164 => 1,
|
Chris@0
|
272 172 => 1,
|
Chris@0
|
273 173 => 1,
|
Chris@0
|
274 174 => 1,
|
Chris@0
|
275 182 => 1,
|
Chris@0
|
276 183 => 1,
|
Chris@0
|
277 184 => 1,
|
Chris@0
|
278 192 => 1,
|
Chris@0
|
279 193 => 1,
|
Chris@0
|
280 194 => 1,
|
Chris@0
|
281 'default' => 2,
|
Chris@0
|
282 ],
|
Chris@0
|
283 ],
|
Chris@0
|
284 [
|
Chris@0
|
285 'nplurals=4; plural=(((n==1)||(n==11))?(0):(((n==2)||(n==12))?(1):(((n>2)&&(n<20))?(2):3)));',
|
Chris@0
|
286 [
|
Chris@0
|
287 1 => 0,
|
Chris@0
|
288 2 => 1,
|
Chris@0
|
289 3 => 2,
|
Chris@0
|
290 4 => 2,
|
Chris@0
|
291 5 => 2,
|
Chris@0
|
292 6 => 2,
|
Chris@0
|
293 7 => 2,
|
Chris@0
|
294 8 => 2,
|
Chris@0
|
295 9 => 2,
|
Chris@0
|
296 10 => 2,
|
Chris@0
|
297 11 => 0,
|
Chris@0
|
298 12 => 1,
|
Chris@0
|
299 13 => 2,
|
Chris@0
|
300 14 => 2,
|
Chris@0
|
301 15 => 2,
|
Chris@0
|
302 16 => 2,
|
Chris@0
|
303 17 => 2,
|
Chris@0
|
304 18 => 2,
|
Chris@0
|
305 19 => 2,
|
Chris@0
|
306 'default' => 3,
|
Chris@0
|
307 ],
|
Chris@0
|
308 ],
|
Chris@0
|
309 [
|
Chris@0
|
310 'nplurals=4; plural=(((n%100)==1)?(0):(((n%100)==2)?(1):((((n%100)==3)||((n%100)==4))?(2):3)));',
|
Chris@0
|
311 [
|
Chris@0
|
312 1 => 0,
|
Chris@0
|
313 2 => 1,
|
Chris@0
|
314 3 => 2,
|
Chris@0
|
315 4 => 2,
|
Chris@0
|
316 101 => 0,
|
Chris@0
|
317 102 => 1,
|
Chris@0
|
318 103 => 2,
|
Chris@0
|
319 104 => 2,
|
Chris@0
|
320 'default' => 3,
|
Chris@0
|
321 ],
|
Chris@0
|
322 ],
|
Chris@0
|
323 [
|
Chris@0
|
324 'nplurals=5; plural=((n==1)?(0):((n==2)?(1):((n<7)?(2):((n<11)?(3):4))));',
|
Chris@0
|
325 [
|
Chris@0
|
326 0 => 2,
|
Chris@0
|
327 1 => 0,
|
Chris@0
|
328 2 => 1,
|
Chris@0
|
329 3 => 2,
|
Chris@0
|
330 4 => 2,
|
Chris@0
|
331 5 => 2,
|
Chris@0
|
332 6 => 2,
|
Chris@0
|
333 7 => 3,
|
Chris@0
|
334 8 => 3,
|
Chris@0
|
335 9 => 3,
|
Chris@0
|
336 10 => 3,
|
Chris@0
|
337 'default' => 4,
|
Chris@0
|
338 ],
|
Chris@0
|
339 ],
|
Chris@0
|
340 [
|
Chris@0
|
341 'nplurals=6; plural=((n==1)?(0):((n==0)?(1):((n==2)?(2):((((n%100)>=3)&&((n%100)<=10))?(3):((((n%100)>=11)&&((n%100)<=99))?(4):5)))));',
|
Chris@0
|
342 [
|
Chris@0
|
343 0 => 1,
|
Chris@0
|
344 1 => 0,
|
Chris@0
|
345 2 => 2,
|
Chris@0
|
346 3 => 3,
|
Chris@0
|
347 4 => 3,
|
Chris@0
|
348 5 => 3,
|
Chris@0
|
349 6 => 3,
|
Chris@0
|
350 7 => 3,
|
Chris@0
|
351 8 => 3,
|
Chris@0
|
352 9 => 3,
|
Chris@0
|
353 10 => 3,
|
Chris@0
|
354 100 => 5,
|
Chris@0
|
355 101 => 5,
|
Chris@0
|
356 102 => 5,
|
Chris@0
|
357 103 => 3,
|
Chris@0
|
358 104 => 3,
|
Chris@0
|
359 105 => 3,
|
Chris@0
|
360 106 => 3,
|
Chris@0
|
361 107 => 3,
|
Chris@0
|
362 108 => 3,
|
Chris@0
|
363 109 => 3,
|
Chris@0
|
364 110 => 3,
|
Chris@0
|
365 'default' => 4,
|
Chris@0
|
366 ],
|
Chris@0
|
367 ],
|
Chris@0
|
368 ];
|
Chris@0
|
369 }
|
Chris@0
|
370
|
Chris@0
|
371 }
|