Santhosh has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/384006 )

Change subject: Update formatNum implmentation to match tr35 and latest CLDR
......................................................................

Update formatNum implmentation to match tr35 and latest CLDR

* Update digitGroupingPattern to match CLDR 31: New versions of CLDR has
  digit grouping pattern with decimal part. Update digitGroupingPattern
  values in Message classes with this improved pattern.
  Refer: http://unicode.org/reports/tr35/tr35-numbers.html

* Refer the following chart for the decimal patterns.
  
http://www.unicode.org/cldr/charts/31/by_type/numbers.number_formatting_patterns.html

* Uses PHP NumberFormatter class for the commafy implementation. Fallbacks
  to Simple ###,###.### pattern if that class is not available.

* Some tests need to update to match the TR 35 spec

* Add support for minimumGroupingDigits in the spec. Since MediaWiki has
  customized values for this in many languages, introduced minimumGroupingDigits
  in MessageXX classes. Since this support is added, a large set of
  overridden commafy implementation in LanguageXX classes removed. That also
  resulted removing some LanguageXX classes.

* The formatNum public method in Language.php is the preferred way to
  use this feature. It does seperator transformation and digit transformation
  wherever applicable. The commafy method in Language.php is just a
  fallback implementation when NumberFormatter class is not available.
  Also removed tests based on commafy methods and replaced it with tests
  based on formatNum

Note: The corresponding js implmentaiton is not changed in this commit.

Bug: T167088
Change-Id: Ic721b9a91e78e4ef07040339d1006b7a90a910c0
---
M autoload.php
M includes/cache/localisation/LocalisationCache.php
M languages/Language.php
M languages/classes/LanguageBe_tarask.php
D languages/classes/LanguageBg.php
D languages/classes/LanguageEs.php
D languages/classes/LanguageEt.php
M languages/classes/LanguageHy.php
M languages/classes/LanguageKaa.php
M languages/classes/LanguageKk_cyrl.php
M languages/classes/LanguageKm.php
M languages/classes/LanguageKsh.php
M languages/classes/LanguageKu.php
D languages/classes/LanguageKu_ku.php
M languages/classes/LanguageMy.php
M languages/classes/LanguagePl.php
D languages/classes/LanguageRu.php
D languages/classes/LanguageUk.php
M languages/messages/MessagesAr.php
M languages/messages/MessagesAs.php
M languages/messages/MessagesBe_tarask.php
M languages/messages/MessagesBg.php
M languages/messages/MessagesBn.php
M languages/messages/MessagesEn.php
M languages/messages/MessagesEs.php
M languages/messages/MessagesEt.php
M languages/messages/MessagesGu.php
M languages/messages/MessagesHi.php
M languages/messages/MessagesHy.php
M languages/messages/MessagesKaa.php
M languages/messages/MessagesKk_cyrl.php
M languages/messages/MessagesKn.php
M languages/messages/MessagesKsh.php
M languages/messages/MessagesKu.php
M languages/messages/MessagesKu_latn.php
M languages/messages/MessagesMl.php
M languages/messages/MessagesMr.php
M languages/messages/MessagesOr.php
M languages/messages/MessagesPa.php
M languages/messages/MessagesPl.php
M languages/messages/MessagesRu.php
M languages/messages/MessagesSa.php
M languages/messages/MessagesTa.php
M languages/messages/MessagesTe.php
M languages/messages/MessagesUk.php
M tests/phpunit/languages/LanguageTest.php
M tests/phpunit/languages/classes/LanguageArTest.php
M tests/phpunit/languages/classes/LanguageArqTest.php
M tests/phpunit/languages/classes/LanguageBe_taraskTest.php
M tests/phpunit/languages/classes/LanguageMlTest.php
M tests/phpunit/languages/classes/LanguageNlTest.php
M tests/phpunit/languages/classes/LanguagePlTest.php
M tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
53 files changed, 169 insertions(+), 481 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/06/384006/1

diff --git a/autoload.php b/autoload.php
index 0a2ecf0..a9ec935 100644
--- a/autoload.php
+++ b/autoload.php
@@ -700,15 +700,12 @@
        'LanguageAr' => __DIR__ . '/languages/classes/LanguageAr.php',
        'LanguageAz' => __DIR__ . '/languages/classes/LanguageAz.php',
        'LanguageBe_tarask' => __DIR__ . 
'/languages/classes/LanguageBe_tarask.php',
-       'LanguageBg' => __DIR__ . '/languages/classes/LanguageBg.php',
        'LanguageBs' => __DIR__ . '/languages/classes/LanguageBs.php',
        'LanguageCode' => __DIR__ . '/languages/LanguageCode.php',
        'LanguageConverter' => __DIR__ . '/languages/LanguageConverter.php',
        'LanguageCu' => __DIR__ . '/languages/classes/LanguageCu.php',
        'LanguageDsb' => __DIR__ . '/languages/classes/LanguageDsb.php',
        'LanguageEn' => __DIR__ . '/languages/classes/LanguageEn.php',
-       'LanguageEs' => __DIR__ . '/languages/classes/LanguageEs.php',
-       'LanguageEt' => __DIR__ . '/languages/classes/LanguageEt.php',
        'LanguageFi' => __DIR__ . '/languages/classes/LanguageFi.php',
        'LanguageGa' => __DIR__ . '/languages/classes/LanguageGa.php',
        'LanguageGan' => __DIR__ . '/languages/classes/LanguageGan.php',
@@ -723,21 +720,17 @@
        'LanguageKm' => __DIR__ . '/languages/classes/LanguageKm.php',
        'LanguageKsh' => __DIR__ . '/languages/classes/LanguageKsh.php',
        'LanguageKu' => __DIR__ . '/languages/classes/LanguageKu.php',
