Allow the retrieval of the plural rule type for a given number
authorKaldari <rkaldari@wikimedia.org>
Fri, 25 Jan 2013 01:10:37 +0000 (17:10 -0800)
committerSanthosh Thottingal <santhosh.thottingal@gmail.com>
Wed, 20 Mar 2013 09:04:12 +0000 (14:34 +0530)
For example, find out which rule type should be applied for 5 items
in Arabic. The result would be 'few'.

This implementation should be non-disruptive and completely backwards
compatible (which is the main reason it isn't a lot simpler).

Change-Id: I3d72e4105f6244b0695116940e62a2ddef66eb66

47 files changed:
includes/cache/LocalisationCache.php
languages/Language.php
languages/classes/LanguageMk.php [deleted file]
languages/data/plurals-mediawiki.xml
tests/phpunit/languages/LanguageAmTest.php
tests/phpunit/languages/LanguageArTest.php
tests/phpunit/languages/LanguageBeTest.php
tests/phpunit/languages/LanguageBe_taraskTest.php
tests/phpunit/languages/LanguageBhoTest.php
tests/phpunit/languages/LanguageBsTest.php
tests/phpunit/languages/LanguageCsTest.php
tests/phpunit/languages/LanguageCuTest.php
tests/phpunit/languages/LanguageCyTest.php
tests/phpunit/languages/LanguageDsbTest.php
tests/phpunit/languages/LanguageFrTest.php
tests/phpunit/languages/LanguageGaTest.php
tests/phpunit/languages/LanguageGdTest.php
tests/phpunit/languages/LanguageGvTest.php
tests/phpunit/languages/LanguageHeTest.php
tests/phpunit/languages/LanguageHiTest.php
tests/phpunit/languages/LanguageHrTest.php
tests/phpunit/languages/LanguageHsbTest.php
tests/phpunit/languages/LanguageHuTest.php
tests/phpunit/languages/LanguageHyTest.php
tests/phpunit/languages/LanguageKshTest.php
tests/phpunit/languages/LanguageLnTest.php
tests/phpunit/languages/LanguageLtTest.php
tests/phpunit/languages/LanguageLvTest.php
tests/phpunit/languages/LanguageMgTest.php
tests/phpunit/languages/LanguageMkTest.php
tests/phpunit/languages/LanguageMoTest.php
tests/phpunit/languages/LanguageMtTest.php
tests/phpunit/languages/LanguageNsoTest.php
tests/phpunit/languages/LanguagePlTest.php
tests/phpunit/languages/LanguageRoTest.php
tests/phpunit/languages/LanguageRuTest.php
tests/phpunit/languages/LanguageSeTest.php
tests/phpunit/languages/LanguageSgsTest.php
tests/phpunit/languages/LanguageShTest.php
tests/phpunit/languages/LanguageSkTest.php
tests/phpunit/languages/LanguageSlTest.php
tests/phpunit/languages/LanguageSmaTest.php
tests/phpunit/languages/LanguageSrTest.php
tests/phpunit/languages/LanguageTiTest.php
tests/phpunit/languages/LanguageTlTest.php
tests/phpunit/languages/LanguageUkTest.php
tests/phpunit/languages/LanguageWaTest.php

index 009b950..2de7b48 100644 (file)
@@ -110,7 +110,7 @@ class LocalisationCache {
                'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
                'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
                'imageFiles', 'preloadedMessages', 'namespaceGenderAliases',
-               'digitGroupingPattern', 'pluralRules', 'compiledPluralRules',
+               'digitGroupingPattern', 'pluralRules', 'pluralRuleTypes', 'compiledPluralRules',
        );
 
        /**
@@ -160,6 +160,20 @@ class LocalisationCache {
         */
        var $pluralRules = null;
 
+       /**
+        * Associative array of cached plural rule types. The key is the language
+        * code, the value is an array of plural rule types for that language. For
+        * example, $pluralRuleTypes['ar'] = ['zero', 'one', 'two', 'few', 'many'].
+        * The index for each rule type matches the index for the rule in
+        * $pluralRules, thus allowing correlation between the two. The reason we
+        * don't just use the type names as the keys in $pluralRules is because
+        * Language::convertPlural applies the rules based on numeric order (or
+        * explicit numeric parameter), not based on the name of the rule type. For
+        * example, {{plural:count|wordform1|wordform2|wordform3}}, rather than
+        * {{plural:count|one=wordform1|two=wordform2|many=wordform3}}.
+        */
+       var $pluralRuleTypes = null;
+
        var $mergeableKeys = null;
 
        /**
@@ -519,17 +533,8 @@ class LocalisationCache {
         * @since 1.20
         */
        public function getPluralRules( $code ) {
-               global $IP;
-
                if ( $this->pluralRules === null ) {
-                       $cldrPlural = "$IP/languages/data/plurals.xml";
-                       $mwPlural = "$IP/languages/data/plurals-mediawiki.xml";
-                       // Load CLDR plural rules
-                       $this->loadPluralFile( $cldrPlural );
-                       if ( file_exists( $mwPlural ) ) {
-                               // Override or extend
-                               $this->loadPluralFile( $mwPlural );
-                       }
+                       $this->loadPluralFiles();
                }
                if ( !isset( $this->pluralRules[$code] ) ) {
                        return null;
@@ -538,6 +543,37 @@ class LocalisationCache {
                }
        }
 
+       /**
+        * Get the plural rule types for a given language from the XML files.
+        * Cached.
+        * @since 1.21
+        */
+       public function getPluralRuleTypes( $code ) {
+               if ( $this->pluralRuleTypes === null ) {
+                       $this->loadPluralFiles();
+               }
+               if ( !isset( $this->pluralRuleTypes[$code] ) ) {
+                       return null;
+               } else {
+                       return $this->pluralRuleTypes[$code];
+               }
+       }
+
+       /**
+        * Load the plural XML files.
+        */
+       protected function loadPluralFiles() {
+               global $IP;
+               $cldrPlural = "$IP/languages/data/plurals.xml";
+               $mwPlural = "$IP/languages/data/plurals-mediawiki.xml";
+               // Load CLDR plural rules
+               $this->loadPluralFile( $cldrPlural );
+               if ( file_exists( $mwPlural ) ) {
+                       // Override or extend
+                       $this->loadPluralFile( $mwPlural );
+               }
+       }
+
        /**
         * Load a plural XML file with the given filename, compile the relevant
         * rules, and save the compiled rules in a process-local cache.
@@ -549,12 +585,16 @@ class LocalisationCache {
                foreach ( $rulesets as $ruleset ) {
                        $codes = $ruleset->getAttribute( 'locales' );
                        $rules = array();
+                       $ruleTypes = array();
                        $ruleElements = $ruleset->getElementsByTagName( "pluralRule" );
                        foreach ( $ruleElements as $elt ) {
+                               $ruleType = $elt->getAttribute( 'count' );
                                $rules[] = $elt->nodeValue;
+                               $ruleTypes[] = $ruleType;
                        }
                        foreach ( explode( ' ', $codes ) as $code ) {
                                $this->pluralRules[$code] = $rules;
+                               $this->pluralRuleTypes[$code] = $ruleTypes;
                        }
                }
        }
@@ -579,6 +619,8 @@ class LocalisationCache {
                $data['pluralRules'] = $this->getPluralRules( $code );
                # And for PHP
                $data['compiledPluralRules'] = $this->getCompiledPluralRules( $code );
+               # Load plural rule types
+               $data['pluralRuleTypes'] = $this->getPluralRuleTypes( $code );
 
                $deps['plurals'] = new FileDependency( "$IP/languages/data/plurals.xml" );
                $deps['plurals-mw'] = new FileDependency( "$IP/languages/data/plurals-mediawiki.xml" );
@@ -786,6 +828,10 @@ class LocalisationCache {
                if ( $allData['compiledPluralRules'] === null ) {
                        $allData['compiledPluralRules'] = array();
                }
+               # If there were no plural rule types, return an empty array
+               if ( $allData['pluralRuleTypes'] === null ) {
+                       $allData['pluralRuleTypes'] = array();
+               }
 
                # Set the list keys
                $allData['list'] = array();
@@ -1284,5 +1330,4 @@ class LocalisationCache_BulkLoad extends LocalisationCache {
                        $this->unload( $code );
                }
        }
-
 }
index 9641a89..42883b5 100644 (file)
@@ -44,7 +44,6 @@ if ( function_exists( 'mb_strtoupper' ) ) {
  * @ingroup Language
  */
 class FakeConverter {
-
        /**
         * @var Language
         */
@@ -3544,7 +3543,7 @@ class Language {
                }
                $forms = array_values( $forms );
 
-               $pluralForm = $this->getPluralForm( $count );
+               $pluralForm = $this->getPluralRuleIndexNumber( $count );
                $pluralForm = min( $pluralForm, count( $forms ) - 1 );
                return $forms[$pluralForm];
        }
@@ -4410,7 +4409,7 @@ class Language {
        /**
         * Get the plural rules for the language
         * @since 1.20
-        * @return array Associative array with plural form, and plural rule as key-value pairs
+        * @return array Associative array with plural form number and plural rule as key-value pairs
         */
        public function getPluralRules() {
                $pluralRules = self::$dataCache->getItem( strtolower( $this->mCode ), 'pluralRules' );
@@ -4427,13 +4426,48 @@ class Language {
        }
 
        /**
-        * Find the plural form matching to the given number
-        * It return the form index.
-        * @return int The index of the plural form
+        * Get the plural rule types for the language
+        * @since 1.21
+        * @return array Associative array with plural form number and plural rule type as key-value pairs
+        */
+       public function getPluralRuleTypes() {
+               $pluralRuleTypes = self::$dataCache->getItem( strtolower( $this->mCode ), 'pluralRuleTypes' );
+               $fallbacks = Language::getFallbacksFor( $this->mCode );
+               if ( !$pluralRuleTypes ) {
+                       foreach ( $fallbacks as $fallbackCode ) {
+                               $pluralRuleTypes = self::$dataCache->getItem( strtolower( $fallbackCode ), 'pluralRuleTypes' );
+                               if ( $pluralRuleTypes ) {
+                                       break;
+                               }
+                       }
+               }
+               return $pluralRuleTypes;
+       }
+
+       /**
+        * Find the index number of the plural rule appropriate for the given number
+        * @return int The index number of the plural rule
         */
-       private function getPluralForm( $number ) {
+       public function getPluralRuleIndexNumber( $number ) {
                $pluralRules = $this->getCompiledPluralRules();
                $form = CLDRPluralRuleEvaluator::evaluateCompiled( $number, $pluralRules );
                return $form;
        }
+
+       /**
+        * Find the plural rule type appropriate for the given number
+        * For example, if the language is set to Arabic, getPluralType(5) should
+        * return 'few'.
+        * @since 1.21
+        * @return string The name of the plural rule type, e.g. one, two, few, many
+        */
+       public function getPluralRuleType( $number ) {
+               $index = $this->getPluralRuleIndexNumber( $number );
+               $pluralRuleTypes = $this->getPluralRuleTypes();
+               if ( isset( $pluralRuleTypes[$index] ) ) {
+                       return $pluralRuleTypes[$index];
+               } else {
+                       return 'other';
+               }
+       }
 }
diff --git a/languages/classes/LanguageMk.php b/languages/classes/LanguageMk.php
deleted file mode 100644 (file)
index 968fe26..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Macedonian (Македонски) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Macedonian (Македонски)
- *
- * @ingroup Language
- */
-class LanguageMk extends Language {
-       /**
-        * Plural forms per
-        * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#mk
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-               // TODO CLDR defines forms[0] for n != 11 and not for n%100 !== 11
-               if ( $count % 10 === 1 && $count % 100 !== 11 ) {
-                       return $forms[0];
-               } else {
-                       return $forms[1];
-               }
-       }
-}
index 07e157a..5ad6717 100644 (file)
@@ -2,6 +2,7 @@
 <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
 <supplementalData>
        <plurals>
+               <!-- What is this override for Hebrew based on? Is there a CLDR ticket for this? -Ryan Kaldari 2013-01-28 -->
                <pluralRules locales="he">
                        <pluralRule count="one">n is 1</pluralRule>
                        <pluralRule count="two">n is 2</pluralRule>
index 9723e1e..ebbe5a2 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/LanguageAm.php */
 class LanguageAmTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'one', 0 ),
index 523ee7f..fee05fc 100644 (file)
@@ -6,7 +6,6 @@
 
 /** Tests for MediaWiki languages/LanguageAr.php */
 class LanguageArTest extends LanguageClassesTestCase {
-
        function testFormatNum() {
                $this->assertEquals( '١٬٢٣٤٬٥٦٧', $this->getLang()->formatNum( '1234567' ) );
                $this->assertEquals( '-١٢٫٨٩', $this->getLang()->formatNum( -12.89 ) );
@@ -51,6 +50,11 @@ class LanguageArTest extends LanguageClassesTestCase {
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'zero', 0 ),
index 0144941..340b334 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/LanguageBe.php */
 class LanguageBeTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'one', 1 ),
index 5b246d8..aa8c28a 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 
 class LanguageBe_taraskTest extends LanguageClassesTestCase {
-
        /**
         * Make sure the language code we are given is indeed
         * be-tarask. This is to ensure LanguageClassesTestCase
@@ -33,14 +32,19 @@ class LanguageBe_taraskTest extends LanguageClassesTestCase {
                $this->assertEquals( '1234', $this->getLang()->commafy( '1234' ) );
        }
 
-       /** @dataProvider providePluralFourForms */
-       function testPluralFourForms( $result, $value ) {
-               $forms = array( 'one', 'few', 'many', 'other' );
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
+               $forms =  array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralFourForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -57,17 +61,16 @@ class LanguageBe_taraskTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'several' );
+               $forms =  array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
        function providePluralTwoForms() {
                return array(
                        array( 'one', 1 ),
-                       array( 'several', 11 ),
-                       array( 'several', 91 ),
-                       array( 'several', 121 ),
+                       array( 'other', 11 ),
+                       array( 'other', 91 ),
+                       array( 'other', 121 ),
                );
        }
-
 }
index c364917..7384ed7 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/LanguageBho.php */
 class LanguageBhoTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'one', 0 ),
@@ -22,5 +26,4 @@ class LanguageBhoTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 76d0070..d44dc32 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/LanguageBs.php */
 class LanguageBsTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'many', 0 ),
@@ -29,5 +33,4 @@ class LanguageBsTest extends LanguageClassesTestCase {
                        array( 'many', 200 ),
                );
        }
-
 }
index 884a129..9a4991b 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/Languagecs.php */
 class LanguageCsTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
@@ -28,5 +32,4 @@ class LanguageCsTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index e2394b3..7384918 100644 (file)
@@ -7,27 +7,30 @@
 
 /** Tests for MediaWiki languages/LanguageCu.php */
 class LanguageCuTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'few', 'many', 'other' );
