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
109 lines
2.4 KiB
PHP
109 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* @author Amir E. Aharoni
|
|
* based on LanguageBe_tarask.php
|
|
* @copyright Copyright © 2012, Amir E. Aharoni
|
|
* @file
|
|
*/
|
|
|
|
class LanguageUkTest extends LanguageClassesTestCase {
|
|
/**
|
|
* @dataProvider providePlural
|
|
* @covers Language::convertPlural
|
|
*/
|
|
public function testPlural( $result, $value ) {
|
|
$forms = [ 'one', 'few', 'many', 'other' ];
|
|
$this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
|
|
}
|
|
|
|
/**
|
|
* Test explicit plural forms - n=FormN forms
|
|
* @covers Language::convertPlural
|
|
*/
|
|
public function testExplicitPlural() {
|
|
$forms = [ 'one', 'few', 'many', 'other', '12=dozen' ];
|
|
$this->assertEquals( 'dozen', $this->getLang()->convertPlural( 12, $forms ) );
|
|
$forms = [ 'one', 'few', 'many', '100=hundred', 'other', '12=dozen' ];
|
|
$this->assertEquals( 'hundred', $this->getLang()->convertPlural( 100, $forms ) );
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providePlural
|
|
* @covers Language::getPluralRuleType
|
|
*/
|
|
public function testGetPluralRuleType( $result, $value ) {
|
|
$this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) );
|
|
}
|
|
|
|
public static function providePlural() {
|
|
return [
|
|
[ 'one', 1 ],
|
|
[ 'many', 11 ],
|
|
[ 'one', 91 ],
|
|
[ 'one', 121 ],
|
|
[ 'few', 2 ],
|
|
[ 'few', 3 ],
|
|
[ 'few', 4 ],
|
|
[ 'few', 334 ],
|
|
[ 'many', 5 ],
|
|
[ 'many', 15 ],
|
|
[ 'many', 120 ],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providePluralTwoForms
|
|
* @covers Language::convertPlural
|
|
*/
|
|
public function testPluralTwoForms( $result, $value ) {
|
|
$forms = [ '1=one', 'other' ];
|
|
$this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
|
|
}
|
|
|
|
public static function providePluralTwoForms() {
|
|
return [
|
|
[ 'one', 1 ],
|
|
[ 'other', 11 ],
|
|
[ 'other', 91 ],
|
|
[ 'other', 121 ],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerGrammar
|
|
* @covers Language::convertGrammar
|
|
*/
|
|
public function testGrammar( $result, $word, $case ) {
|
|
$this->assertEquals( $result, $this->getLang()->convertGrammar( $word, $case ) );
|
|
}
|
|
|
|
public static function providerGrammar() {
|
|
return [
|
|
[
|
|
'Вікіпедії',
|
|
'Вікіпедія',
|
|
'genitive',
|
|
],
|
|
[
|
|
'Віківидів',
|
|
'Віківиди',
|
|
'genitive',
|
|
],
|
|
[
|
|
'Вікіцитат',
|
|
'Вікіцитати',
|
|
'genitive',
|
|
],
|
|
[
|
|
'Вікіпідручника',
|
|
'Вікіпідручник',
|
|
'genitive',
|
|
],
|
|
[
|
|
'Вікіпедію',
|
|
'Вікіпедія',
|
|
'accusative',
|
|
],
|
|
];
|
|
}
|
|
}
|