-       'LanguageKu_ku' => __DIR__ . '/languages/classes/LanguageKu_ku.php',
        'LanguageLa' => __DIR__ . '/languages/classes/LanguageLa.php',
        'LanguageMl' => __DIR__ . '/languages/classes/LanguageMl.php',
        'LanguageMy' => __DIR__ . '/languages/classes/LanguageMy.php',
        'LanguageOs' => __DIR__ . '/languages/classes/LanguageOs.php',
-       'LanguagePl' => __DIR__ . '/languages/classes/LanguagePl.php',
        'LanguageQqx' => __DIR__ . '/languages/classes/LanguageQqx.php',
-       'LanguageRu' => __DIR__ . '/languages/classes/LanguageRu.php',
        'LanguageShi' => __DIR__ . '/languages/classes/LanguageShi.php',
        'LanguageSl' => __DIR__ . '/languages/classes/LanguageSl.php',
        'LanguageSr' => __DIR__ . '/languages/classes/LanguageSr.php',
        'LanguageTg' => __DIR__ . '/languages/classes/LanguageTg.php',
        'LanguageTr' => __DIR__ . '/languages/classes/LanguageTr.php',
        'LanguageTyv' => __DIR__ . '/languages/classes/LanguageTyv.php',
-       'LanguageUk' => __DIR__ . '/languages/classes/LanguageUk.php',
        'LanguageUz' => __DIR__ . '/languages/classes/LanguageUz.php',
        'LanguageWa' => __DIR__ . '/languages/classes/LanguageWa.php',
        'LanguageYue' => __DIR__ . '/languages/classes/LanguageYue.php',