+               $forms =  array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'many', 3 ),
-                       array( 'many', 4 ),
+                       array( 'two', 2 ),
+                       array( 'few', 3 ),
+                       array( 'few', 4 ),
                        array( 'other', 5 ),
                        array( 'one', 11 ),
                        array( 'other', 20 ),
-                       array( 'few', 22 ),
-                       array( 'many', 223 ),
+                       array( 'two', 22 ),
+                       array( 'few', 223 ),
                        array( 'other', 200 ),
                );
        }
-
 }
index 2a7f4a9..d56d622 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageCy.php */
 class LanguageCyTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'zero', 'one', 'two', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
@@ -30,5 +34,4 @@ class LanguageCyTest extends LanguageClassesTestCase {
                        array( 'other', 200.00 ),
                );
        }
-
 }
index 285ce64..b3f01c3 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/classes/LanguageDsb.php */
 class LanguageDsbTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'other', 0 ),
@@ -28,5 +32,4 @@ class LanguageDsbTest extends LanguageClassesTestCase {
                        array( 'other', 555 ),
                );
        }
-
 }
index faf0de5..2ab5d87 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/classes/LanguageFr.php */
 class LanguageFrTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'one', 0 ),
@@ -22,5 +26,4 @@ class LanguageFrTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 2dbb088..cac3a02 100644 (file)
@@ -7,20 +7,23 @@
 
 /** Tests for MediaWiki languages/classes/LanguageGa.php */
 class LanguageGaTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
                        array( 'other', 200 ),
                );
        }
