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
179 lines
3.5 KiB
PHP
179 lines
3.5 KiB
PHP
<?php
|
|
/**
|
|
* @author Amir E. Aharoni
|
|
* based on LanguageBe_tarask.php
|
|
* @copyright Copyright © 2012, Amir E. Aharoni
|
|
* @file
|
|
*/
|
|
|
|
class LanguageRuTest 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',
|
|
],
|
|
[
|
|
'Викитеке',
|
|
'Викитека',
|
|
'prepositional',
|
|
],
|
|
[
|
|
'Викисклада',
|
|
'Викисклад',
|
|
'genitive',
|
|
],
|
|
[
|
|
'Викискладе',
|
|
'Викисклад',
|
|
'prepositional',
|
|
],
|
|
[
|
|
'Викиданных',
|
|
'Викиданные',
|
|
'prepositional',
|
|
],
|
|
[
|
|
'русского',
|
|
'русский',
|
|
'languagegen',
|
|
],
|
|
[
|
|
'немецкого',
|
|
'немецкий',
|
|
'languagegen',
|
|
],
|
|
[
|
|
'иврита',
|
|
'иврит',
|
|
'languagegen',
|
|
],
|
|
[
|
|
'эсперанто',
|
|
'эсперанто',
|
|
'languagegen',
|
|
],
|
|
[
|
|
'русском',
|
|
'русский',
|
|
'languageprep',
|
|
],
|
|
[
|
|
'немецком',
|
|
'немецкий',
|
|
'languageprep',
|
|
],
|
|
[
|
|
'идише',
|
|
'идиш',
|
|
'languageprep',
|
|
],
|
|
[
|
|
'эсперанто',
|
|
'эсперанто',
|
|
'languageprep',
|
|
],
|
|
[
|
|
'по-русски',
|
|
'русский',
|
|
'languageadverb',
|
|
],
|
|
[
|
|
'по-немецки',
|
|
'немецкий',
|
|
'languageadverb',
|
|
],
|
|
[
|
|
'на иврите',
|
|
'иврит',
|
|
'languageadverb',
|
|
],
|
|
[
|
|
'на эсперанто',
|
|
'эсперанто',
|
|
'languageadverb',
|
|
],
|
|
[
|
|
'на языке гуарани',
|
|
'гуарани',
|
|
'languageadverb',
|
|
],
|
|
];
|
|
}
|
|
}
|