qunit: Remove redundant testCount expectation
[lhc/web/wiklou.git] / tests / qunit / suites / resources / mediawiki / mediawiki.language.test.js
1 ( function ( mw, $ ) {
2 'use strict';
3
4 QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment( {
5 setup: function () {
6 this.liveLangData = mw.language.data;
7 mw.language.data = {};
8 },
9 teardown: function () {
10 mw.language.data = this.liveLangData;
11 },
12 messages: {
13 // mw.language.listToText test
14 and: ' and',
15 'comma-separator': ', ',
16 'word-separator': ' '
17 }
18 } ) );
19
20 QUnit.test( 'mw.language getData and setData', function ( assert ) {
21 mw.language.setData( 'en', 'testkey', 'testvalue' );
22 assert.equal( mw.language.getData( 'en', 'testkey' ), 'testvalue', 'Getter setter test for mw.language' );
23 assert.equal( mw.language.getData( 'en', 'invalidkey' ), undefined, 'Getter setter test for mw.language with invalid key' );
24 mw.language.setData( 'en-us', 'testkey', 'testvalue' );
25 assert.equal( mw.language.getData( 'en-US', 'testkey' ), 'testvalue', 'Case insensitive test for mw.language' );
26 } );
27
28 QUnit.test( 'mw.language.commafy test', function ( assert ) {
29 mw.language.setData( 'en', 'digitGroupingPattern', null );
30 mw.language.setData( 'en', 'digitTransformTable', null );
31 mw.language.setData( 'en', 'separatorTransformTable', null );
32
33 mw.config.set( 'wgUserLanguage', 'en' );
34 // Number grouping patterns are as per http://cldr.unicode.org/translation/number-patterns
35 assert.equal( mw.language.commafy( 1234.567, '###0.#####' ), '1234.567', 'Pattern with no digit grouping separator defined' );
36 assert.equal( mw.language.commafy( 123456789.567, '###0.#####' ), '123456789.567', 'Pattern with no digit grouping separator defined, bigger decimal part' );
37 assert.equal( mw.language.commafy( 0.567, '###0.#####' ), '0.567', 'Decimal part 0' );
38 assert.equal( mw.language.commafy( '.567', '###0.#####' ), '0.567', 'Decimal part missing. replace with zero' );
39 assert.equal( mw.language.commafy( 1234, '##,#0.#####' ), '12,34', 'Pattern with no fractional part' );
40 assert.equal( mw.language.commafy( -1234.567, '###0.#####' ), '-1234.567', 'Negative number' );
41 assert.equal( mw.language.commafy( -1234.567, '#,###.00' ), '-1,234.56', 'Fractional part bigger than pattern.' );
42 assert.equal( mw.language.commafy( 123456789.567, '###,##0.00' ), '123,456,789.56', 'Decimal part as group of 3' );
43 assert.equal( mw.language.commafy( 123456789.567, '###,###,#0.00' ), '1,234,567,89.56', 'Decimal part as group of 3 and last one 2' );
44 } );
45
46 QUnit.test( 'mw.language.convertNumber', function ( assert ) {
47 mw.language.setData( 'en', 'digitGroupingPattern', null );
48 mw.language.setData( 'en', 'digitTransformTable', null );
49 mw.language.setData( 'en', 'separatorTransformTable', { ',': '.', '.': ',' } );
50 mw.config.set( 'wgUserLanguage', 'en' );
51
52 assert.equal( mw.language.convertNumber( 1800 ), '1.800', 'formatting' );
53 assert.equal( mw.language.convertNumber( '1.800', true ), '1800', 'unformatting' );
54 } );
55
56 function grammarTest( langCode, test ) {
57 // The test works only if the content language is opt.language
58 // because it requires [lang].js to be loaded.
59 QUnit.test( 'Grammar test for lang=' + langCode, function ( assert ) {
60
61 for ( var i = 0; i < test.length; i++ ) {
62 assert.equal(
63 mw.language.convertGrammar( test[ i ].word, test[ i ].grammarForm ),
64 test[ i ].expected,
65 test[ i ].description
66 );
67 }
68 } );
69 }
70
71 // These tests run only for the current UI language.
72 var grammarTests = {
73 bs: [
74 {
75 word: 'word',
76 grammarForm: 'instrumental',
77 expected: 's word',
78 description: 'Grammar test for instrumental case'
79 },
80 {
81 word: 'word',
82 grammarForm: 'lokativ',
83 expected: 'o word',
84 description: 'Grammar test for lokativ case'
85 }
86 ],
87
88 he: [
89 {
90 word: 'ויקיפדיה',
91 grammarForm: 'prefixed',
92 expected: 'וויקיפדיה',
93 description: 'Duplicate the "Waw" if prefixed'
94 },
95 {
96 word: 'וולפגנג',
97 grammarForm: 'prefixed',
98 expected: 'וולפגנג',
99 description: 'Duplicate the "Waw" if prefixed, but not if it is already duplicated.'
100 },
101 {
102 word: 'הקובץ',
103 grammarForm: 'prefixed',
104 expected: 'קובץ',
105 description: 'Remove the "He" if prefixed'
106 },
107 {
108 word: 'Wikipedia',
109 grammarForm: 'תחילית',
110 expected: '־Wikipedia',
111 description: 'Add a hyphen (maqaf) before non-Hebrew letters'
112 },
113 {
114 word: '1995',
115 grammarForm: 'תחילית',
116 expected: '־1995',
117 description: 'Add a hyphen (maqaf) before numbers'
118 }
119 ],
120
121 hsb: [
122 {
123 word: 'word',
124 grammarForm: 'instrumental',
125 expected: 'z word',
126 description: 'Grammar test for instrumental case'
127 },
128 {
129 word: 'word',
130 grammarForm: 'lokatiw',
131 expected: 'wo word',
132 description: 'Grammar test for lokatiw case'
133 }
134 ],
135
136 dsb: [
137 {
138 word: 'word',
139 grammarForm: 'instrumental',
140 expected: 'z word',
141 description: 'Grammar test for instrumental case'
142 },
143 {
144 word: 'word',
145 grammarForm: 'lokatiw',
146 expected: 'wo word',
147 description: 'Grammar test for lokatiw case'
148 }
149 ],
150
151 hy: [
152 {
153 word: 'Մաունա',
154 grammarForm: 'genitive',
155 expected: 'Մաունայի',
156 description: 'Grammar test for genitive case'
157 },
158 {
159 word: 'հետո',
160 grammarForm: 'genitive',
161 expected: 'հետոյի',
162 description: 'Grammar test for genitive case'
163 },
164 {
165 word: 'գիրք',
166 grammarForm: 'genitive',
167 expected: 'գրքի',
168 description: 'Grammar test for genitive case'
169 },
170 {
171 word: 'ժամանակի',
172 grammarForm: 'genitive',
173 expected: 'ժամանակիի',
174 description: 'Grammar test for genitive case'
175 }
176 ],
177
178 fi: [
179 {
180 word: 'talo',
181 grammarForm: 'genitive',
182 expected: 'talon',
183 description: 'Grammar test for genitive case'
184 },
185 {
186 word: 'linux',
187 grammarForm: 'genitive',
188 expected: 'linuxin',
189 description: 'Grammar test for genitive case'
190 },
191 {
192 word: 'talo',
193 grammarForm: 'elative',
194 expected: 'talosta',
195 description: 'Grammar test for elative case'
196 },
197 {
198 word: 'pastöroitu',
199 grammarForm: 'partitive',
200 expected: 'pastöroitua',
201 description: 'Grammar test for partitive case'
202 },
203 {
204 word: 'talo',
205 grammarForm: 'partitive',
206 expected: 'taloa',
207 description: 'Grammar test for partitive case'
208 },
209 {
210 word: 'talo',
211 grammarForm: 'illative',
212 expected: 'taloon',
213 description: 'Grammar test for illative case'
214 },
215 {
216 word: 'linux',
217 grammarForm: 'inessive',
218 expected: 'linuxissa',
219 description: 'Grammar test for inessive case'
220 }
221 ],
222
223 ru: [
224 {
225 word: 'тесть',
226 grammarForm: 'genitive',
227 expected: 'тестя',
228 description: 'Grammar test for genitive case, тесть -> тестя'
229 },
230 {
231 word: 'привилегия',
232 grammarForm: 'genitive',
233 expected: 'привилегии',
234 description: 'Grammar test for genitive case, привилегия -> привилегии'
235 },
236 {
237 word: 'установка',
238 grammarForm: 'genitive',
239 expected: 'установки',
240 description: 'Grammar test for genitive case, установка -> установки'
241 },
242 {
243 word: 'похоти',
244 grammarForm: 'genitive',
245 expected: 'похотей',
246 description: 'Grammar test for genitive case, похоти -> похотей'
247 },
248 {
249 word: 'доводы',
250 grammarForm: 'genitive',
251 expected: 'доводов',
252 description: 'Grammar test for genitive case, доводы -> доводов'
253 },
254 {
255 word: 'песчаник',
256 grammarForm: 'genitive',
257 expected: 'песчаника',
258 description: 'Grammar test for genitive case, песчаник -> песчаника'
259 },
260 {
261 word: 'данные',
262 grammarForm: 'genitive',
263 expected: 'данных',
264 description: 'Grammar test for genitive case, данные -> данных'
265 },
266 {
267 word: 'тесть',
268 grammarForm: 'prepositional',
269 expected: 'тесте',
270 description: 'Grammar test for prepositional case, тесть -> тесте'
271 },
272 {
273 word: 'привилегия',
274 grammarForm: 'prepositional',
275 expected: 'привилегии',
276 description: 'Grammar test for prepositional case, привилегия -> привилегии'
277 },
278 {
279 word: 'установка',
280 grammarForm: 'prepositional',
281 expected: 'установке',
282 description: 'Grammar test for prepositional case, установка -> установке'
283 },
284 {
285 word: 'похоти',
286 grammarForm: 'prepositional',
287 expected: 'похотях',
288 description: 'Grammar test for prepositional case, похоти -> похотях'
289 },
290 {
291 word: 'доводы',
292 grammarForm: 'prepositional',
293 expected: 'доводах',
294 description: 'Grammar test for prepositional case, доводы -> доводах'
295 },
296 {
297 word: 'Викисклад',
298 grammarForm: 'prepositional',
299 expected: 'Викискладе',
300 description: 'Grammar test for prepositional case, Викисклад -> Викискладе'
301 },
302 {
303 word: 'Викисклад',
304 grammarForm: 'genitive',
305 expected: 'Викисклада',
306 description: 'Grammar test for genitive case, Викисклад -> Викисклада'
307 },
308 {
309 word: 'песчаник',
310 grammarForm: 'prepositional',
311 expected: 'песчанике',
312 description: 'Grammar test for prepositional case, песчаник -> песчанике'
313 },
314 {
315 word: 'данные',
316 grammarForm: 'prepositional',
317 expected: 'данных',
318 description: 'Grammar test for prepositional case, данные -> данных'
319 },
320 {
321 word: 'русский',
322 grammarForm: 'languagegen',
323 expected: 'русского',
324 description: 'Grammar test for languagegen case, русский -> русского'
325 },
326 {
327 word: 'немецкий',
328 grammarForm: 'languagegen',
329 expected: 'немецкого',
330 description: 'Grammar test for languagegen case, немецкий -> немецкого'
331 },
332 {
333 word: 'иврит',
334 grammarForm: 'languagegen',
335 expected: 'иврита',
336 description: 'Grammar test for languagegen case, иврит -> иврита'
337 },
338 {
339 word: 'эсперанто',
340 grammarForm: 'languagegen',
341 expected: 'эсперанто',
342 description: 'Grammar test for languagegen case, эсперанто -> эсперанто'
343 },
344 {
345 word: 'русский',
346 grammarForm: 'languageprep',
347 expected: 'русском',
348 description: 'Grammar test for languageprep case, русский -> русском'
349 },
350 {
351 word: 'немецкий',
352 grammarForm: 'languageprep',
353 expected: 'немецком',
354 description: 'Grammar test for languageprep case, немецкий -> немецком'
355 },
356 {
357 word: 'идиш',
358 grammarForm: 'languageprep',
359 expected: 'идише',
360 description: 'Grammar test for languageprep case, идиш -> идише'
361 },
362 {
363 word: 'эсперанто',
364 grammarForm: 'languageprep',
365 expected: 'эсперанто',
366 description: 'Grammar test for languageprep case, эсперанто -> эсперанто'
367 },
368 {
369 word: 'русский',
370 grammarForm: 'languageadverb',
371 expected: 'по-русски',
372 description: 'Grammar test for languageadverb case, русский -> по-русски'
373 },
374 {
375 word: 'немецкий',
376 grammarForm: 'languageadverb',
377 expected: 'по-немецки',
378 description: 'Grammar test for languageadverb case, немецкий -> по-немецки'
379 },
380 {
381 word: 'иврит',
382 grammarForm: 'languageadverb',
383 expected: 'на иврите',
384 description: 'Grammar test for languageadverb case, иврит -> на иврите'
385 },
386 {
387 word: 'эсперанто',
388 grammarForm: 'languageadverb',
389 expected: 'на эсперанто',
390 description: 'Grammar test for languageadverb case, эсперанто -> на эсперанто'
391 },
392 {
393 word: 'гуарани',
394 grammarForm: 'languageadverb',
395 expected: 'на языке гуарани',
396 description: 'Grammar test for languageadverb case, гуарани -> на языке гуарани'
397 }
398 ],
399
400 hu: [
401 {
402 word: 'Wikipédiá',
403 grammarForm: 'rol',
404 expected: 'Wikipédiáról',
405 description: 'Grammar test for rol case'
406 },
407 {
408 word: 'Wikipédiá',
409 grammarForm: 'ba',
410 expected: 'Wikipédiába',
411 description: 'Grammar test for ba case'
412 },
413 {
414 word: 'Wikipédiá',
415 grammarForm: 'k',
416 expected: 'Wikipédiák',
417 description: 'Grammar test for k case'
418 }
419 ],
420
421 ga: [
422 {
423 word: 'an Domhnach',
424 grammarForm: 'ainmlae',
425 expected: 'Dé Domhnaigh',
426 description: 'Grammar test for ainmlae case'
427 },
428 {
429 word: 'an Luan',
430 grammarForm: 'ainmlae',
431 expected: 'Dé Luain',
432 description: 'Grammar test for ainmlae case'
433 },
434 {
435 word: 'an Satharn',
436 grammarForm: 'ainmlae',
437 expected: 'Dé Sathairn',
438 description: 'Grammar test for ainmlae case'
439 }
440 ],
441
442 uk: [
443 {
444 word: 'Вікіпедія',
445 grammarForm: 'genitive',
446 expected: 'Вікіпедії',
447 description: 'Grammar test for genitive case'
448 },
449 {
450 word: 'Віківиди',
451 grammarForm: 'genitive',
452 expected: 'Віківидів',
453 description: 'Grammar test for genitive case'
454 },
455 {
456 word: 'Вікіцитати',
457 grammarForm: 'genitive',
458 expected: 'Вікіцитат',
459 description: 'Grammar test for genitive case'
460 },
461 {
462 word: 'Вікіпідручник',
463 grammarForm: 'genitive',
464 expected: 'Вікіпідручника',
465 description: 'Grammar test for genitive case'
466 },
467 {
468 word: 'Вікіпедія',
469 grammarForm: 'accusative',
470 expected: 'Вікіпедію',
471 description: 'Grammar test for accusative case'
472 }
473 ],
474
475 sl: [
476 {
477 word: 'word',
478 grammarForm: 'orodnik',
479 expected: 'z word',
480 description: 'Grammar test for orodnik case'
481 },
482 {
483 word: 'word',
484 grammarForm: 'mestnik',
485 expected: 'o word',
486 description: 'Grammar test for mestnik case'
487 }
488 ],
489
490 os: [
491 {
492 word: 'бæстæ',
493 grammarForm: 'genitive',
494 expected: 'бæсты',
495 description: 'Grammar test for genitive case'
496 },
497 {
498 word: 'бæстæ',
499 grammarForm: 'allative',
500 expected: 'бæстæм',
501 description: 'Grammar test for allative case'
502 },
503 {
504 word: 'Тигр',
505 grammarForm: 'dative',
506 expected: 'Тигрæн',
507 description: 'Grammar test for dative case'
508 },
509 {
510 word: 'цъити',
511 grammarForm: 'dative',
512 expected: 'цъитийæн',
513 description: 'Grammar test for dative case'
514 },
515 {
516 word: 'лæппу',
517 grammarForm: 'genitive',
518 expected: 'лæппуйы',
519 description: 'Grammar test for genitive case'
520 },
521 {
522 word: '2011',
523 grammarForm: 'equative',
524 expected: '2011-ау',
525 description: 'Grammar test for equative case'
526 }
527 ],
528
529 la: [
530 {
531 word: 'Translatio',
532 grammarForm: 'genitive',
533 expected: 'Translationis',
534 description: 'Grammar test for genitive case'
535 },
536 {
537 word: 'Translatio',
538 grammarForm: 'accusative',
539 expected: 'Translationem',
540 description: 'Grammar test for accusative case'
541 },
542 {
543 word: 'Translatio',
544 grammarForm: 'ablative',
545 expected: 'Translatione',
546 description: 'Grammar test for ablative case'
547 }
548 ]
549 };
550
551 $.each( grammarTests, function ( langCode, test ) {
552 if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
553 grammarTest( langCode, test );
554 }
555 } );
556
557 QUnit.test( 'List to text test', function ( assert ) {
558 assert.equal( mw.language.listToText( [] ), '', 'Blank list' );
559 assert.equal( mw.language.listToText( [ 'a' ] ), 'a', 'Single item' );
560 assert.equal( mw.language.listToText( [ 'a', 'b' ] ), 'a and b', 'Two items' );
561 assert.equal( mw.language.listToText( [ 'a', 'b', 'c' ] ), 'a, b and c', 'More than two items' );
562 } );
563 }( mediaWiki, jQuery ) );