QUnit.module( 'mediawiki.cldr', QUnit.newMwEnvironment() );

var pluralTestcases = {
	/*
	 * Sample:
	 * "languagecode" : [
	 *   [ number, [ "form1", "form2", ... ],  "expected", "description" ]
	 * ];
	 */
	"en": [
		[ 0, [ "one", "other" ], "other", "English plural test- 0 is other" ],
		[ 1, [ "one", "other" ], "one", "English plural test- 1 is one" ]
	],
	"fa": [
		[ 0, [ "one", "other" ], "other", "Persian plural test- 0 is other" ],
		[ 1, [ "one", "other" ], "one", "Persian plural test- 1 is one" ],
		[ 2, [ "one", "other" ], "other", "Persian plural test- 2 is other" ]
	],
	"fr": [
		[ 0, [ "one", "other" ], "other", "French plural test- 0 is other" ],
		[ 1, [ "one", "other" ], "one", "French plural test- 1 is one" ]
	],
	"hi": [
		[ 0, [ "one", "other" ], "one", "Hindi plural test- 0 is one" ],
		[ 1, [ "one", "other" ], "one", "Hindi plural test- 1 is one" ],
		[ 2, [ "one", "other" ], "other", "Hindi plural test- 2 is other" ]
	],
	"he": [
		[ 0, [ "one", "other" ], "other", "Hebrew plural test- 0 is other" ],
		[ 1, [ "one", "other" ], "one", "Hebrew plural test- 1 is one" ],
		[ 2, [ "one", "other" ], "other", "Hebrew plural test- 2 is other with 2 forms" ],
		[ 2, [ "one", "dual", "other" ], "dual", "Hebrew plural test- 2 is dual with 3 forms" ]
	],
	"hu": [
		[ 0, [ "one", "other" ], "other", "Hungarian plural test- 0 is other" ],
		[ 1, [ "one", "other" ], "one", "Hungarian plural test- 1 is one" ],
		[ 2, [ "one", "other" ], "other", "Hungarian plural test- 2 is other" ]
	],
	"ar": [
		[ 0, [ "zero", "one", "two", "few", "many", "other" ], "zero", "Arabic plural test - 0 is zero" ],
		[ 1, [ "zero", "one", "two", "few", "many", "other" ], "one", "Arabic plural test - 1 is one" ],
		[ 2, [ "zero", "one", "two", "few", "many", "other" ], "two", "Arabic plural test - 2 is two" ],
		[ 3, [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 3 is few" ],
		[ 9, [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 9 is few" ],
		[ "9", [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 9 is few" ],
		[ 110, [ "zero", "one", "two", "few", "many", "other" ], "few", "Arabic plural test - 110 is few" ],
		[ 11, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 11 is many" ],
		[ 15, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 15 is many" ],
		[ 99, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 99 is many" ],
		[ 9999, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 9999 is many" ],
		[ 100, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 100 is other" ],
		[ 102, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 102 is other" ],
		[ 1000, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1000 is other" ],
		[ 1.7, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1.7 is other" ]
	]
};

function pluralTest( langCode, tests ) {
	QUnit.test( 'Plural Test for ' + langCode, tests.length, function ( assert ) {
		for ( var i = 0; i < tests.length; i++ ) {
			assert.equal(
				mw.language.convertPlural( tests[i][0], tests[i][1] ),
				tests[i][2],
				tests[i][3]
			);
		}
	} );
}

$.each( pluralTestcases, function ( langCode, tests ) {
	if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
		pluralTest( langCode, tests );
	}
} );
