diff options
Diffstat (limited to 'tests/phpunit/languages/LanguageHeTest.php')
-rw-r--r-- | tests/phpunit/languages/LanguageHeTest.php | 119 |
1 files changed, 87 insertions, 32 deletions
diff --git a/tests/phpunit/languages/LanguageHeTest.php b/tests/phpunit/languages/LanguageHeTest.php index 6de88e59..8edc6ddf 100644 --- a/tests/phpunit/languages/LanguageHeTest.php +++ b/tests/phpunit/languages/LanguageHeTest.php @@ -7,70 +7,125 @@ /** Tests for MediaWiki languages/classes/LanguageHe.php */ class LanguageHeTest extends LanguageClassesTestCase { + /** + * The most common usage for the plural forms is two forms, + * for singular and plural. In this case, the second form + * is technically dual, but in practice it's used as plural. + * In some cases, usually with expressions of time, three forms + * are needed - singular, dual and plural. + * CLDR also specifies a fourth form for multiples of 10, + * which is very rare. It also has a mistake, because + * the number 10 itself is supposed to be just plural, + * so currently it's overridden in MediaWiki. + */ - /** @dataProvider providerPluralDual */ - function testPluralDual( $result, $value ) { + // @todo the below test*PluralForms test methods can be refactored + // to use a single test method and data provider.. + + /** + * @dataProvider provideTwoPluralForms + * @covers Language::convertPlural + */ + public function testTwoPluralForms( $result, $value ) { + $forms = array( 'one', 'other' ); + $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); + } + + /** + * @dataProvider provideThreePluralForms + * @covers Language::convertPlural + */ + public function testThreePluralForms( $result, $value ) { $forms = array( 'one', 'two', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } - function providerPluralDual() { + /** + * @dataProvider provideFourPluralForms + * @covers Language::convertPlural + */ + public function testFourPluralForms( $result, $value ) { + $forms = array( 'one', 'two', 'many', 'other' ); + $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); + } + + /** + * @dataProvider provideFourPluralForms + * @covers Language::convertPlural + */ + public function testGetPluralRuleType( $result, $value ) { + $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) ); + } + + public static function provideTwoPluralForms() { return array( - array( 'other', 0 ), // Zero -> plural + array( 'other', 0 ), // Zero - plural array( 'one', 1 ), // Singular - array( 'two', 2 ), // Dual - array( 'other', 3 ), // Plural + array( 'other', 2 ), // No third form provided, use it as plural + array( 'other', 3 ), // Plural - other + array( 'other', 10 ), // No fourth form provided, use it as plural + array( 'other', 20 ), // No fourth form provided, use it as plural ); } - /** @dataProvider providerPlural */ - function testPlural( $result, $value ) { - $forms = array( 'one', 'other' ); - $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); + public static function provideThreePluralForms() { + return array( + array( 'other', 0 ), // Zero - plural + array( 'one', 1 ), // Singular + array( 'two', 2 ), // Dual + array( 'other', 3 ), // Plural - other + array( 'other', 10 ), // No fourth form provided, use it as plural + array( 'other', 20 ), // No fourth form provided, use it as plural + ); } - function providerPlural() { + public static function provideFourPluralForms() { return array( - array( 'other', 0 ), // Zero -> plural + array( 'other', 0 ), // Zero - plural array( 'one', 1 ), // Singular - array( 'other', 2 ), // Plural, no dual provided - array( 'other', 3 ), // Plural + array( 'two', 2 ), // Dual + array( 'other', 3 ), // Plural - other + array( 'other', 10 ), // 10 is supposed to be plural (other), not "many" + array( 'many', 20 ), // Fourth form provided - rare, but supported by CLDR ); } - /** @dataProvider providerGrammar */ - function testGrammar( $result, $word, $case ) { + /** + * @dataProvider provideGrammar + * @covers Language::convertGrammar + */ + public function testGrammar( $result, $word, $case ) { $this->assertEquals( $result, $this->getLang()->convertGrammar( $word, $case ) ); } // The comments in the beginning of the line help avoid RTL problems // with text editors. - function providerGrammar() { + public static function provideGrammar() { return array( array( - /* result */ 'וויקיפדיה', - /* word */ 'ויקיפדיה', - /* case */ 'תחילית', + /* result */'וויקיפדיה', + /* word */'ויקיפדיה', + /* case */'תחילית', ), array( - /* result */ 'וולפגנג', - /* word */ 'וולפגנג', - /* case */ 'prefixed', + /* result */'וולפגנג', + /* word */'וולפגנג', + /* case */'prefixed', ), array( - /* result */ 'קובץ', - /* word */ 'הקובץ', - /* case */ 'תחילית', + /* result */'קובץ', + /* word */'הקובץ', + /* case */'תחילית', ), array( - /* result */ '־Wikipedia', - /* word */ 'Wikipedia', - /* case */ 'תחילית', + /* result */'־Wikipedia', + /* word */'Wikipedia', + /* case */'תחילית', ), array( - /* result */ '־1995', - /* word */ '1995', - /* case */ 'תחילית', + /* result */'־1995', + /* word */'1995', + /* case */'תחילית', ), ); } |