-
 }
index 5de1e9d..b7d5cc2 100644 (file)
@@ -7,7 +7,6 @@
 
 /** Tests for MediaWiki languages/classes/LanguageGd.php */
 class LanguageGdTest extends LanguageClassesTestCase {
-
        /** @dataProvider providerPlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'few', 'other' );
index 4126e07..6e24aea 100644 (file)
@@ -7,16 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageGv.php */
 class LanguageGvTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                // This is not compatible with CLDR plural rules http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#gv
-               $forms = array( 'Form 1', 'Form 2', 'Form 3', 'Form 4' );
+               // What does this mean? Is there a hard-coded override for gv somewhere? -Ryan Kaldari 2013-01-28
+               $forms =  array( 'Form 1', 'Form 2', 'Form 3', 'Form 4' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->markTestSkipped( "This test won't work since convertPlural for gv doesn't seem to actually follow our plural rules." );
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'Form 4', 0 ),
                        array( 'Form 2', 1 ),
                        array( 'Form 3', 2 ),
@@ -28,5 +34,4 @@ class LanguageGvTest extends LanguageClassesTestCase {
                        array( 'Form 4', 50 ),
                );
        }
-
 }
index 6de88e5..1335e90 100644 (file)
@@ -7,46 +7,36 @@
 
 /** Tests for MediaWiki languages/classes/LanguageHe.php */
 class LanguageHeTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPluralDual */
