In some languages it's conventional not to insert a thousands separator in numbers that are four digits long (1000-9999). Rather than copy-paste the custom code to do this between 13 files, introduce another option and have the base Language class handle it. This also fixes an issue in several languages where this logic previously would not work for negative or fractional numbers. To implement this, a new option is added to MessagesXx.php files, `$minimumGroupingDigits = 2;`, with the meaning as defined in <http://unicode.org/reports/tr35/tr35-numbers.html>. It is a little roundabout, but it could allow us to migrate the number formatting (currently all custom code) to some generic library easily. Bug: T177846 Change-Id: Iedd8de5648cf2de1c94044918626de2f96365d48
104 lines
2.4 KiB
PHP
104 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* @author Amir E. Aharoni
|
|
* @copyright Copyright © 2012, Amir E. Aharoni
|
|
* @file
|
|
*/
|
|
|
|
/** Tests for MediaWiki languages/classes/LanguagePl.php */
|
|
class LanguagePlTest extends LanguageClassesTestCase {
|
|
/**
|
|
* @dataProvider providePlural
|
|
* @covers Language::convertPlural
|
|
*/
|
|
public function testPlural( $result, $value ) {
|
|
$forms = [ 'one', 'few', 'many' ];
|
|
$this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providePlural
|
|
* @covers Language::getPluralRuleType
|
|
*/
|
|
public function testGetPluralRuleType( $result, $value ) {
|
|
$this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
|
|
}
|
|
|
|
public static function providePlural() {
|
|
return [
|
|
[ 'many', 0 ],
|
|
[ 'one', 1 ],
|
|
[ 'few', 2 ],
|
|
[ 'few', 3 ],
|
|
[ 'few', 4 ],
|
|
[ 'many', 5 ],
|
|
[ 'many', 9 ],
|
|
[ 'many', 10 ],
|
|
[ 'many', 11 ],
|
|
[ 'many', 21 ],
|
|
[ 'few', 22 ],
|
|
[ 'few', 23 ],
|
|
[ 'few', 24 ],
|
|
[ 'many', 25 ],
|
|
[ 'many', 200 ],
|
|
[ 'many', 201 ],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providePluralTwoForms
|
|
* @covers Language::convertPlural
|
|
*/
|
|
public function testPluralTwoForms( $result, $value ) {
|
|
$forms = [ 'one', 'other' ];
|
|
$this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
|
|
}
|
|
|
|
public static function providePluralTwoForms() {
|
|
return [
|
|
[ 'other', 0 ],
|
|
[ 'one', 1 ],
|
|
[ 'other', 2 ],
|
|
[ 'other', 3 ],
|
|
[ 'other', 4 ],
|
|
[ 'other', 5 ],
|
|
[ 'other', 9 ],
|
|
[ 'other', 10 ],
|
|
[ 'other', 11 ],
|
|
[ 'other', 21 ],
|
|
[ 'other', 22 ],
|
|
[ 'other', 23 ],
|
|
[ 'other', 24 ],
|
|
[ 'other', 25 ],
|
|
[ 'other', 200 ],
|
|
[ 'other', 201 ],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @covers Language::commafy()
|
|
* @dataProvider provideCommafyData
|
|
*/
|
|
public function testCommafy( $number, $numbersWithCommas ) {
|
|
$this->assertEquals(
|
|
$numbersWithCommas,
|
|
$this->getLang()->commafy( $number ),
|
|
"commafy('$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.
|
|
return [
|
|
[ 1000, '1000' ],
|
|
[ 10000, '10,000' ],
|
|
[ 1000.0001, '1000.0001' ],
|
|
[ 10000.0001, '10,000.0001' ],
|
|
[ -1000, '-1000' ],
|
|
[ -10000, '-10,000' ],
|
|
[ -1000.0001, '-1000.0001' ],
|
|
[ -10000.0001, '-10,000.0001' ],
|
|
];
|
|
}
|
|
}
|