4 QUnit
.module( 'mediawiki.language', QUnit
.newMwEnvironment( {
6 this.liveLangData
= mw
.language
.data
;
9 teardown: function () {
10 mw
.language
.data
= this.liveLangData
;
13 // mw.language.listToText test
15 'comma-separator': ', ',
20 QUnit
.test( 'mw.language getData and setData', 3, 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' );
28 QUnit
.test( 'mw.language.commafy test', 9, function ( assert
) {
29 mw
.language
.setData( 'en', 'digitGroupingPattern', null );
30 mw
.language
.setData( 'en', 'digitTransformTable', null );
31 mw
.language
.setData( 'en', 'separatorTransformTable', null );
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' );
46 QUnit
.test( 'mw.language.convertNumber', 2, 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 mw
.config
.set( 'wgTranslateNumerals', true );
53 assert
.equal( mw
.language
.convertNumber( 1800 ), '1.800', 'formatting' );
54 assert
.equal( mw
.language
.convertNumber( '1.800', true ), '1800', 'unformatting' );
57 QUnit
.test( 'mw.language.convertNumber - digitTransformTable', function ( assert
) {
58 mw
.config
.set( 'wgUserLanguage', 'hi' );
59 mw
.config
.set( 'wgTranslateNumerals', true );
60 mw
.language
.setData( 'hi', 'digitGroupingPattern', null );
61 mw
.language
.setData( 'hi', 'separatorTransformTable', { ',': '.', '.': ',' } );
63 // Example from Hindi (MessagesHi.php)
64 mw
.language
.setData( 'hi', 'digitTransformTable', {
70 assert
.equal( mw
.language
.convertNumber( 1200 ), '१.२००', 'format' );
71 assert
.equal( mw
.language
.convertNumber( '१.२००', true ), '1200', 'unformat from digit transform' );
72 assert
.equal( mw
.language
.convertNumber( '1.200', true ), '1200', 'unformat plain' );
74 mw
.config
.set( 'wgTranslateNumerals', false );
76 assert
.equal( mw
.language
.convertNumber( 1200 ), '1.200', 'format (digit transform disabled)' );
77 assert
.equal( mw
.language
.convertNumber( '१.२००', true ), '1200', 'unformat from digit transform (when disabled)' );
78 assert
.equal( mw
.language
.convertNumber( '1.200', true ), '1200', 'unformat plain (digit transform disabled)' );
81 function grammarTest( langCode
, test
) {
82 // The test works only if the content language is opt.language
83 // because it requires [lang].js to be loaded.
84 QUnit
.test( 'Grammar test for lang=' + langCode
, function ( assert
) {
85 QUnit
.expect( test
.length
);
87 for ( var i
= 0; i
< test
.length
; i
++ ) {
89 mw
.language
.convertGrammar( test
[ i
].word
, test
[ i
].grammarForm
),
97 // These tests run only for the current UI language.
102 grammarForm
: 'instrumental',
104 description
: 'Grammar test for instrumental case'
108 grammarForm
: 'lokativ',
110 description
: 'Grammar test for lokativ case'
117 grammarForm
: 'prefixed',
118 expected
: 'וויקיפדיה',
119 description
: 'Duplicate the "Waw" if prefixed'
123 grammarForm
: 'prefixed',
125 description
: 'Duplicate the "Waw" if prefixed, but not if it is already duplicated.'
129 grammarForm
: 'prefixed',
131 description
: 'Remove the "He" if prefixed'
135 grammarForm
: 'תחילית',
136 expected
: '־Wikipedia',
137 description
: 'Add a hyphen (maqaf) before non-Hebrew letters'
141 grammarForm
: 'תחילית',
143 description
: 'Add a hyphen (maqaf) before numbers'
150 grammarForm
: 'instrumental',
152 description
: 'Grammar test for instrumental case'
156 grammarForm
: 'lokatiw',
158 description
: 'Grammar test for lokatiw case'
165 grammarForm
: 'instrumental',
167 description
: 'Grammar test for instrumental case'
171 grammarForm
: 'lokatiw',
173 description
: 'Grammar test for lokatiw case'
180 grammarForm
: 'genitive',
181 expected
: 'Մաունայի',
182 description
: 'Grammar test for genitive case'
186 grammarForm
: 'genitive',
188 description
: 'Grammar test for genitive case'
192 grammarForm
: 'genitive',
194 description
: 'Grammar test for genitive case'
198 grammarForm
: 'genitive',
199 expected
: 'ժամանակիի',
200 description
: 'Grammar test for genitive case'
207 grammarForm
: 'genitive',
209 description
: 'Grammar test for genitive case'
213 grammarForm
: 'genitive',
215 description
: 'Grammar test for genitive case'
219 grammarForm
: 'elative',
221 description
: 'Grammar test for elative case'
225 grammarForm
: 'partitive',
226 expected
: 'pastöroitua',
227 description
: 'Grammar test for partitive case'
231 grammarForm
: 'partitive',
233 description
: 'Grammar test for partitive case'
237 grammarForm
: 'illative',
239 description
: 'Grammar test for illative case'
243 grammarForm
: 'inessive',
244 expected
: 'linuxissa',
245 description
: 'Grammar test for inessive case'
252 grammarForm
: 'genitive',
254 description
: 'Grammar test for genitive case, тесть -> тестя'
258 grammarForm
: 'genitive',
259 expected
: 'привилегии',
260 description
: 'Grammar test for genitive case, привилегия -> привилегии'
264 grammarForm
: 'genitive',
265 expected
: 'установки',
266 description
: 'Grammar test for genitive case, установка -> установки'
270 grammarForm
: 'genitive',
272 description
: 'Grammar test for genitive case, похоти -> похотей'
276 grammarForm
: 'genitive',
278 description
: 'Grammar test for genitive case, доводы -> доводов'
282 grammarForm
: 'genitive',
283 expected
: 'песчаника',
284 description
: 'Grammar test for genitive case, песчаник -> песчаника'
288 grammarForm
: 'genitive',
290 description
: 'Grammar test for genitive case, данные -> данных'
294 grammarForm
: 'prepositional',
296 description
: 'Grammar test for prepositional case, тесть -> тесте'
300 grammarForm
: 'prepositional',
301 expected
: 'привилегии',
302 description
: 'Grammar test for prepositional case, привилегия -> привилегии'
306 grammarForm
: 'prepositional',
307 expected
: 'установке',
308 description
: 'Grammar test for prepositional case, установка -> установке'
312 grammarForm
: 'prepositional',
314 description
: 'Grammar test for prepositional case, похоти -> похотях'
318 grammarForm
: 'prepositional',
320 description
: 'Grammar test for prepositional case, доводы -> доводах'
324 grammarForm
: 'prepositional',
325 expected
: 'Викискладе',
326 description
: 'Grammar test for prepositional case, Викисклад -> Викискладе'
330 grammarForm
: 'genitive',
331 expected
: 'Викисклада',
332 description
: 'Grammar test for genitive case, Викисклад -> Викисклада'
336 grammarForm
: 'prepositional',
337 expected
: 'песчанике',
338 description
: 'Grammar test for prepositional case, песчаник -> песчанике'
342 grammarForm
: 'prepositional',
344 description
: 'Grammar test for prepositional case, данные -> данных'
348 grammarForm
: 'languagegen',
349 expected
: 'русского',
350 description
: 'Grammar test for languagegen case, русский -> русского'
354 grammarForm
: 'languagegen',
355 expected
: 'немецкого',
356 description
: 'Grammar test for languagegen case, немецкий -> немецкого'
360 grammarForm
: 'languagegen',
362 description
: 'Grammar test for languagegen case, иврит -> иврита'
366 grammarForm
: 'languagegen',
367 expected
: 'эсперанто',
368 description
: 'Grammar test for languagegen case, эсперанто -> эсперанто'
372 grammarForm
: 'languageprep',
374 description
: 'Grammar test for languageprep case, русский -> русском'
378 grammarForm
: 'languageprep',
379 expected
: 'немецком',
380 description
: 'Grammar test for languageprep case, немецкий -> немецком'
384 grammarForm
: 'languageprep',
386 description
: 'Grammar test for languageprep case, идиш -> идише'
390 grammarForm
: 'languageprep',
391 expected
: 'эсперанто',
392 description
: 'Grammar test for languageprep case, эсперанто -> эсперанто'
396 grammarForm
: 'languageadverb',
397 expected
: 'по-русски',
398 description
: 'Grammar test for languageadverb case, русский -> по-русски'
402 grammarForm
: 'languageadverb',
403 expected
: 'по-немецки',
404 description
: 'Grammar test for languageadverb case, немецкий -> по-немецки'
408 grammarForm
: 'languageadverb',
409 expected
: 'на иврите',
410 description
: 'Grammar test for languageadverb case, иврит -> на иврите'
414 grammarForm
: 'languageadverb',
415 expected
: 'на эсперанто',
416 description
: 'Grammar test for languageadverb case, эсперанто -> на эсперанто'
420 grammarForm
: 'languageadverb',
421 expected
: 'на языке гуарани',
422 description
: 'Grammar test for languageadverb case, гуарани -> на языке гуарани'
430 expected
: 'Wikipédiáról',
431 description
: 'Grammar test for rol case'
436 expected
: 'Wikipédiába',
437 description
: 'Grammar test for ba case'
442 expected
: 'Wikipédiák',
443 description
: 'Grammar test for k case'
450 grammarForm
: 'ainmlae',
451 expected
: 'Dé Domhnaigh',
452 description
: 'Grammar test for ainmlae case'
456 grammarForm
: 'ainmlae',
457 expected
: 'Dé Luain',
458 description
: 'Grammar test for ainmlae case'
462 grammarForm
: 'ainmlae',
463 expected
: 'Dé Sathairn',
464 description
: 'Grammar test for ainmlae case'
471 grammarForm
: 'genitive',
472 expected
: 'Вікіпедії',
473 description
: 'Grammar test for genitive case'
477 grammarForm
: 'genitive',
478 expected
: 'Віківидів',
479 description
: 'Grammar test for genitive case'
483 grammarForm
: 'genitive',
484 expected
: 'Вікіцитат',
485 description
: 'Grammar test for genitive case'
488 word
: 'Вікіпідручник',
489 grammarForm
: 'genitive',
490 expected
: 'Вікіпідручника',
491 description
: 'Grammar test for genitive case'
495 grammarForm
: 'accusative',
496 expected
: 'Вікіпедію',
497 description
: 'Grammar test for accusative case'
504 grammarForm
: 'orodnik',
506 description
: 'Grammar test for orodnik case'
510 grammarForm
: 'mestnik',
512 description
: 'Grammar test for mestnik case'
519 grammarForm
: 'genitive',
521 description
: 'Grammar test for genitive case'
525 grammarForm
: 'allative',
527 description
: 'Grammar test for allative case'
531 grammarForm
: 'dative',
533 description
: 'Grammar test for dative case'
537 grammarForm
: 'dative',
538 expected
: 'цъитийæн',
539 description
: 'Grammar test for dative case'
543 grammarForm
: 'genitive',
545 description
: 'Grammar test for genitive case'
549 grammarForm
: 'equative',
551 description
: 'Grammar test for equative case'
558 grammarForm
: 'genitive',
559 expected
: 'Translationis',
560 description
: 'Grammar test for genitive case'
564 grammarForm
: 'accusative',
565 expected
: 'Translationem',
566 description
: 'Grammar test for accusative case'
570 grammarForm
: 'ablative',
571 expected
: 'Translatione',
572 description
: 'Grammar test for ablative case'
577 $.each( grammarTests
, function ( langCode
, test
) {
578 if ( langCode
=== mw
.config
.get( 'wgUserLanguage' ) ) {
579 grammarTest( langCode
, test
);
583 QUnit
.test( 'List to text test', 4, function ( assert
) {
584 assert
.equal( mw
.language
.listToText( [] ), '', 'Blank list' );
585 assert
.equal( mw
.language
.listToText( [ 'a' ] ), 'a', 'Single item' );
586 assert
.equal( mw
.language
.listToText( [ 'a', 'b' ] ), 'a and b', 'Two items' );
587 assert
.equal( mw
.language
.listToText( [ 'a', 'b', 'c' ] ), 'a, b and c', 'More than two items' );
589 }( mediaWiki
, jQuery
) );