diff --git a/includes/cache/localisation/LocalisationCache.php 
b/includes/cache/localisation/LocalisationCache.php
index a0ce95e..5e0a688 100644
--- a/includes/cache/localisation/LocalisationCache.php
+++ b/includes/cache/localisation/LocalisationCache.php
@@ -109,7 +109,8 @@
        static public $allKeys = [
                'fallback', 'namespaceNames', 'bookstoreList',
                'magicWords', 'messages', 'rtl', 'capitalizeAllNouns', 
'digitTransformTable',
-               'separatorTransformTable', 'fallback8bitEncoding', 
'linkPrefixExtension',
+               'separatorTransformTable', 'minimumGroupingDigits',
+               'fallback8bitEncoding', 'linkPrefixExtension',
                'linkTrail', 'linkPrefixCharset', 'namespaceAliases',
                'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
                'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
diff --git a/languages/Language.php b/languages/Language.php
index 435f058..a0f83e7 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -3252,12 +3252,53 @@
         */
        public function formatNum( $number, $nocommafy = false ) {
                global $wgTranslateNumerals;
+
+               if ( $number === null || $number === '' ) {
+                       return '';
+               }
+
+               $separatorTransformTable = $this->separatorTransformTable();
+
+               // minimumGroupingDigits can be used to suppress groupings 
below a certain value.
+               // This is used for languages such as Polish, where one would 
only write the grouping
+               // separator for values above 9999 - numbers with more than 4 
digits.
+               // NumberFormatter is yet to support minimumGroupingDigits, ICU 
has it as experimental feature.
+               // But, even then, MediaWiki has different 
minimumGroupingDigits values than CLDR.
+               // So we implement minimumGroupingDigits outside 
NumberFormatter.
+               $minimumGroupingDigits = intval( $this->minimumGroupingDigits() 
);
+               if ( $minimumGroupingDigits > 1 && strlen( (string)abs( intval( 
$number ) ) ) <= $minimumGroupingDigits ) {
+                       // Even if numbers does not need commafy, do decimal 
seperator tranformation.
+                       // For example 1234.56 becoms 1234,56 in pl with 
$minimumGroupingDigits = 4
+                       return strtr( $number, $separatorTransformTable ? : [] 
);
+               }
+
                if ( !$nocommafy ) {
-                       $number = $this->commafy( $number );
-                       $s = $this->separatorTransformTable();
-                       if ( $s ) {
-                               $number = strtr( $number, $s );
+                       if ( class_exists( NumberFormatter::class ) ) {
+                               $digitGroupingPattern = 
$this->digitGroupingPattern();
+
+                               if ( $digitGroupingPattern ) {
+                                       $fmt = new NumberFormatter(
+                                               $this->getCode(), 
NumberFormatter::PATTERN_DECIMAL, $digitGroupingPattern
+                                       );
+                               } else {
+                                       $fmt = new NumberFormatter( 
$this->getCode(), NumberFormatter::DECIMAL );
+                               }
+
+                               // NumberFormatter supports seperator 
transformation, but it does not know all
+                               // languages MW supports. Example: arq. Also, 
languages like pl has customisation.
+                               // So manually set it.
+                               if ( $separatorTransformTable ) {
+                                       $fmt->setSymbol( 
NumberFormatter::DECIMAL_SEPARATOR_SYMBOL, $separatorTransformTable[ '.' ] );
+                                       $fmt->setSymbol( 
NumberFormatter::GROUPING_SEPARATOR_SYMBOL, $separatorTransformTable[ ',' ] );
+                               }
+
+                               $number = $fmt->format( $number );
+                       } else {
+                               // Fallback implementation. Follows fixed 
thousands seperator pattern
+                               $number = $this->commafy( $number );
+                               $number = strtr( $number, 
$separatorTransformTable ? : [] );
                        }
+
                }
 
                if ( $wgTranslateNumerals ) {
@@ -3280,6 +3321,10 @@
         */
        public function formatNumNoSeparators( $number ) {
                return $this->formatNum( $number, true );
+       }
+
+       public function minimumGroupingDigits() {
+               return self::$dataCache->getItem( $this->mCode, 
'minimumGroupingDigits' );
        }
 
        /**
@@ -3306,58 +3351,22 @@
        }
 
        /**
-        * Adds commas to a given number
+        * Adds commas to a given number.
+        * This is a very simple fallback implementation with grouping of 3 
digits.
+        * NumberFormatting class is used when available for correct 
implamentation as per tr35
+        * specification of unicode.
+        *
         * @since 1.19
         * @param mixed $number
         * @return string
         */
        function commafy( $number ) {
-               $digitGroupingPattern = $this->digitGroupingPattern();
-               if ( $number === null ) {
+               if ( $number === null || $number === '' ) {
                        return '';
                }
 
-               if ( !$digitGroupingPattern || $digitGroupingPattern === 
"###,###,###" ) {
-                       // default grouping is at thousands,  use the same for 
###,###,### pattern too.
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $number ) ) );
-               } else {
-                       // Ref: 
http://cldr.unicode.org/translation/number-patterns
-                       $sign = "";
-                       if ( intval( $number ) < 0 ) {
-                               // For negative numbers apply the algorithm 
like positive number and add sign.
-                               $sign = "-";
-                               $number = substr( $number, 1 );
-                       }
-                       $integerPart = [];
-                       $decimalPart = [];
-                       $numMatches = preg_match_all( "/(#+)/", 
$digitGroupingPattern, $matches );
-                       preg_match( "/\d+/", $number, $integerPart );
-                       preg_match( "/\.\d*/", $number, $decimalPart );
-                       $groupedNumber = ( count( $decimalPart ) > 0 ) ? 
$decimalPart[0] : "";
-                       if ( $groupedNumber === $number ) {
-                               // the string does not have any number part. 
Eg: .12345
-                               return $sign . $groupedNumber;
-                       }
-                       $start = $end = ( $integerPart ) ? strlen( 
$integerPart[0] ) : 0;
-                       while ( $start > 0 ) {
-                               $match = $matches[0][$numMatches - 1];
-                               $matchLen = strlen( $match );
-                               $start = $end - $matchLen;
-                               if ( $start < 0 ) {
-                                       $start = 0;
-                               }
-                               $groupedNumber = substr( $number, $start, $end 
- $start ) . $groupedNumber;
-                               $end = $start;
-                               if ( $numMatches > 1 ) {
-                                       // use the last pattern for the rest of 
the number
-                                       $numMatches--;
-                               }
-                               if ( $start > 0 ) {
-                                       $groupedNumber = "," . $groupedNumber;
-                               }
-                       }
-                       return $sign . $groupedNumber;
-               }
+               // default grouping is at thousands, with ###,###,### pattern.
+               return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $number ) ) );
        }
 
        /**
diff --git a/languages/classes/LanguageBe_tarask.php 
b/languages/classes/LanguageBe_tarask.php
index 6007bb4..31ce46d 100644
--- a/languages/classes/LanguageBe_tarask.php
+++ b/languages/classes/LanguageBe_tarask.php
@@ -54,20 +54,4 @@
 
                return $s;
        }
-
-       /**
-        * Four-digit number should be without group commas (spaces)
-        * So "1 234 567", "12 345" but "1234"
-        *
-        * @param string $_
-        *
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( preg_match( '/^-?\d{1,4}(\.\d*)?$/', $_ ) ) {
-                       return $_;
-               } else {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               }
-       }
 }
diff --git a/languages/classes/LanguageBg.php b/languages/classes/LanguageBg.php
deleted file mode 100644
index a592d02..0000000
--- a/languages/classes/LanguageBg.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- * Bulgarian (Български) 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
- */
-
-/**
- * Bulgarian (Български)
- *
- * @ingroup Language
- */
-class LanguageBg extends Language {
-       /**
-        * ISO number formatting: 123 456 789,99.
-        * Avoid tripple grouping by numbers with whole part up to 4 digits.
-        *
-        * @param string $_
-        *
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               } else {
-                       return $_;
-               }
-       }
-}
diff --git a/languages/classes/LanguageEs.php b/languages/classes/LanguageEs.php
deleted file mode 100644
index 098148f..0000000
--- a/languages/classes/LanguageEs.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**
- * Spanish (español) 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
- */
-
-/**
- * Spanish (español)
- *
- * @ingroup Language
- */
-class LanguageEs extends Language {
-
-       /**
-        * @param string $_
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( !preg_match( '/^-?\d{1,4}(\.\d+)?$/', $_ ) ) {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               } else {
-                       return $_;
-               }
-       }
-}
diff --git a/languages/classes/LanguageEt.php b/languages/classes/LanguageEt.php
deleted file mode 100644
index 759531b..0000000
--- a/languages/classes/LanguageEt.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**
- * Estonian (eesti) 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
- */
-
-/**
- * Estonian (eesti)
- *
- * @ingroup Language
- */
-class LanguageEt extends Language {
-       /**
-        * Avoid grouping whole numbers between -9999 to 9999
-        * @param string $_
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( !preg_match( '/^\-?\d{1,4}(\.\d+)?$/', $_ ) ) {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               } else {
-                       return $_;
-               }
-       }
-}
diff --git a/languages/classes/LanguageHy.php b/languages/classes/LanguageHy.php
index 05b0ebe..602a589 100644
--- a/languages/classes/LanguageHy.php
+++ b/languages/classes/LanguageHy.php
@@ -78,19 +78,4 @@
                }
                return $word;
        }
-
-       /**
-        * Armenian numeric format is "12 345,67" but "1234,56"
-        *
-        * @param string $_
-        *
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               } else {
-                       return $_;
-               }
-       }
 }
diff --git a/languages/classes/LanguageKaa.php 
b/languages/classes/LanguageKaa.php
index 30abe25..57f9529 100644
--- a/languages/classes/LanguageKaa.php
+++ b/languages/classes/LanguageKaa.php
@@ -75,19 +75,4 @@
                return parent::lcfirst( $string );
        }
 
-       /**
-        * Avoid grouping whole numbers between 0 to 9999
-        *
-        * @param string $_
-        *
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               } else {
-                       return $_;
-               }
-       }
-
 }
diff --git a/languages/classes/LanguageKk_cyrl.php 
b/languages/classes/LanguageKk_cyrl.php
index 39d19e7..b95dabd 100644
--- a/languages/classes/LanguageKk_cyrl.php
+++ b/languages/classes/LanguageKk_cyrl.php
@@ -775,18 +775,4 @@
                return $lastLetter;
        }
 
-       /**
-        * Avoid grouping whole numbers between 0 to 9999
-        *
-        * @param string $_
-        *
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               } else {
-                       return $_;
-               }
-       }
 }
diff --git a/languages/classes/LanguageKm.php b/languages/classes/LanguageKm.php
index 87d2127..ac96e80 100644
--- a/languages/classes/LanguageKm.php
+++ b/languages/classes/LanguageKm.php
@@ -33,7 +33,7 @@
         * @param string $_
         * @return string
         */
-       function commafy( $_ ) {
+       function formatNum( $_ ) {
                /* NO-op for Khmer. Cannot use
                 * $separatorTransformTable = [ ',' => '' ]
                 * That would break when parsing and doing strstr '' => 'foo';
diff --git a/languages/classes/LanguageKsh.php 
b/languages/classes/LanguageKsh.php
index 9ef53e5..d82a4ac 100644
--- a/languages/classes/LanguageKsh.php
+++ b/languages/classes/LanguageKsh.php
@@ -163,22 +163,7 @@
                return $word;
        }
 
-       /**
-        * Avoid grouping whole numbers between 0 to 9999
-        *
-        * @param string $_
-        *
-        * @return string
-        */
-       public function commafy( $_ ) {
-               if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               } else {
-                       return $_;
-               }
-       }
-
-       /**
+       /**
         * Handle cases of (1, other, 0) or (1, other)
         *
         * @param int $count
diff --git a/languages/classes/LanguageKu.php b/languages/classes/LanguageKu.php
index c837409..ef77775 100644
--- a/languages/classes/LanguageKu.php
+++ b/languages/classes/LanguageKu.php
@@ -227,7 +227,7 @@
  *
  * @ingroup Language
  */
-class LanguageKu extends LanguageKu_ku {
+class LanguageKu extends Language {
 
        function __construct() {
                parent::__construct();
diff --git a/languages/classes/LanguageKu_ku.php 
b/languages/classes/LanguageKu_ku.php
deleted file mode 100644
index 4e9c365..0000000
--- a/languages/classes/LanguageKu_ku.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Kurdish 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
- */
-
-/**
- * Kurdish
- *
- * @ingroup Language
- */
-// @codingStandardsIgnoreStart Ignore class name is not in camel caps format 
error
-class LanguageKu_ku extends Language {
-       // @codingStandardsIgnoreEnd
-       /**
-        * Avoid grouping whole numbers between 0 to 9999
-        *
-        * @param string $_
-        *
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               } else {
-                       return $_;
-               }
-       }
-}
diff --git a/languages/classes/LanguageMy.php b/languages/classes/LanguageMy.php
index f8b50fc..160a0ff 100644
--- a/languages/classes/LanguageMy.php
+++ b/languages/classes/LanguageMy.php
@@ -33,7 +33,7 @@
         * @param string $_
         * @return string
         */
-       function commafy( $_ ) {
+       function formatNum( $_ ) {
                /* NO-op. Cannot use
                 * $separatorTransformTable = [ ',' => '' ]
                 * That would break when parsing and doing strstr '' => 'foo';
diff --git a/languages/classes/LanguagePl.php b/languages/classes/LanguagePl.php
index e0bf069..2739fec 100644
--- a/languages/classes/LanguagePl.php
+++ b/languages/classes/LanguagePl.php
@@ -27,15 +27,5 @@
  * @ingroup Language
  */
 class LanguagePl extends Language {
-       /**
-        * @param string $_
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( !preg_match( '/^\-?\d{1,4}(\.\d+)?$/', $_ ) ) {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               } else {
-                       return $_;
-               }
-       }
+        
 }
diff --git a/languages/classes/LanguageRu.php b/languages/classes/LanguageRu.php
deleted file mode 100644
index 7b15721..0000000
--- a/languages/classes/LanguageRu.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Russian (русский язык) 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
- */
-
-/**
- * Russian (русский язык)
- *
- * You can contact:
- * Alexander Sigachov (alexander.sigachov at Googgle Mail)
- * Amir E. Aharoni (amir.ahar...@mail.huji.ac.il)
- *
- * @ingroup Language
- */
-class LanguageRu extends Language {
-       /**
-        * Four-digit number should be without group commas (spaces)
-        * See manual of style at 
https://ru.wikipedia.org/wiki/Википедия:Оформление_статей
-        * So "1 234 567", "12 345" but "1234"
-        *
-        * @param string $_
-        *
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( preg_match( '/^-?\d{1,4}(\.\d*)?$/', $_ ) ) {
-                       return $_;
-               } else {
-                       return strrev( (string)preg_replace( 
'/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
-               }
-       }
-}
diff --git a/languages/classes/LanguageUk.php b/languages/classes/LanguageUk.php
deleted file mode 100644
index a155d03..0000000
--- a/languages/classes/LanguageUk.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Ukrainian (українська мова) 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
- */
-
-/**
- * Ukrainian (українська мова)
- *
- * @ingroup Language
- */
-class LanguageUk extends Language {
-       /**
-        * Ukrainian numeric format is "12 345,67" but "1234,56"
-        *
-        * @param string $_
-        *
-        * @return string
-        */
-       function commafy( $_ ) {
-               if ( !preg_match( '/^\-?\d{1,4}(\.\d+)?$/', $_ ) ) {
-                       return strrev( (string)preg_replace(
-                               '/(\d{3})(?=\d)(?!\d*\.)/',
-                               '$1,',
-                               strrev( $_ )
-                       ) );
-               } else {
-                       return $_;
-               }
-       }
-}
diff --git a/languages/messages/MessagesAr.php 
b/languages/messages/MessagesAr.php
index e2845a5..0331c7b 100644
--- a/languages/messages/MessagesAr.php
+++ b/languages/messages/MessagesAr.php
@@ -444,3 +444,5 @@
        'button-headline' => 'ar/button_headline.png',
        'button-nowiki'   => 'ar/button_nowiki.png',
 ];
+
+$digitGroupingPattern = "#,##0.###";
diff --git a/languages/messages/MessagesAs.php 
b/languages/messages/MessagesAs.php
index 2516fc7..a59c7ad 100644
--- a/languages/messages/MessagesAs.php
+++ b/languages/messages/MessagesAs.php
@@ -164,4 +164,4 @@
        '9' => '৯', # &#x09ef;
 ];
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesBe_tarask.php 
b/languages/messages/MessagesBe_tarask.php
index a6fd58aa..5ff2b70 100644
--- a/languages/messages/MessagesBe_tarask.php
+++ b/languages/messages/MessagesBe_tarask.php
@@ -244,3 +244,5 @@
        'button-italic'   => 'be-tarask/button_italic.png',
        'button-link'     => 'be-tarask/button_link.png',
 ];
+
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesBg.php 
b/languages/messages/MessagesBg.php
index 3a21e75..3c8f4dd 100644
--- a/languages/messages/MessagesBg.php
+++ b/languages/messages/MessagesBg.php
@@ -218,3 +218,4 @@
 $linkTrail = '/^([a-zабвгдежзийклмнопрстуфхцчшщъыьэюя]+)(.*)$/sDu';
 
 $separatorTransformTable = [ ',' => "\xc2\xa0", '.' => ',' ];
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesBn.php 
b/languages/messages/MessagesBn.php
index 4edce3d..aea3825 100644
--- a/languages/messages/MessagesBn.php
+++ b/languages/messages/MessagesBn.php
@@ -47,7 +47,7 @@
        '9' => '৯'
 ];
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
 
 $specialPageAliases = [
        'Activeusers'               => [ 'সক্রিয়_ব্যবহারকারী' ],
diff --git a/languages/messages/MessagesEn.php 
b/languages/messages/MessagesEn.php
index a3173d4..b8a8f87 100644
--- a/languages/messages/MessagesEn.php
+++ b/languages/messages/MessagesEn.php
@@ -664,3 +664,5 @@
        'whatlinkshere',
        'word-separator',
 ];
+
+$digitGroupingPattern = "#,##0.###";
diff --git a/languages/messages/MessagesEs.php 
b/languages/messages/MessagesEs.php
index d7a780e..c863600 100644
--- a/languages/messages/MessagesEs.php
+++ b/languages/messages/MessagesEs.php
@@ -300,3 +300,4 @@
 
 $separatorTransformTable = [ ',' => "\xc2\xa0", '.' => ',' ];
 $linkTrail = '/^([a-záéíóúñ]+)(.*)$/sDu';
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesEt.php 
b/languages/messages/MessagesEt.php
index fcc12c9..e1508ef 100644
--- a/languages/messages/MessagesEt.php
+++ b/languages/messages/MessagesEt.php
@@ -291,3 +291,5 @@
        'et roman date' => 'j. xrm Y',
        'et roman both' => 'j. xrm Y, "kell" H:i',
 ];
+
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesGu.php 
b/languages/messages/MessagesGu.php
index aec3a76..e23a880 100644
--- a/languages/messages/MessagesGu.php
+++ b/languages/messages/MessagesGu.php
@@ -124,6 +124,6 @@
        '9' => '૯', # &#x0aef;
 ];
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
 
 $linkTrail = "/^([\x{0A80}-\x{0AFF}]+)(.*)$/sDu";
diff --git a/languages/messages/MessagesHi.php 
b/languages/messages/MessagesHi.php
index 5a70a83..26b6719 100644
--- a/languages/messages/MessagesHi.php
+++ b/languages/messages/MessagesHi.php
@@ -298,4 +298,4 @@
 ];
 $linkTrail = "/^([a-z\x{0900}-\x{0963}\x{0966}-\x{A8E0}-\x{A8FF}]+)(.*)$/sDu";
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesHy.php 
b/languages/messages/MessagesHy.php
index 9a5a809..8117fa5 100644
--- a/languages/messages/MessagesHy.php
+++ b/languages/messages/MessagesHy.php
@@ -255,3 +255,5 @@
 ];
 
 $linkTrail = '/^([a-zաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև«»]+)(.*)$/sDu';
+
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesKaa.php 
b/languages/messages/MessagesKaa.php
index 52e8e77..396b471 100644
--- a/languages/messages/MessagesKaa.php
+++ b/languages/messages/MessagesKaa.php
@@ -142,3 +142,4 @@
 
 $linkTrail = "/^((?:[a-zıʼ’“»]|'(?!'))+)(.*)$/sDu";
 $linkPrefixCharset = 'a-zıA-Zİ\\x80-\\xff';
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesKk_cyrl.php 
b/languages/messages/MessagesKk_cyrl.php
index 2857721..7db56d3 100644
--- a/languages/messages/MessagesKk_cyrl.php
+++ b/languages/messages/MessagesKk_cyrl.php
@@ -345,3 +345,5 @@
        'Whatlinkshere'             => [ 'Мында_сілтегендер' ],
        'Withoutinterwiki'          => [ 'Уики-аралықсыздар' ],
 ];
+
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesKn.php 
b/languages/messages/MessagesKn.php
index 5fa77e9..0973b4f 100644
--- a/languages/messages/MessagesKn.php
+++ b/languages/messages/MessagesKn.php
@@ -61,4 +61,4 @@
        '9' => '೯', # &#x0cef;
 ];
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesKsh.php 
b/languages/messages/MessagesKsh.php
index 1fef838..7479874 100644
--- a/languages/messages/MessagesKsh.php
+++ b/languages/messages/MessagesKsh.php
@@ -203,3 +203,5 @@
 $imageFiles = [
        'button-italic'   => 'ksh/button_italic.png',
 ];
+
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesKu.php 
b/languages/messages/MessagesKu.php
index 5da5f28..d493c42 100644
--- a/languages/messages/MessagesKu.php
+++ b/languages/messages/MessagesKu.php
@@ -9,3 +9,4 @@
  */
 
 $fallback = 'ku-latn';
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesKu_latn.php 
b/languages/messages/MessagesKu_latn.php
index 32844a2..0c6c7e5 100644
--- a/languages/messages/MessagesKu_latn.php
+++ b/languages/messages/MessagesKu_latn.php
@@ -110,3 +110,4 @@
 ];
 
 $linkTrail = '/^([a-zçêîşûẍḧÇÊÎŞÛẌḦ]+)(.*)$/sDu';
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesMl.php 
b/languages/messages/MessagesMl.php
index f6d0d14..8b17dcf 100644
--- a/languages/messages/MessagesMl.php
+++ b/languages/messages/MessagesMl.php
@@ -355,4 +355,4 @@
 
 $linkTrail = "/^([a-z\x{0D02}-\x{0D7F}]+)(.*)$/sDu";
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesMr.php 
b/languages/messages/MessagesMr.php
index b51839d..441cdcc 100644
--- a/languages/messages/MessagesMr.php
+++ b/languages/messages/MessagesMr.php
@@ -325,4 +325,4 @@
 
 $linkTrail = 
"/^([\xE0\xA4\x80-\xE0\xA5\xA3\xE0\xA5\xB1-\xE0\xA5\xBF\xEF\xBB\xBF\xE2\x80\x8D]+)(.*)$/sDu";
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesOr.php 
b/languages/messages/MessagesOr.php
index d17105a..cd81378 100644
--- a/languages/messages/MessagesOr.php
+++ b/languages/messages/MessagesOr.php
@@ -251,4 +251,4 @@
        'url_query'                 => [ '0', 'ପ୍ରଶ୍ନ', 'QUERY' ],
 ];
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesPa.php 
b/languages/messages/MessagesPa.php
index 253119b..c856cb5 100644
--- a/languages/messages/MessagesPa.php
+++ b/languages/messages/MessagesPa.php
@@ -181,4 +181,4 @@
 
 $linkTrail = 