-       function testPluralDual( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralDual() {
-               return array(
-                       array( 'other', 0 ), // Zero -> plural
-                       array( 'one', 1 ), // Singular
-                       array( 'two', 2 ), // Dual
-                       array( 'other', 3 ), // Plural
-               );
-       }
-
-       /** @dataProvider providerPlural */
-       function testPlural( $result, $value ) {
-               $forms = array( 'one', 'other' );
-               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'other', 0 ), // Zero -> plural
-                       array( 'one', 1 ), // Singular
-                       array( 'other', 2 ), // Plural, no dual provided
-                       array( 'other', 3 ), // Plural
+       function providePlural() {
+               return array (
+                       array( 'other', 0 ),
+                       array( 'one', 1 ),
+                       array( 'two', 2 ),
+                       array( 'other', 3 ),
+                       array( 'other', 10 ),
                );
        }
 
-       /** @dataProvider providerGrammar */
+       /** @dataProvider provideGrammar */
        function testGrammar( $result, $word, $case ) {
                $this->assertEquals( $result, $this->getLang()->convertGrammar( $word, $case ) );
        }
 
        // The comments in the beginning of the line help avoid RTL problems
        // with text editors.
-       function providerGrammar() {
-               return array(
+       function provideGrammar() {
+               return array (
                        array(
                                /* result */ 'וויקיפדיה',
                                /* word   */ 'ויקיפדיה',
index 86d6af5..b21bfe4 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/LanguageHi.php */
 class LanguageHiTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'one', 0 ),
@@ -22,5 +26,4 @@ class LanguageHiTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 9dce4ea..76e281b 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageHr.php */
 class LanguageHrTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'many', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
@@ -29,5 +33,4 @@ class LanguageHrTest extends LanguageClassesTestCase {
                        array( 'many', 200 ),
                );
        }
-
 }
index bec7d81..8fee549 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/classes/LanguageHsb.php */
 class LanguageHsbTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'other', 0 ),
@@ -28,5 +32,4 @@ class LanguageHsbTest extends LanguageClassesTestCase {
                        array( 'other', 555 ),
                );
        }
-
 }
