]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - tests/phpunit/languages/classes/LanguageHeTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / tests / phpunit / languages / classes / LanguageHeTest.php
diff --git a/tests/phpunit/languages/classes/LanguageHeTest.php b/tests/phpunit/languages/classes/LanguageHeTest.php
new file mode 100644 (file)
index 0000000..c1b774a
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+/**
+ * @author Amir E. Aharoni
+ * @copyright Copyright © 2012, Amir E. Aharoni
+ * @file
+ */
+
+/** Tests for MediaWiki Hebrew grammar transformation handling */
+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.
+        */
+
+       // @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 = [ 'one', 'other' ];
+               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       }
+
+       /**
+        * @dataProvider provideThreePluralForms
+        * @covers Language::convertPlural
+        */
+       public function testThreePluralForms( $result, $value ) {
+               $forms = [ 'one', 'two', 'other' ];
+               $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
+       }
+
+       /**
+        * @dataProvider provideFourPluralForms
+        * @covers Language::convertPlural
+        */
+       public function testFourPluralForms( $result, $value ) {
+               $forms = [ '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 [
+                       [ 'other', 0 ], // Zero - plural
+                       [ 'one', 1 ], // Singular
+                       [ 'other', 2 ], // No third form provided, use it as plural
+                       [ 'other', 3 ], // Plural - other
+                       [ 'other', 10 ], // No fourth form provided, use it as plural
+                       [ 'other', 20 ], // No fourth form provided, use it as plural
+               ];
+       }
+
+       public static function provideThreePluralForms() {
+               return [
+                       [ 'other', 0 ], // Zero - plural
+                       [ 'one', 1 ], // Singular
+                       [ 'two', 2 ], // Dual
+                       [ 'other', 3 ], // Plural - other
+                       [ 'other', 10 ], // No fourth form provided, use it as plural
+                       [ 'other', 20 ], // No fourth form provided, use it as plural
+               ];
+       }
+
+       public static function provideFourPluralForms() {
+               return [
+                       [ 'other', 0 ], // Zero - plural
+                       [ 'one', 1 ], // Singular
+                       [ 'two', 2 ], // Dual
+                       [ 'other', 3 ], // Plural - other
+                       [ 'other', 10 ], // 10 is supposed to be plural (other), not "many"
+                       [ 'many', 20 ], // Fourth form provided - rare, but supported by CLDR
+               ];
+       }
+
+       /**
+        * @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.
+       public static function provideGrammar() {
+               return [
+                       [
+                               /* result */'וויקיפדיה',
+                               /* word   */'ויקיפדיה',
+                               /* case   */'תחילית',
+                       ],
+                       [
+                               /* result */'וולפגנג',
+                               /* word   */'וולפגנג',
+                               /* case   */'prefixed',
+                       ],
+                       [
+                               /* result */'קובץ',
+                               /* word   */'הקובץ',
+                               /* case   */'תחילית',
+                       ],
+                       [
+                               /* result */'־Wikipedia',
+                               /* word   */'Wikipedia',
+                               /* case   */'תחילית',
+                       ],
+                       [
+                               /* result */'־1995',
+                               /* word   */'1995',
+                               /* case   */'תחילית',
+                       ],
+               ];
+       }
+}