From cf6a22bd4a37b85166c253e19cf6984d85c58ec0 Mon Sep 17 00:00:00 2001 From: Santhosh Thottingal Date: Mon, 2 Jan 2012 09:44:59 +0000 Subject: [PATCH] Make mw.jqueryMsg understand gender. Add qunit testcases. Followup r107808 --- resources/mediawiki/mediawiki.jqueryMsg.js | 13 ++++++++- .../mediawiki/mediawiki.jqueryMsg.test.js | 27 ++++++++++++++++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/resources/mediawiki/mediawiki.jqueryMsg.js b/resources/mediawiki/mediawiki.jqueryMsg.js index 459d000e27..1866352772 100644 --- a/resources/mediawiki/mediawiki.jqueryMsg.js +++ b/resources/mediawiki/mediawiki.jqueryMsg.js @@ -631,8 +631,19 @@ var count = parseInt( this.language.convertNumber( nodes[0], true ), 10 ); var forms = nodes.slice(1); return forms.length ? this.language.convertPlural( count, forms ) : ''; + }, + + /** + * Transform parsed structure into gender + * @param {Array} of nodes, [ {String}, {String}, {String} ... ] + * @return {String} selected gender form according to current language + */ + gender: function( nodes ) { + var gender = nodes[0]; + var forms = nodes.slice(1); + return this.language.gender( gender, forms ); } - + }; // TODO figure out a way to make magic work with common globals like wgSiteName, without requiring init from library users... diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js index eb4237bc29..bc328b4dd6 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js @@ -10,8 +10,29 @@ test( 'mw.jqueryMsg Plural', function() { var parser = mw.jqueryMsg.getMessageFunction(); ok( parser, 'Parser Function initialized' ); ok( mw.messages.set( 'plural-msg', 'Found $1 {{PLURAL:$1|item|items}}' ), 'mw.messages.set: Register' ); - 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' ); + 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' ); } ); + +test( 'mw.jqueryMsg Gender', function() { + expect( 14 ); + //TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg + var parser = mw.jqueryMsg.getMessageFunction(); + ok( parser, 'Parser Function initialized' ); + //TODO: English may not be the best language for these tests. Use a language like Arabic or Russian + ok( mw.messages.set( 'gender-msg', '$1 reverted {{GENDER:$2|his|her|their}} last edit' ), 'mw.messages.set: Register' ); + equal( parser( 'gender-msg', 'Bob', 'male' ) , 'Bob reverted his last edit', 'Gender masculine' ); + equal( parser( 'gender-msg', 'Alice', 'female' ) , 'Alice reverted her last edit', 'Gender feminine' ); + equal( parser( 'gender-msg', 'User' ) , 'User reverted their last edit', 'Gender neutral' ); + equal( parser( 'gender-msg', 'User', 'unknown' ) , 'User reverted their last edit', 'Gender neutral' ); + ok( mw.messages.set( 'gender-msg-one-form', '{{GENDER:$1|User}} reverted last $2 {{PLURAL:$2|edit|edits}}' ), 'mw.messages.set: Register' ); + equal( parser( 'gender-msg-one-form', 'male', 10 ) , 'User reverted last 10 edits', 'Gender neutral and plural form' ); + equal( parser( 'gender-msg-one-form', 'female', 1 ) , 'User reverted last 1 edit', 'Gender neutral and singular form' ); + ok( mw.messages.set( 'gender-msg-lowercase', '{{gender:$1|he|she}} is awesome' ), 'mw.messages.set: Register' ); + equal( parser( 'gender-msg-lowercase', 'male' ) , 'he is awesome', 'Gender masculine' ); + equal( parser( 'gender-msg-lowercase', 'female' ) , 'she is awesome', 'Gender feminine' ); + ok( mw.messages.set( 'gender-msg-wrong', '{{gender}} is awesome' ), 'mw.messages.set: Register' ); + equal( parser( 'gender-msg-wrong', 'female' ) , ' is awesome', 'Wrong syntax used, but ignore the {{gender}}' ); +} ); -- 2.20.1