index 23d8e0c..462a7dd 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/LanguageHu.php */
 class LanguageHuTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'other', 0 ),
@@ -22,5 +26,4 @@ class LanguageHuTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 7088d37..70717f1 100644 (file)
@@ -7,20 +7,24 @@
 
 /** Tests for MediaWiki languages/LanguageHy.php */
 class LanguageHyTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               // This fails for 0, but I'm not sure why. Some voodoo going on here.
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
                        array( 'other', 200 ),
                );
        }
-
 }
index 9b4a53a..7efd58a 100644 (file)
@@ -7,20 +7,23 @@
 
 /** Tests for MediaWiki languages/classes/LanguageKsh.php */
 class LanguageKshTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other', 'zero' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
                        array( 'other', 200 ),
                );
        }
-
 }
index 669d8b0..052604c 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/classes/LanguageLn.php */
 class LanguageLnTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'one', 0 ),
@@ -22,5 +26,4 @@ class LanguageLnTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index 9d6428b..eface4c 100644 (file)
@@ -7,21 +7,19 @@
 
 /** Tests for MediaWiki languages/LanguageLt.php */
 class LanguageLtTest extends LanguageClassesTestCase {
-
-       /** @dataProvider provideOneFewOtherCases */
-       function testOneFewOtherPlural( $result, $value ) {
-               $forms = array( 'one', 'few', 'other' );
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
+               $forms =  array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       /** @dataProvider provideOneFewCases */
-       function testOneFewPlural( $result, $value ) {
-               $forms = array( 'one', 'few' );
-               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
        }
 
-       function provideOneFewOtherCases() {
-               return array(
+       function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
@@ -36,10 +34,21 @@ class LanguageLtTest extends LanguageClassesTestCase {
                );
        }
 
-       function provideOneFewCases() {
-               return array(
+       /** @dataProvider providePluralTwoForms */
+       function testOneFewPlural( $result, $value ) {
+               $forms =  array( 'one', 'other' );
+               // This fails for 21, but not sure why.
+               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       }
+
+       function providePluralTwoForms() {
+               return array (
                        array( 'one', 1 ),
-                       array( 'few', 15 ),
+                       array( 'other', 2 ),
+                       array( 'other', 15 ),
+                       array( 'other', 20 ),
+                       array( 'one', 21 ),
+                       array( 'other', 22 ),
                );
        }
 }
index bd0c759..dce2f79 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageLv.php */
 class LanguageLvTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'zero', 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 11 ),
@@ -27,5 +31,4 @@ class LanguageLvTest extends LanguageClassesTestCase {
                        array( 'other', 200 ),
                );
        }
-
 }
index c1e516b..e88b0af 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/classes/LanguageMg.php */
 class LanguageMgTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePlural() {
                return array(
                        array( 'one', 0 ),
@@ -23,5 +27,4 @@ class LanguageMgTest extends LanguageClassesTestCase {
                        array( 'other', 123.3434 ),
                );
        }
-
 }
index 5c241ba..a5a8f6c 100644 (file)
@@ -7,27 +7,28 @@
 
 /** Tests for MediaWiki languages/classes/LanguageMk.php */
 class LanguageMkTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
 
-       function providerPlural() {
-               return array(
+       function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 11 ),
                        array( 'one', 21 ),
-                       array( 'other', 411 ),
+                       array( 'one', 411 ),
                        array( 'other', 12.345 ),
                        array( 'other', 20 ),
                        array( 'one', 31 ),
                        array( 'other', 200 ),
                );
        }