'/^([ਁਂਃਅਆਇਈਉਊਏਐਓਔਕਖਗਘਙਚਛਜਝਞਟਠਡਢਣਤਥਦਧਨਪਫਬਭਮਯਰਲਲ਼ਵਸ਼ਸਹ਼ਾਿੀੁੂੇੈੋੌ੍ਖ਼ਗ਼ਜ਼ੜਫ਼ੰੱੲੳa-z]+)(.*)$/sDu';
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesPl.php 
b/languages/messages/MessagesPl.php
index 01a9d1a..aaa5ffb 100644
--- a/languages/messages/MessagesPl.php
+++ b/languages/messages/MessagesPl.php
@@ -317,3 +317,5 @@
        'pagesincategory_pages'     => [ '0', 'strony', 'pages' ],
        'pagesincategory_files'     => [ '0', 'pliki', 'files' ],
 ];
+
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesRu.php 
b/languages/messages/MessagesRu.php
index b5f310d..7f3ebb4 100644
--- a/languages/messages/MessagesRu.php
+++ b/languages/messages/MessagesRu.php
@@ -431,3 +431,4 @@
 ];
 
 $linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюя]+)(.*)$/sDu';
+$minimumGroupingDigits = 4;
diff --git a/languages/messages/MessagesSa.php 
b/languages/messages/MessagesSa.php
index aa5fdeb..5680260 100644
--- a/languages/messages/MessagesSa.php
+++ b/languages/messages/MessagesSa.php
@@ -282,4 +282,4 @@
        'protectionlevel'           => [ '1', 'रक्षास्तर', 'PROTECTIONLEVEL' ],
 ];
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesTa.php 
b/languages/messages/MessagesTa.php
index f089896..5db04d0 100644
--- a/languages/messages/MessagesTa.php
+++ b/languages/messages/MessagesTa.php
@@ -82,4 +82,4 @@
 
 $linkTrail = "/^([\xE0\xAE\x80-\xE0\xAF\xBF]+)(.*)$/sDu";
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesTe.php 
b/languages/messages/MessagesTe.php
index 4f385cf..4f570ff 100644
--- a/languages/messages/MessagesTe.php
+++ b/languages/messages/MessagesTe.php
@@ -146,4 +146,4 @@
 
 $linkTrail = "/^([\xE0\xB0\x81-\xE0\xB1\xAF]+)(.*)$/sDu";
 
