3 QUnit
.module( 'mediawiki.jqueryMsg', QUnit
.newMwEnvironment( {
5 this.orgMwLangauge
= mw
.language
;
6 mw
.language
= $.extend( true, {}, this.orgMwLangauge
);
8 teardown: function () {
9 mw
.language
= this.orgMwLangauge
;
13 var mwLanguageCache
= {};
14 function getMwLanguage( langCode
, cb
) {
15 if ( mwLanguageCache
[langCode
] !== undefined ) {
16 mwLanguageCache
[langCode
].add( cb
);
19 mwLanguageCache
[langCode
] = $.Callbacks( 'once memory' );
20 mwLanguageCache
[langCode
].add( cb
);
22 url
: mw
.util
.wikiScript( 'load' ),
24 skin
: mw
.config
.get( 'skin' ),
26 debug
: mw
.config
.get( 'debug' ),
28 'mediawiki.language.data',
34 }).done( function () {
35 mwLanguageCache
[langCode
].fire( mw
.language
);
36 }).fail( function () {
37 mwLanguageCache
[langCode
].fire( false );
41 QUnit
.test( 'Plural', 3, function ( assert
) {
42 var parser
= mw
.jqueryMsg
.getMessageFunction();
44 mw
.messages
.set( 'plural-msg', 'Found $1 {{PLURAL:$1|item|items}}' );
45 assert
.equal( parser( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' );
46 assert
.equal( parser( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' );
47 assert
.equal( parser( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
51 QUnit
.test( 'Gender', 11, function ( assert
) {
52 // TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg
53 // TODO: English may not be the best language for these tests. Use a language like Arabic or Russian
55 parser
= mw
.jqueryMsg
.getMessageFunction();
57 // The values here are not significant,
58 // what matters is which of the values is choosen by the parser
59 mw
.messages
.set( 'gender-msg', '$1: {{GENDER:$2|blue|pink|green}}' );
61 user
.options
.set( 'gender', 'male' );
63 parser( 'gender-msg', 'Bob', 'male' ),
65 'Masculine from string "male"'
68 parser( 'gender-msg', 'Bob', user
),
70 'Masculine from mw.user object'
73 user
.options
.set( 'gender', 'unknown' );
75 parser( 'gender-msg', 'Foo', user
),
77 'Neutral from mw.user object' );
79 parser( 'gender-msg', 'Alice', 'female' ),
81 'Feminine from string "female"' );
83 parser( 'gender-msg', 'User' ),
85 'Neutral when no parameter given' );
87 parser( 'gender-msg', 'User', 'unknown' ),
89 'Neutral from string "unknown"'
92 mw
.messages
.set( 'gender-msg-one-form', '{{GENDER:$1|User}}: $2 {{PLURAL:$2|edit|edits}}' );
95 parser( 'gender-msg-one-form', 'male', 10 ),
97 'Gender neutral and plural form'
100 parser( 'gender-msg-one-form', 'female', 1 ),
102 'Gender neutral and singular form'
105 mw
.messages
.set( 'gender-msg-lowercase', '{{gender:$1|he|she}} is awesome' );
107 parser( 'gender-msg-lowercase', 'male' ),
112 parser( 'gender-msg-lowercase', 'female' ),
117 mw
.messages
.set( 'gender-msg-wrong', '{{gender}} test' );
119 parser( 'gender-msg-wrong', 'female' ),
121 'Invalid syntax should result in {{gender}} simply being stripped away'
125 QUnit
.test( 'Grammar', 2, function ( assert
) {
126 var parser
= mw
.jqueryMsg
.getMessageFunction();
128 // Assume the grammar form grammar_case_foo is not valid in any language
129 mw
.messages
.set( 'grammar-msg', 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}' );
130 assert
.equal( parser( 'grammar-msg' ), 'Przeszukaj ' + mw
.config
.get( 'wgSiteName' ), 'Grammar Test with sitename' );
132 mw
.messages
.set( 'grammar-msg-wrong-syntax', 'Przeszukaj {{GRAMMAR:grammar_case_xyz}}' );
133 assert
.equal( parser( 'grammar-msg-wrong-syntax' ), 'Przeszukaj ' , 'Grammar Test with wrong grammar template syntax' );
136 QUnit
.test( 'Output matches PHP parser', mw
.libs
.phpParserData
.tests
.length
, function ( assert
) {
137 mw
.messages
.set( mw
.libs
.phpParserData
.messages
);
138 $.each( mw
.libs
.phpParserData
.tests
, function ( i
, test
) {
140 getMwLanguage( test
.lang
, function ( langClass
) {
143 assert
.ok( false, 'Language "' + test
.lang
+ '" failed to load' );
146 mw
.config
.set( 'wgUserLanguage', test
.lang
) ;
147 var parser
= new mw
.jqueryMsg
.parser( { language
: langClass
} );
149 parser
.parse( test
.key
, test
.args
).html(),
157 }( mediaWiki
, jQuery
) );