-
-
 }
index f7da1cd..31d183a 100644 (file)
@@ -7,19 +7,23 @@
 
 /** Tests for MediaWiki languages/classes/LanguageMo.php */
 class LanguageMoTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'few', 0 ),
-                       array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'few', 19 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'few',   0 ),
+                       array( 'one',   1 ),
+                       array( 'few',   2 ),
+                       array( 'few',   19 ),
                        array( 'other', 20 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
index f2b881e..8f5d764 100644 (file)
@@ -7,21 +7,25 @@
 
 /** Tests for MediaWiki languages/classes/LanguageMt.php */
 class LanguageMtTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPluralAllForms */
-       function testPluralAllForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralAllForms() {
-               return array(
-                       array( 'few', 0 ),
-                       array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'few', 10 ),
-                       array( 'many', 11 ),
-                       array( 'many', 19 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'few',   0 ),
+                       array( 'one',   1 ),
+                       array( 'few',   2 ),
+                       array( 'few',   10 ),
+                       array( 'many',  11 ),
+                       array( 'many',  19 ),
                        array( 'other', 20 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
@@ -37,28 +41,28 @@ class LanguageMtTest extends LanguageClassesTestCase {
 
        /** @dataProvider providerPluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
        function providerPluralTwoForms() {
-               return array(
-                       array( 'many', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
-                       array( 'many', 10 ),
-                       array( 'many', 11 ),
-                       array( 'many', 19 ),
-                       array( 'many', 20 ),
-                       array( 'many', 99 ),
-                       array( 'many', 100 ),
-                       array( 'many', 101 ),
-                       array( 'many', 102 ),
-                       array( 'many', 110 ),
-                       array( 'many', 111 ),
-                       array( 'many', 119 ),
-                       array( 'many', 120 ),
-                       array( 'many', 201 ),
+               return array (
+                       array( 'other',  0 ),
+                       array( 'one',   1 ),
+                       array( 'other',  2 ),
+                       array( 'other',  10 ),
+                       array( 'other',  11 ),
+                       array( 'other',  19 ),
+                       array( 'other',  20 ),
+                       array( 'other',  99 ),
+                       array( 'other',  100 ),
+                       array( 'other',  101 ),
+                       array( 'other',  102 ),
+                       array( 'other',  110 ),
+                       array( 'other',  111 ),
+                       array( 'other',  119 ),
+                       array( 'other',  120 ),
+                       array( 'other',  201 ),
                );
        }
 }
index 9d80d13..7a7bff2 100644 (file)
@@ -7,18 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageNso.php */
 class LanguageNsoTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'one',  0 ),
+                       array( 'one',  1 ),
+                       array( 'other', 2 ),
                );
        }
 }
index 1e36097..1ace10b 100644 (file)
@@ -7,58 +7,62 @@
 
 /** Tests for MediaWiki languages/classes/LanguagePl.php */
 class LanguagePlTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPluralFourForms */
-       function testPluralFourForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralFourForms() {
-               return array(
-                       array( 'many', 0 ),
-                       array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'few', 3 ),
-                       array( 'few', 4 ),
-                       array( 'many', 5 ),
-                       array( 'many', 9 ),
-                       array( 'many', 10 ),
-                       array( 'many', 11 ),
-                       array( 'many', 21 ),
-                       array( 'few', 22 ),
-                       array( 'few', 23 ),
-                       array( 'few', 24 ),
-                       array( 'many', 25 ),
-                       array( 'many', 200 ),
-                       array( 'many', 201 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'many',  0 ),
+                       array( 'one',   1 ),
+                       array( 'few',   2 ),
+                       array( 'few',   3 ),
+                       array( 'few',   4 ),
+                       array( 'many',  5 ),
+                       array( 'many',  9 ),
+                       array( 'many',  10 ),
+                       array( 'many',  11 ),
+                       array( 'many',  21 ),
+                       array( 'few',   22 ),
+                       array( 'few',   23 ),
+                       array( 'few',   24 ),
+                       array( 'many',  25 ),
+                       array( 'many',  200 ),
+                       array( 'many',  201 ),
                );
        }
 
-       /** @dataProvider providerPlural */
-       function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+       /** @dataProvider providerPluralTwoForms */
+       function testPluralTwoForms( $result, $value ) {
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'many', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
-                       array( 'many', 3 ),
-                       array( 'many', 4 ),
-                       array( 'many', 5 ),
-                       array( 'many', 9 ),
-                       array( 'many', 10 ),
-                       array( 'many', 11 ),
-                       array( 'many', 21 ),
-                       array( 'many', 22 ),
-                       array( 'many', 23 ),
-                       array( 'many', 24 ),
-                       array( 'many', 25 ),
-                       array( 'many', 200 ),
-                       array( 'many', 201 ),
+       function providerPluralTwoForms() {
+               return array (
+                       array( 'other',  0 ),
+                       array( 'one',   1 ),
+                       array( 'other',  2 ),
+                       array( 'other',  3 ),
+                       array( 'other',  4 ),
+                       array( 'other',  5 ),
+                       array( 'other',  9 ),
+                       array( 'other',  10 ),
+                       array( 'other',  11 ),
+                       array( 'other',  21 ),
+                       array( 'other',  22 ),
+                       array( 'other',  23 ),
+                       array( 'other',  24 ),
+                       array( 'other',  25 ),
+                       array( 'other',  200 ),
+                       array( 'other',  201 ),
                );
        }
 }
index 916ea45..261d25a 100644 (file)
@@ -7,19 +7,23 @@
 
 /** Tests for MediaWiki languages/classes/LanguageRo.php */
 class LanguageRoTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'few', 0 ),
-                       array( 'one', 1 ),
-                       array( 'few', 2 ),
-                       array( 'few', 19 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'few',   0 ),
+                       array( 'one',   1 ),
+                       array( 'few',   2 ),
+                       array( 'few',   19 ),
                        array( 'other', 20 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
index 0792f75..3bdf654 100644 (file)
@@ -8,15 +8,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageRu.php */
 class LanguageRuTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providePluralFourForms */
-       function testPluralFourForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralFourForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -33,16 +37,16 @@ class LanguageRuTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'several' );
+               $forms =  array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
        function providePluralTwoForms() {
                return array(
                        array( 'one', 1 ),
-                       array( 'several', 11 ),
-                       array( 'several', 91 ),
-                       array( 'several', 121 ),
+                       array( 'other', 11 ),
+                       array( 'other', 91 ),
+                       array( 'other', 121 ),
                );
        }
 
index c7dd802..3e676b9 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSe.php */
 class LanguageSeTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPluralThreeForms */
-       function testPluralThreeForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralThreeForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
@@ -23,14 +27,14 @@ class LanguageSeTest extends LanguageClassesTestCase {
                );
        }
 
