Always return a string from Language::formatNum()
authorSam Wilson <sam@samwilson.id.au>
Wed, 6 Dec 2017 22:55:08 +0000 (06:55 +0800)
committerSam Wilson <sam@samwilson.id.au>
Thu, 7 Dec 2017 05:59:56 +0000 (13:59 +0800)
It says it returns a string, and so it should.

Bug: T182277
Change-Id: Ic68c65c634c2557a1d07281623cd6c971b000323

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

index 81564ab..8d3984d 100644 (file)
@@ -3268,7 +3268,7 @@ class Language {
                        }
                }
 
-               return $number;
+               return (string)$number;
        }
 
        /**
index cd52366..e39f57e 100644 (file)
@@ -1629,6 +1629,33 @@ class LanguageTest extends LanguageClassesTestCase {
                ];
        }
 
+       /**
+        * @dataProvider testFormatNumProvider
+        * @covers Language::formatNum
+        */
+       public function testFormatNum(
+               $translateNumerals, $langCode, $number, $nocommafy, $expected
+       ) {
+               $this->setMwGlobals( [ 'wgTranslateNumerals' => $translateNumerals ] );
+               $lang = Language::factory( $langCode );
+               $formattedNum = $lang->formatNum( $number, $nocommafy );
+               $this->assertType( 'string', $formattedNum );
+               $this->assertEquals( $expected, $formattedNum );
+       }
+
+       public function testFormatNumProvider() {
+               return [
+                       [ true, 'en', 100, false, '100' ],
+                       [ true, 'en', 101, true, '101' ],
+                       [ false, 'en', 103, false, '103' ],
+                       [ false, 'en', 104, true, '104' ],
+                       [ true, 'en', '105', false, '105' ],
+                       [ true, 'en', '106', true, '106' ],
+                       [ false, 'en', '107', false, '107' ],
+                       [ false, 'en', '108', true, '108' ],
+               ];
+       }
+
        /**
         * @dataProvider parseFormattedNumberProvider
         */