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', 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', 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', 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' );
52 assert
.equal( mw
.language
.convertNumber( 1800 ), '1.800', 'formatting' );
53 assert
.equal( mw
.language
.convertNumber( '1.800', true ), '1800', 'unformatting' );
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
) {
61 for ( var i
= 0; i
< test
.length
; i
++ ) {
63 mw
.language
.convertGrammar( test
[ i
].word
, test
[ i
].grammarForm
),
71 // These tests run only for the current UI language.
76 grammarForm
: 'instrumental',
78 description
: 'Grammar test for instrumental case'
82 grammarForm
: 'lokativ',
84 description
: 'Grammar test for lokativ case'
91 grammarForm
: 'prefixed',
92 expected
: 'וויקיפדיה',
93 description
: 'Duplicate the "Waw" if prefixed'
97 grammarForm
: 'prefixed',
99 description
: 'Duplicate the "Waw" if prefixed, but not if it is already duplicated.'
103 grammarForm
: 'prefixed',
105 description
: 'Remove the "He" if prefixed'
109 grammarForm
: 'תחילית',
110 expected
: '־Wikipedia',
111 description
: 'Add a hyphen (maqaf) before non-Hebrew letters'
115 grammarForm
: 'תחילית',
117 description
: 'Add a hyphen (maqaf) before numbers'
124 grammarForm
: 'instrumental',
126 description
: 'Grammar test for instrumental case'
130 grammarForm
: 'lokatiw',
132 description
: 'Grammar test for lokatiw case'
139 grammarForm
: 'instrumental',
141 description
: 'Grammar test for instrumental case'
145 grammarForm
: 'lokatiw',
147 description
: 'Grammar test for lokatiw case'
154 grammarForm
: 'genitive',
155 expected
: 'Մաունայի',
156 description
: 'Grammar test for genitive case'
160 grammarForm
: 'genitive',
162 description
: 'Grammar test for genitive case'
166 grammarForm
: 'genitive',
168 description
: 'Grammar test for genitive case'
172 grammarForm
: 'genitive',
173 expected
: 'ժամանակիի',
174 description
: 'Grammar test for genitive case'
181 grammarForm
: 'genitive',
183 description
: 'Grammar test for genitive case'
187 grammarForm
: 'genitive',
189 description
: 'Grammar test for genitive case'
193 grammarForm
: 'elative',
195 description
: 'Grammar test for elative case'
199 grammarForm
: 'partitive',
200 expected
: 'pastöroitua',
201 description
: 'Grammar test for partitive case'
205 grammarForm
: 'partitive',
207 description
: 'Grammar test for partitive case'
211 grammarForm
: 'illative',
213 description
: 'Grammar test for illative case'
217 grammarForm
: 'inessive',
218 expected
: 'linuxissa',
219 description
: 'Grammar test for inessive case'
226 grammarForm
: 'genitive',
228 description
: 'Grammar test for genitive case, тесть -> тестя'
232 grammarForm
: 'genitive',
233 expected
: 'привилегии',
234 description
: 'Grammar test for genitive case, привилегия -> привилегии'
238 grammarForm
: 'genitive',
239 expected
: 'установки',
240 description
: 'Grammar test for genitive case, установка -> установки'
244 grammarForm
: 'genitive',
246 description
: 'Grammar test for genitive case, похоти -> похотей'
250 grammarForm
: 'genitive',
252 description
: 'Grammar test for genitive case, доводы -> доводов'
256 grammarForm
: 'genitive',
257 expected
: 'песчаника',
258 description
: 'Grammar test for genitive case, песчаник -> песчаника'
262 grammarForm
: 'genitive',
264 description
: 'Grammar test for genitive case, данные -> данных'
268 grammarForm
: 'prepositional',
270 description
: 'Grammar test for prepositional case, тесть -> тесте'
274 grammarForm
: 'prepositional',
275 expected
: 'привилегии',
276 description
: 'Grammar test for prepositional case, привилегия -> привилегии'
280 grammarForm
: 'prepositional',
281 expected
: 'установке',
282 description
: 'Grammar test for prepositional case, установка -> установке'
286 grammarForm
: 'prepositional',
288 description
: 'Grammar test for prepositional case, похоти -> похотях'
292 grammarForm
: 'prepositional',
294 description
: 'Grammar test for prepositional case, доводы -> доводах'
298 grammarForm
: 'prepositional',
299 expected
: 'Викискладе',
300 description
: 'Grammar test for prepositional case, Викисклад -> Викискладе'
304 grammarForm
: 'genitive',
305 expected
: 'Викисклада',
306 description
: 'Grammar test for genitive case, Викисклад -> Викисклада'
310 grammarForm
: 'prepositional',
311 expected
: 'песчанике',
312 description
: 'Grammar test for prepositional case, песчаник -> песчанике'
316 grammarForm
: 'prepositional',
318 description
: 'Grammar test for prepositional case, данные -> данных'
322 grammarForm
: 'languagegen',
323 expected
: 'русского',
324 description
: 'Grammar test for languagegen case, русский -> русского'
328 grammarForm
: 'languagegen',
329 expected
: 'немецкого',
330 description
: 'Grammar test for languagegen case, немецкий -> немецкого'
334 grammarForm
: 'languagegen',
336 description
: 'Grammar test for languagegen case, иврит -> иврита'
340 grammarForm
: 'languagegen',
341 expected
: 'эсперанто',
342 description
: 'Grammar test for languagegen case, эсперанто -> эсперанто'
346 grammarForm
: 'languageprep',
348 description
: 'Grammar test for languageprep case, русский -> русском'
352 grammarForm
: 'languageprep',
353 expected
: 'немецком',
354 description
: 'Grammar test for languageprep case, немецкий -> немецком'
358 grammarForm
: 'languageprep',
360 description
: 'Grammar test for languageprep case, идиш -> идише'
364 grammarForm
: 'languageprep',
365 expected
: 'эсперанто',
366 description
: 'Grammar test for languageprep case, эсперанто -> эсперанто'
370 grammarForm
: 'languageadverb',
371 expected
: 'по-русски',
372 description
: 'Grammar test for languageadverb case, русский -> по-русски'
376 grammarForm
: 'languageadverb',
377 expected
: 'по-немецки',
378 description
: 'Grammar test for languageadverb case, немецкий -> по-немецки'
382 grammarForm
: 'languageadverb',
383 expected
: 'на иврите',
384 description
: 'Grammar test for languageadverb case, иврит -> на иврите'
388 grammarForm
: 'languageadverb',
389 expected
: 'на эсперанто',
390 description
: 'Grammar test for languageadverb case, эсперанто -> на эсперанто'
394 grammarForm
: 'languageadverb',
395 expected
: 'на языке гуарани',
396 description
: 'Grammar test for languageadverb case, гуарани -> на языке гуарани'
404 expected
: 'Wikipédiáról',
405 description
: 'Grammar test for rol case'
410 expected
: 'Wikipédiába',
411 description
: 'Grammar test for ba case'
416 expected
: 'Wikipédiák',
417 description
: 'Grammar test for k case'
424 grammarForm
: 'ainmlae',
425 expected
: 'Dé Domhnaigh',
426 description
: 'Grammar test for ainmlae case'
430 grammarForm
: 'ainmlae',
431 expected
: 'Dé Luain',
432 description
: 'Grammar test for ainmlae case'
436 grammarForm
: 'ainmlae',
437 expected
: 'Dé Sathairn',
438 description
: 'Grammar test for ainmlae case'
445 grammarForm
: 'genitive',
446 expected
: 'Вікіпедії',
447 description
: 'Grammar test for genitive case'
451 grammarForm
: 'genitive',
452 expected
: 'Віківидів',
453 description
: 'Grammar test for genitive case'
457 grammarForm
: 'genitive',
458 expected
: 'Вікіцитат',
459 description
: 'Grammar test for genitive case'
462 word
: 'Вікіпідручник',
463 grammarForm
: 'genitive',
464 expected
: 'Вікіпідручника',
465 description
: 'Grammar test for genitive case'
469 grammarForm
: 'accusative',
470 expected
: 'Вікіпедію',
471 description
: 'Grammar test for accusative case'
478 grammarForm
: 'orodnik',
480 description
: 'Grammar test for orodnik case'
484 grammarForm
: 'mestnik',
486 description
: 'Grammar test for mestnik case'
493 grammarForm
: 'genitive',
495 description
: 'Grammar test for genitive case'
499 grammarForm
: 'allative',
501 description
: 'Grammar test for allative case'
505 grammarForm
: 'dative',
507 description
: 'Grammar test for dative case'
511 grammarForm
: 'dative',
512 expected
: 'цъитийæн',
513 description
: 'Grammar test for dative case'
517 grammarForm
: 'genitive',
519 description
: 'Grammar test for genitive case'
523 grammarForm
: 'equative',
525 description
: 'Grammar test for equative case'
532 grammarForm
: 'genitive',
533 expected
: 'Translationis',
534 description
: 'Grammar test for genitive case'
538 grammarForm
: 'accusative',
539 expected
: 'Translationem',
540 description
: 'Grammar test for accusative case'
544 grammarForm
: 'ablative',
545 expected
: 'Translatione',
546 description
: 'Grammar test for ablative case'
551 $.each( grammarTests
, function ( langCode
, test
) {
552 if ( langCode
=== mw
.config
.get( 'wgUserLanguage' ) ) {
553 grammarTest( langCode
, test
);
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' );
563 }( mediaWiki
, jQuery
) );