Fix Language::parseFormattedNumber for lzh and zh-classical
authoraude <aude.wiki@gmail.com>
Thu, 24 Apr 2014 02:33:58 +0000 (04:33 +0200)
committeraude <aude.wiki@gmail.com>
Fri, 25 Apr 2014 06:52:54 +0000 (08:52 +0200)
When parsing, filter any array values that are empty string
before using strtr php function so that strtr can handle
the array.

Bug: 64347
Change-Id: I94761caa70d44febfa0999c91048a01044fc1fbe

languages/Language.php
tests/phpunit/languages/LanguageTest.php

index c635ebb..95bd31e 100644 (file)
@@ -3130,14 +3130,18 @@ class Language {
         * @param string $number
         * @return string
         */
-       function parseFormattedNumber( $number ) {
+       public function parseFormattedNumber( $number ) {
                $s = $this->digitTransformTable();
                if ( $s ) {
+                       // eliminate empty array values such as ''. (bug 64347)
+                       $s = array_filter( $s );
                        $number = strtr( $number, array_flip( $s ) );
                }
 
                $s = $this->separatorTransformTable();
                if ( $s ) {
+                       // eliminate empty array values such as ''. (bug 64347)
+                       $s = array_filter( $s );
                        $number = strtr( $number, array_flip( $s ) );
                }
 
index 13d84f7..ed89159 100644 (file)
@@ -1472,6 +1472,29 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
+       /**
+        * @dataProvider parseFormattedNumberProvider
+        */
+       public function testParseFormattedNumber( $langCode, $number ) {
+               $lang = Language::factory( $langCode );
+
+               $localisedNum = $lang->formatNum( $number );
+               $normalisedNum = $lang->parseFormattedNumber( $localisedNum );
+
+               $this->assertEquals( $number, $normalisedNum );
+       }
+
+       public function parseFormattedNumberProvider() {
+               return array(
+                       array( 'de', 377.01 ),
+                       array( 'fa', 334 ),
+                       array( 'fa', 382.772 ),
+                       array( 'ar', 1844 ),
+                       array( 'lzh', 3731 ),
+                       array( 'zh-classical', 7432 )
+               );
+       }
+
        /**
         * @covers Language::commafy()
         * @dataProvider provideCommafyData