Merge "Fix creation of pages in the MediaWiki namespace."
[lhc/web/wiklou.git] / tests / qunit / suites / resources / mediawiki / mediawiki.jqueryMsg.test.js
index 481a5bb..bce7bd7 100644 (file)
@@ -1,23 +1,54 @@
-module( 'mediawiki.jqueryMsg' );
-
-test( '-- Initial check', function () {
-       expect( 1 );
-       ok( mw.jqueryMsg, 'mw.jqueryMsg defined' );
-} );
-
-test( 'mw.jqueryMsg Plural', function () {
-       expect( 3 );
+( function ( mw, $ ) {
+
+QUnit.module( 'mediawiki.jqueryMsg', QUnit.newMwEnvironment( {
+       setup: function () {
+               this.orgMwLangauge = mw.language;
+               mw.language = $.extend( true, {}, this.orgMwLangauge );
+       },
+       teardown: function () {
+               mw.language = this.orgMwLangauge;
+       }
+}) );
+
+var mwLanguageCache = {};
+function getMwLanguage( langCode, cb ) {
+       if ( mwLanguageCache[langCode] !== undefined ) {
+               mwLanguageCache[langCode].add( cb );
+               return;
+       }
+       mwLanguageCache[langCode] = $.Callbacks( 'once memory' );
+       mwLanguageCache[langCode].add( cb );
+       $.ajax({
+               url: mw.util.wikiScript( 'load' ),
+               data: {
+                       skin: mw.config.get( 'skin' ),
+                       lang: langCode,
+                       debug: mw.config.get( 'debug' ),
+                       modules: [
+                               'mediawiki.language.data',
+                               'mediawiki.language'
+                       ].join( '|' ),
+                       only: 'scripts'
+               },
+               dataType: 'script'
+       }).done( function () {
+               mwLanguageCache[langCode].fire( mw.language );
+       }).fail( function () {
+               mwLanguageCache[langCode].fire( false );
+       });
+}
+
+QUnit.test( 'Plural', 3, function ( assert ) {
        var parser = mw.jqueryMsg.getMessageFunction();
 
        mw.messages.set( 'plural-msg', 'Found $1 {{PLURAL:$1|item|items}}' );
-       equal( parser( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' );
-       equal( parser( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' );
-       equal( parser( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
+       assert.equal( parser( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' );
+       assert.equal( parser( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' );
+       assert.equal( parser( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
 } );
 
 
-test( 'mw.jqueryMsg Gender', function () {
-       expect( 11 );
+QUnit.test( 'Gender', 11, function ( assert ) {
        // TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg
        // TODO: English may not be the best language for these tests. Use a language like Arabic or Russian
        var user = mw.user,
@@ -28,31 +59,31 @@ test( 'mw.jqueryMsg Gender', function () {
        mw.messages.set( 'gender-msg', '$1: {{GENDER:$2|blue|pink|green}}' );
 
        user.options.set( 'gender', 'male' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'Bob', 'male' ),
                'Bob: blue',
                'Masculine from string "male"'
        );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'Bob', user ),
                'Bob: blue',
                'Masculine from mw.user object'
        );
 
        user.options.set( 'gender', 'unknown' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'Foo', user ),
                'Foo: green',
                'Neutral from mw.user object' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'Alice', 'female' ),
                'Alice: pink',
                'Feminine from string "female"' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'User' ),
                'User: green',
                'Neutral when no parameter given' );
-       equal(
+       assert.equal(
                parser( 'gender-msg', 'User', 'unknown' ),
                'User: green',
                'Neutral from string "unknown"'
@@ -60,46 +91,67 @@ test( 'mw.jqueryMsg Gender', function () {
 
        mw.messages.set( 'gender-msg-one-form', '{{GENDER:$1|User}}: $2 {{PLURAL:$2|edit|edits}}' );
 
-       equal(
+       assert.equal(
                parser( 'gender-msg-one-form', 'male', 10 ),
                'User: 10 edits',
                'Gender neutral and plural form'
        );
-       equal(
+       assert.equal(
                parser( 'gender-msg-one-form', 'female', 1 ),
                'User: 1 edit',
                'Gender neutral and singular form'
        );
 
        mw.messages.set( 'gender-msg-lowercase', '{{gender:$1|he|she}} is awesome' );
-       equal(
+       assert.equal(
                parser( 'gender-msg-lowercase', 'male' ),
                'he is awesome',
                'Gender masculine'
        );
-       equal(
+       assert.equal(
                parser( 'gender-msg-lowercase', 'female' ),
                'she is awesome',
                'Gender feminine'
        );
 
        mw.messages.set( 'gender-msg-wrong', '{{gender}} test' );
-       equal(
+       assert.equal(
                parser( 'gender-msg-wrong', 'female' ),
                ' test',
                'Invalid syntax should result in {{gender}} simply being stripped away'
        );
 } );
 
-
-test( 'mw.jqueryMsg Grammar', function () {
-       expect( 2 );
+QUnit.test( 'Grammar', 2, function ( assert ) {
        var parser = mw.jqueryMsg.getMessageFunction();
 
        // Assume the grammar form grammar_case_foo is not valid in any language
        mw.messages.set( 'grammar-msg', 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}' );
-       equal( parser( 'grammar-msg' ), 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'Grammar Test with sitename' );
+       assert.equal( parser( 'grammar-msg' ), 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'Grammar Test with sitename' );
 
        mw.messages.set( 'grammar-msg-wrong-syntax', 'Przeszukaj {{GRAMMAR:grammar_case_xyz}}' );
-       equal( parser( 'grammar-msg-wrong-syntax' ), 'Przeszukaj ' , 'Grammar Test with wrong grammar template syntax' );
+       assert.equal( parser( 'grammar-msg-wrong-syntax' ), 'Przeszukaj ' , 'Grammar Test with wrong grammar template syntax' );
 } );
+
+QUnit.test( 'Output matches PHP parser', mw.libs.phpParserData.tests.length, function ( assert ) {
+       mw.messages.set( mw.libs.phpParserData.messages );
+       $.each( mw.libs.phpParserData.tests, function ( i, test ) {
+               QUnit.stop();
+               getMwLanguage( test.lang, function ( langClass ) {
+                       QUnit.start();
+                       if ( !langClass ) {
+                               assert.ok( false, 'Language "' + test.lang + '" failed to load' );
+                               return;
+                       }
+                       mw.config.set( 'wgUserLanguage', test.lang ) ;
+                       var parser = new mw.jqueryMsg.parser( { language: langClass } );
+                       assert.equal(
+                               parser.parse( test.key, test.args ).html(),
+                               test.result,
+                               test.name
+                       );
+               } );
+       } );
+});
+
+}( mediaWiki, jQuery ) );