-       /** @dataProvider providerPlural */
-       function testPlural( $result, $value ) {
+       /** @dataProvider providerPluralTwoForms */
+       function testPluralTwoForms( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       function providerPluralTwoForms() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
index 95e6346..4721d50 100644 (file)
@@ -7,13 +7,17 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSgs.php */
 class LanguageSgsTest extends LanguageClassesTestCase {
-
        /** @dataProvider providePluralAllForms */
        function testPluralAllForms( $result, $value ) {
                $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providePluralAllForms */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providePluralAllForms() {
                return array(
                        array( 'few', 0 ),
index 282fd2f..e59c894 100644 (file)
@@ -7,18 +7,30 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSh.php */
 class LanguageShTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'many', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+                       array( 'one',  1 ),
+                       array( 'few', 2 ),
+                       array( 'few', 4 ),
+                       array( 'many', 5 ),
+                       array( 'many', 10 ),
+                       array( 'many', 11 ),
+                       array( 'many', 12 ),
+                       array( 'one', 101 ),
+                       array( 'few', 102 ),
+                       array( 'many', 111 ),
                );
        }
 }
index 89cbbf0..48d253c 100644 (file)
@@ -8,15 +8,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSk.php */
 class LanguageSkTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
index 96c370f..232e35b 100644 (file)
@@ -8,20 +8,24 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSl.php */
 class LanguageSlTest extends LanguageClassesTestCase {
-
        /** @dataProvider providerPlural */
        function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /** @dataProvider providerPlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
        function providerPlural() {
-               return array(
-                       array( 'other', 0 ),
-                       array( 'one', 1 ),
-                       array( 'two', 2 ),
-                       array( 'few', 3 ),
-                       array( 'few', 4 ),
+               return array (
+                       array( 'other',  0 ),
+                       array( 'one',   1 ),
+                       array( 'two',   2 ),
+                       array( 'few',   3 ),
+                       array( 'few',   4 ),
                        array( 'other', 5 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
index 6d65521..3503461 100644 (file)
@@ -7,15 +7,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageSma.php */
 class LanguageSmaTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPluralThreeForms */
-       function testPluralThreeForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'two', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPluralThreeForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
@@ -23,14 +27,14 @@ class LanguageSmaTest extends LanguageClassesTestCase {
                );
        }
 
-       /** @dataProvider providerPlural */
-       function testPlural( $result, $value ) {
+       /** @dataProvider providerPluralTwoForms */
+       function testPluralTwoForms( $result, $value ) {
                $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
+       function providerPluralTwoForms() {
+               return array (
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
index 5611030..7fbe13c 100644 (file)
@@ -16,9 +16,6 @@ require_once dirname( __DIR__ ) . '/bootstrap.php';
 
 /** Tests for MediaWiki languages/LanguageSr.php */
 class LanguageSrTest extends LanguageClassesTestCase {
-
-       ##### TESTS #######################################################
-
        function testEasyConversions() {
                $this->assertCyrillic(
                        'шђчћжШЂЧЋЖ',
@@ -113,14 +110,19 @@ class LanguageSrTest extends LanguageClassesTestCase {
                );
        }
 
-       /** @dataProvider providePluralFourForms */
-       function testPluralFourForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralFourForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -137,16 +139,16 @@ class LanguageSrTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'several' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
        function providePluralTwoForms() {
                return array(
                        array( 'one', 1 ),
-                       array( 'several', 11 ),
-                       array( 'several', 91 ),
-                       array( 'several', 121 ),
+                       array( 'other', 11 ),
+                       array( 'other', 91 ),
+                       array( 'other', 121 ),
                );
        }
 
index 8af0eee..4a86086 100644 (file)
@@ -7,18 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageTi.php */
 class LanguageTiTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'one',  0 ),
+                       array( 'one',  1 ),
+                       array( 'other', 2 ),
                );
        }
 }
index abd8581..383fe6c 100644 (file)
@@ -7,18 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageTl.php */
 class LanguageTlTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'one',  0 ),
+                       array( 'one',  1 ),
+                       array( 'other', 2 ),
                );
        }
 }
index 9bbfaf6..f7f7369 100644 (file)
@@ -8,15 +8,19 @@
 
 /** Tests for MediaWiki languages/classes/LanguageUk.php */
 class LanguageUkTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providePluralFourForms */
-       function testPluralFourForms( $result, $value ) {
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
                $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providePluralFourForms() {
-               return array(
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -33,16 +37,16 @@ class LanguageUkTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'several' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
        function providePluralTwoForms() {
                return array(
                        array( 'one', 1 ),
-                       array( 'several', 11 ),
-                       array( 'several', 91 ),
-                       array( 'several', 121 ),
+                       array( 'other', 11 ),
+                       array( 'other', 91 ),
+                       array( 'other', 121 ),
                );
        }
 }
index 28329fa..b4c92b7 100644 (file)
@@ -7,18 +7,22 @@
 
 /** Tests for MediaWiki languages/classes/LanguageWa.php */
 class LanguageWaTest extends LanguageClassesTestCase {
-
-       /** @dataProvider providerPlural */
+       /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'many' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
-       function providerPlural() {
-               return array(
-                       array( 'one', 0 ),
-                       array( 'one', 1 ),
-                       array( 'many', 2 ),
+       /** @dataProvider providePlural */
+       function testGetPluralRuleType( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'one',  0 ),
+                       array( 'one',  1 ),
+                       array( 'other', 2 ),
                );
        }
 }