Add testRomanNumerals
authorReedy <reedy@wikimedia.org>
Tue, 17 Jul 2012 22:56:51 +0000 (23:56 +0100)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 23 Jul 2012 12:15:19 +0000 (12:15 +0000)
Up Language::romanNumeral() to work upto 10,000

Does anyone know how do do letters with an underscore ontop of them? ;)

Change-Id: Ib1b1415126af855ce5fb55f81b71534c26d84cc9

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

index 430209d..8389281 100644 (file)
@@ -1272,7 +1272,7 @@ class Language {
                                        $s .= $num;
                                        $raw = false;
                                } elseif ( $roman ) {
-                                       $s .= self::romanNumeral( $num );
+                                       $s .= Language::romanNumeral( $num );
                                        $roman = false;
                                } elseif ( $hebrewNum ) {
                                        $s .= self::hebrewNumeral( $num );
@@ -1661,7 +1661,7 @@ class Language {
        }
 
        /**
-        * Roman number formatting up to 3000
+        * Roman number formatting up to 10000
         *
         * @param $num int
         *
@@ -1672,11 +1672,11 @@ class Language {
                        array( '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X' ),
                        array( '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', 'C' ),
                        array( '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', 'M' ),
-                       array( '', 'M', 'MM', 'MMM' )
+                       array( '', 'M', 'MM', 'MMM', 'MMMM', 'MMMMM', 'MMMMMM', 'MMMMMMM', 'MMMMMMMM', 'MMMMMMMMM', 'MMMMMMMMMM' )
                );
 
                $num = intval( $num );
-               if ( $num > 3000 || $num <= 0 ) {
+               if ( $num > 10000 || $num <= 0 ) {
                        return $num;
                }
 
index bef7677..7025449 100644 (file)
@@ -1007,4 +1007,63 @@ class LanguageTest extends MediaWikiTestCase {
                        )
                );
        }
+
+       /**
+        * @dataProvider provideRomanNumeralsData
+        */
+       function testRomanNumerals( $num, $numerals ) {
+               $this->assertEquals(
+                       $numerals,
+                       Language::romanNumeral( $num ),
+                       "romanNumeral('$num')"
+               );
+       }
+
+       function provideRomanNumeralsData() {
+               return array(
+                       array( 1, 'I' ),
+                       array( 2, 'II' ),
+                       array( 3, 'III' ),
+                       array( 4, 'IV' ),
+                       array( 5, 'V' ),
+                       array( 6, 'VI' ),
+                       array( 7, 'VII' ),
+                       array( 8, 'VIII' ),
+                       array( 9, 'IX' ),
+                       array( 10, 'X' ),
+                       array( 20, 'XX' ),
+                       array( 30, 'XXX' ),
+                       array( 40, 'XL' ),
+                       array( 49, 'XLIX' ),
+                       array( 50, 'L' ),
+                       array( 60, 'LX' ),
+                       array( 70, 'LXX' ),
+                       array( 80, 'LXXX' ),
+                       array( 90, 'XC' ),
+                       array( 99, 'XCIX' ),
+                       array( 100, 'C' ),
+                       array( 200, 'CC' ),
+                       array( 300, 'CCC' ),
+                       array( 400, 'CD' ),
+                       array( 500, 'D' ),
+                       array( 600, 'DC' ),
+                       array( 700, 'DCC' ),
+                       array( 800, 'DCCC' ),
+                       array( 900, 'CM' ),
+                       array( 999, 'CMXCIX' ),
+                       array( 1000, 'M' ),
+                       array( 1989, 'MCMLXXXIX' ),
+                       array( 2000, 'MM' ),
+                       array( 3000, 'MMM' ),
+                       array( 4000, 'MMMM' ),
+                       array( 5000, 'MMMMM' ),
+                       array( 6000, 'MMMMMM' ),
+                       array( 7000, 'MMMMMMM' ),
+                       array( 8000, 'MMMMMMMM' ),
+                       array( 9000, 'MMMMMMMMM' ),
+                       array( 9999, 'MMMMMMMMMCMXCIX'),
+                       array( 10000, 'MMMMMMMMMM' ),
+               );
+       }
 }
+