-$digitGroupingPattern = "##,##,###";
+$digitGroupingPattern = "#,##,##0.###";
diff --git a/languages/messages/MessagesUk.php 
b/languages/messages/MessagesUk.php
index d851e1c..40d82c9 100644
--- a/languages/messages/MessagesUk.php
+++ b/languages/messages/MessagesUk.php
@@ -391,3 +391,4 @@
 
 $linkTrail = '/^([a-zабвгґдеєжзиіїйклмнопрстуфхцчшщьєюяёъы“»]+)(.*)$/sDu';
 $linkPrefixCharset = '„«';
+$minimumGroupingDigits = 4;
diff --git a/tests/phpunit/languages/LanguageTest.php 
b/tests/phpunit/languages/LanguageTest.php
index a474f20..6bcab43 100644
--- a/tests/phpunit/languages/LanguageTest.php
+++ b/tests/phpunit/languages/LanguageTest.php
@@ -1654,18 +1654,18 @@
        }
 
        /**
-        * @covers Language::commafy()
-        * @dataProvider provideCommafyData
+        * @covers Language::formatNum()
+        * @dataProvider provideFormatNumData
         */
-       public function testCommafy( $number, $numbersWithCommas ) {
+       public function testFormatNum( $number, $numbersWithCommas ) {
                $this->assertEquals(
                        $numbersWithCommas,
-                       $this->getLang()->commafy( $number ),
-                       "commafy('$number')"
+                       $this->getLang()->formatNum( $number ),
+                       "formatNum('$number')"
                );
        }
 
-       public static function provideCommafyData() {
+       public static function provideFormatNumData() {
                return [
                        [ -1, '-1' ],
                        [ 10, '10' ],
@@ -1674,14 +1674,15 @@
                        [ 10000, '10,000' ],
                        [ 100000, '100,000' ],
                        [ 1000000, '1,000,000' ],
-                       [ -1.0001, '-1.0001' ],
-                       [ 1.0001, '1.0001' ],
-                       [ 10.0001, '10.0001' ],
-                       [ 100.0001, '100.0001' ],
-                       [ 1000.0001, '1,000.0001' ],
-                       [ 10000.0001, '10,000.0001' ],
-                       [ 100000.0001, '100,000.0001' ],
-                       [ 1000000.0001, '1,000,000.0001' ],
+                       [ -1.001, '-1.001' ],
+                       [ 1.001, '1.001' ],
+                       [ 10.0001, '10' ],
+                       [ 100.001, '100.001' ],
+                       [ 1000.001, '1,000.001' ],
+                       [ 10000.001, '10,000.001' ],
+                       [ 100000.001, '100,000.001' ],
+                       [ 1000000.0001, '1,000,000' ],
+                       [ -1.0001, '-1' ],
                        [ '200000000000000000000', 
'200,000,000,000,000,000,000' ],
                        [ '-200000000000000000000', 
'-200,000,000,000,000,000,000' ],
                ];
diff --git a/tests/phpunit/languages/classes/LanguageArTest.php 
b/tests/phpunit/languages/classes/LanguageArTest.php
index 5a66759..969ce09 100644
--- a/tests/phpunit/languages/classes/LanguageArTest.php
+++ b/tests/phpunit/languages/classes/LanguageArTest.php
@@ -6,13 +6,19 @@
 
 /** Tests for MediaWiki languages/LanguageAr.php */
 class LanguageArTest extends LanguageClassesTestCase {
+       public static function provideNumber() {
+               return [
+                       [ '١٬٢٣٤٬٥٦٧', '1234567' ],
+                       [ '١٬٢٨٩٫٤٥٦', '1289.456' ]
+               ];
+       }
+
        /**
+        * @dataProvider provideNumber
         * @covers Language::formatNum
-        * @todo split into a test and a dataprovider
         */
-       public function testFormatNum() {
-               $this->assertEquals( '١٬٢٣٤٬٥٦٧', $this->getLang()->formatNum( 
'1234567' ) );
-               $this->assertEquals( '-١٢٫٨٩', $this->getLang()->formatNum( 
-12.89 ) );
+       public function testFormatNum( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->formatNum( 
$value ) );
        }
 
        /**
diff --git a/tests/phpunit/languages/classes/LanguageArqTest.php 
b/tests/phpunit/languages/classes/LanguageArqTest.php
index e6692d1..7580a7c 100644
--- a/tests/phpunit/languages/classes/LanguageArqTest.php
+++ b/tests/phpunit/languages/classes/LanguageArqTest.php
@@ -19,8 +19,9 @@
        public static function provideNumber() {
                return [
                        [ '1.234.567', '1234567' ],
-                       [ '-12,89', -12.89 ],
-                       ];
+                       [ '1.234.567,568', '1234567.568' ],
+                       [ '-12,89', '-12.89' ]
+               ];
        }
 
 }
diff --git a/tests/phpunit/languages/classes/LanguageBe_taraskTest.php 
b/tests/phpunit/languages/classes/LanguageBe_taraskTest.php
index 26db106..94e99b6 100644
--- a/tests/phpunit/languages/classes/LanguageBe_taraskTest.php
+++ b/tests/phpunit/languages/classes/LanguageBe_taraskTest.php
@@ -28,11 +28,11 @@
 
        /**
         * @see T25156 & r64981
-        * @covers Language::commafy
+        * @covers Language::formatNum
         */
-       public function testCommafy() {
-               $this->assertEquals( '1,234,567', $this->getLang()->commafy( 
'1234567' ) );
-               $this->assertEquals( '12,345', $this->getLang()->commafy( 
'12345' ) );
+       public function testformatNum() {
+               $this->assertEquals( '1 234 567', $this->getLang()->formatNum( 
'1234567' ) );
+               $this->assertEquals( '12 345', $this->getLang()->formatNum( 
'12345' ) );
        }
 
        /**
@@ -40,7 +40,7 @@
         * @covers Language::commafy
         */
        public function testDoesNotCommafyFourDigitsNumber() {
-               $this->assertEquals( '1234', $this->getLang()->commafy( '1234' 
) );
+               $this->assertEquals( '1234', $this->getLang()->formatNum( 
'1234' ) );
        }
 
        /**
diff --git a/tests/phpunit/languages/classes/LanguageMlTest.php 
b/tests/phpunit/languages/classes/LanguageMlTest.php
index 6bac031..8c0d421 100644
--- a/tests/phpunit/languages/classes/LanguageMlTest.php
+++ b/tests/phpunit/languages/classes/LanguageMlTest.php
@@ -26,7 +26,7 @@
                        [ '1,234', '1234' ],
                        [ '12,345.56', '12345.56' ],
                        [ '12,34,56,79,81,23,45,678', '12345679812345678' ],
-                       [ '.12345', '.12345' ],
+                       [ '0.123', '.12345' ],
                        [ '-12,00,000', '-1200000' ],
                        [ '-98', '-98' ],
                        [ '-98', -98 ],
diff --git a/tests/phpunit/languages/classes/LanguageNlTest.php 
b/tests/phpunit/languages/classes/LanguageNlTest.php
index 26bd691..5eadafe 100644
--- a/tests/phpunit/languages/classes/LanguageNlTest.php
+++ b/tests/phpunit/languages/classes/LanguageNlTest.php
@@ -8,17 +8,30 @@
 /** Tests for MediaWiki languages/LanguageNl.php */
 class LanguageNlTest extends LanguageClassesTestCase {
 
+       public static function providerFormatNum() {
+               return [
+                       [ '1.234.567', '1234567' ],
+                       [ '12.345', '12345' ],
+                       [ '1', '1' ],
+                       [ '123', '123' ],
+                       [ '1.234', '1234' ],
+                       [ '12.345,56', '12345.56' ],
+                       [ '12.345.679.812.345.678', '12345679812345678' ],
+                       [ '0,123', '.12345' ],
+                       [ '-1.200.000', '-1200000' ],
+                       [ '-98', '-98' ],
+                       [ '-98', -98 ],
+                       [ '-12.345.678', -12345678 ],
+                       [ '', '' ],
+                       [ '', null ]
+               ];
+       }
+
        /**
+        * @dataProvider providerFormatNum
         * @covers Language::formatNum
-        * @todo split into a test and a dataprovider
         */
-       public function testFormatNum() {
-               $this->assertEquals( '1.234.567', $this->getLang()->formatNum( 
'1234567' ) );
-               $this->assertEquals( '12.345', $this->getLang()->formatNum( 
'12345' ) );
-               $this->assertEquals( '1', $this->getLang()->formatNum( '1' ) );
-               $this->assertEquals( '123', $this->getLang()->formatNum( '123' 
) );
-               $this->assertEquals( '1.234', $this->getLang()->formatNum( 
'1234' ) );
-               $this->assertEquals( '12.345,56', $this->getLang()->formatNum( 
'12345.56' ) );
-               $this->assertEquals( ',1234556', $this->getLang()->formatNum( 
'.1234556' ) );
+       public function testFormatNum( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->formatNum( 
$value ) );
        }
 }
diff --git a/tests/phpunit/languages/classes/LanguagePlTest.php 
b/tests/phpunit/languages/classes/LanguagePlTest.php
index d7a0074..71d9127 100644
--- a/tests/phpunit/languages/classes/LanguagePlTest.php
+++ b/tests/phpunit/languages/classes/LanguagePlTest.php
@@ -76,29 +76,28 @@
        }
 
        /**
-        * @covers LanguagePl::commafy()
-        * @dataProvider provideCommafyData
+        * @covers LanguagePl::formatNum()
+        * @dataProvider provideFormatNum
         */
-       public function testCommafy( $number, $numbersWithCommas ) {
+       public function tesFormatNum( $number, $numbersWithCommas ) {
                $this->assertEquals(
                        $numbersWithCommas,
-                       $this->getLang()->commafy( $number ),
-                       "commafy('$number')"
+                       $this->getLang()->formatNum( $number )
                );
        }
 
-       public static function provideCommafyData() {
-               // Note that commafy() always uses English separators (',' and 
'.') instead of
-               // Polish (' ' and ','). There is another function that 
converts them later.
+       public static function provideFormatNum() {
                return [
                        [ 1000, '1000' ],
-                       [ 10000, '10,000' ],
-                       [ 1000.0001, '1000.0001' ],
-                       [ 10000.0001, '10,000.0001' ],
+                       [ 10000, '10 000' ],
+                       [ 1000.0001, '1000,0001' ],
+                       [ 10000.0001, '10 000' ],
+                       [ 1000.001, '1000,001' ],
+                       [ 10000.0001, '10 000' ],
                        [ -1000, '-1000' ],
-                       [ -10000, '-10,000' ],
-                       [ -1000.0001, '-1000.0001' ],
-                       [ -10000.0001, '-10,000.0001' ],
+                       [ -10000, '-10 000' ],
+                       [ -1000.001, '-1 000,001' ],
+                       [ -10000.001, '-10 000,001' ],
                ];
        }
 }
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js 
b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
index db51fb3..febb312 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
@@ -876,7 +876,7 @@
                {
                        lang: 'hi',
                        number: '123456789.123456789',
-                       result: '१२,३४,५६,७८९',
+                       result: '१२,३४,५६,७८९.१२३',
                        description: 'formatnum test for Hindi'
                },
                {

-- 
To view, visit https://gerrit.wikimedia.org/r/384006
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic721b9a91e78e4ef07040339d1006b7a90a910c0
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Santhosh <santhosh.thottin...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to