summaryrefslogtreecommitdiff
path: root/tests/phpunit/languages/LanguageHeTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/phpunit/languages/LanguageHeTest.php')
-rw-r--r--tests/phpunit/languages/LanguageHeTest.php119
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 */'תחילית',
),
);
}