summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'MLEB/Translate/tests/phpunit/unit/Utilities/GettextPluralTest.php')
-rw-r--r--MLEB/Translate/tests/phpunit/unit/Utilities/GettextPluralTest.php146
1 files changed, 146 insertions, 0 deletions
diff --git a/MLEB/Translate/tests/phpunit/unit/Utilities/GettextPluralTest.php b/MLEB/Translate/tests/phpunit/unit/Utilities/GettextPluralTest.php
new file mode 100644
index 00000000..b2e1db28
--- /dev/null
+++ b/MLEB/Translate/tests/phpunit/unit/Utilities/GettextPluralTest.php
@@ -0,0 +1,146 @@
+<?php
+/**
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extensions\Translate\Utilities\GettextPlural;
+
+/**
+ * @coversDefaultClass \MediaWiki\Extensions\Translate\Utilities\GettextPlural
+ */
+class GettextPluralTest extends MediaWikiUnitTestCase {
+ /**
+ * @covers ::getPluralRule
+ */
+ public function testGetPluralRule() {
+ $expected = 'nplurals=2; plural=(n != 1);';
+ $actual = GettextPlural::getPluralRule( 'en' );
+ $this->assertEquals( $expected, $actual, 'valid language code' );
+
+ $expected = '';
+ $actual = GettextPlural::getPluralRule( 'EN' );
+ $this->assertEquals( $expected, $actual, 'invalid language code' );
+ }
+
+ public static function provideGetPluralCount() {
+ yield [ 2, 'nplurals=2; plural=(n != 1);' ];
+ yield [ 1, 'nplurals=1; plural=0;' ];
+ yield [ 5, 'nplurals=5; plural=(n == 1) ? 0 : ( (n == 2) ? 1 : ( (n < 7) ? 2 :' .
+ ' ( (n < 11) ? 3 : 4 ) ) );' ];
+ yield [ 2222, 'nplurals=2222; plural=(n != 1);' ];
+ }
+
+ /**
+ * @dataProvider provideGetPluralCount
+ * @covers ::getPluralCount
+ */
+ public function testGetPluralCount( $expected, $input ) {
+ $actual = GettextPlural::getPluralCount( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideGetPluralCountThrows() {
+ yield [ 'nplurals=; plural=(n != 1);' ];
+ yield [ 'hello' ];
+ }
+
+ /**
+ * @dataProvider provideGetPluralCountThrows
+ * @covers ::getPluralCount
+ */
+ public function testGetPluralCountThrows( $input ) {
+ $this->expectException( InvalidArgumentException::class );
+ GettextPlural::getPluralCount( $input );
+ }
+
+ public static function provideHasPlural() {
+ yield [ true, 'foo {{PLURAL:GETTEXT|one|many}} bar' ];
+ yield [ true, '{{PLURAL:GETTEXT|one|many}} {{PLURAL:GETTEXT|yksi|monta}}' ];
+ yield [ false, 'Pupu syö kalkkunaa' ];
+ yield [ false, '{{plural:gettext|}}' ];
+ yield [ false, '{{PLURAL:GETTEXT}}' ];
+ yield [ false, '{{PLURAL:GETEXT|aa|bee' ];
+ }
+
+ /**
+ * @dataProvider provideHasPlural
+ * @covers ::hasPlural
+ */
+ public function testHasPlural( $expected, $input ) {
+ $actual = GettextPlural::hasPlural( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideFlatten() {
+ yield [
+ '{{PLURAL:GETTEXT|}}',
+ []
+ ];
+
+ yield [
+ '{{PLURAL:GETTEXT|a|b}}',
+ [ 'a', 'b' ]
+ ];
+ }
+
+ /**
+ * @dataProvider provideFlatten
+ * @covers ::flatten
+ */
+ public function testFlatten( $expected, $input ) {
+ $actual = GettextPlural::flatten( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideUnflatten() {
+ yield [
+ [ 'Hei' ],
+ 'Hei',
+ 1
+ ];
+
+ yield [
+ [ 'a', 'b' ],
+ '{{PLURAL:GETTEXT|a|b}}',
+ 2,
+ ];
+
+ yield [
+ [ 'a', 'b' ],
+ '{{PLURAL:GETTEXT|a|b|c|d|e}}',
+ 2,
+ ];
+
+ yield [
+ [ 'pre a middle a post', 'pre b middle b post' ],
+ 'pre {{PLURAL:GETTEXT|a|b}} middle {{PLURAL:GETTEXT|a|b}} post',
+ 2,
+ ];
+
+ yield [
+ [ 'pre a|/|daa', 'pre b|/|dau' ],
+ 'pre {{PLURAL:GETTEXT|a|/|daa|b|/|dau}}',
+ 2,
+ ];
+
+ yield [
+ [ '{1} item waiting at {0}', '{1} items waiting at {0}' ],
+ '{{PLURAL:GETTEXT|{1} item waiting at {0}|{1} items waiting at {0}}}',
+ 2,
+ ];
+ }
+
+ /**
+ * @dataProvider provideUnflatten
+ * @covers ::unflatten
+ * @covers ::parsePluralForms
+ * @covers ::expandTemplate
+ * @covers ::armour
+ * @covers ::unarmour
+ */
+ public function testUnflatten( $expected, $inputText, $inputFormCount ) {
+ $actual = GettextPlural::unflatten( $inputText, $inputFormCount );
+ $this->assertEquals( $expected, $actual );
+ }
+}