summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php')
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php230
1 files changed, 218 insertions, 12 deletions
diff --git a/www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php b/www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php
index 9a55d4d1..d3bb308b 100644
--- a/www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php
+++ b/www/wiki/extensions/Translate/tests/phpunit/utils/ArrayFlattenerTest.php
@@ -1,13 +1,13 @@
<?php
/**
- * Unit tests.
- *
* @author Niklas Laxström
* @file
- * @license GPL-2.0+
+ * @license GPL-2.0-or-later
*/
-class ArrayFlattenerTest extends MediaWikiTestCase {
+class ArrayFlattenerTest extends PHPUnit\Framework\TestCase {
+ use PHPUnit4And6Compat;
+
/**
* @dataProvider provideTestFlatten
*/
@@ -26,19 +26,225 @@ class ArrayFlattenerTest extends MediaWikiTestCase {
$this->assertEquals( $expected, $output );
}
+ /**
+ * @dataProvider provideTestCLDRPlurals
+ */
+ public function testFlattenCLDRPlurals( $sep, $input, $expected ) {
+ $flattener = new ArrayFlattener( $sep, true );
+ $output = $flattener->flatten( $input );
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider provideTestCLDRPlurals
+ */
+ public function testUnflattenCLDRPlurals( $sep, $expected, $input ) {
+ $flattener = new ArrayFlattener( $sep, true );
+ $output = $flattener->unflatten( $input );
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider provideTestMixedCLDRPlurals
+ */
+ public function testFlattenMixedCLDRPlurals( $input ) {
+ $flattener = new ArrayFlattener( '.', true );
+ $this->setExpectedException(
+ MWException::class,
+ 'Reserved plural keywords mixed with other keys'
+ );
+ $flattener->flatten( $input );
+ }
+
public static function provideTestFlatten() {
- $cases = array();
- $cases[] = array(
+ $cases = [];
+ $cases[] = [
'.',
- array( 'a' => 1 ),
- array( 'a' => 1 ),
- );
+ [ 'a' => 1 ],
+ [ 'a' => 1 ],
+ ];
- $cases[] = array(
+ $cases[] = [
'.',
- array( 'a' => array( 'b' => array( 'c' => 1, 'd' => 2 ) ) ),
- array( 'a.b.c' => 1, 'a.b.d' => 2 ),
+ [ 'a' => [ 'b' => [ 'c' => 1, 'd' => 2 ] ] ],
+ [ 'a.b.c' => 1, 'a.b.d' => 2 ],
+ ];
+
+ // By default, CLDR plural keywords should be treated like any other key
+ $cases[] = [
+ '/',
+ [ 'number' => [ 'one' => '1', 'other' => '999' ] ],
+ [ 'number/one' => '1', 'number/other' => '999' ]
+ ];
+
+ return $cases;
+ }
+
+ public static function provideTestCLDRPlurals() {
+ $cases = [];
+
+ // We include some non-plural data to ensure it is processed correctly
+ $cases[] = [
+ '/',
+ [
+ 'cat' => 'An amount of cats',
+ 'mice' => [
+ 'Frankie',
+ 'Benjy'
+ ],
+ 'dog or dogs' => [
+ 'one' => 'One dog',
+ 'two' => 'Two doggies',
+ 'other' => 'Some dogs'
+ ]
+ ],
+ [
+ 'cat' => 'An amount of cats',
+ 'mice/0' => 'Frankie',
+ 'mice/1' => 'Benjy',
+ 'dog or dogs' => '{{PLURAL|one=One dog|two=Two doggies|Some dogs}}'
+ ],
+ ];
+
+ $cases[] = [
+ '/',
+ [
+ 'dog or dogs' => [
+ 'zero' => 'No dogs',
+ 'one' => 'One dog',
+ 'two' => 'A couple doggies',
+ 'few' => 'A few dogs',
+ 'many' => '%1 dogs',
+ 'other' => 'Some dogs'
+ ]
+ ],
+ [
+ 'dog or dogs' => '{{PLURAL|zero=No dogs|one=One dog|two=A couple doggies|' .
+ 'few=A few dogs|many=%1 dogs|Some dogs}}'
+ ],
+ ];
+
+ $cases[] = [
+ '/',
+ [
+ 'math is hard' => [
+ 'one' => 'a=400',
+ 'other' => 'a=999'
+ ]
+ ],
+ [ 'math is hard' => '{{PLURAL|one=a=400|a=999}}' ],
+ ];
+
+ return $cases;
+ }
+
+ // Separate provider because the input throws an exception
+ public static function provideTestMixedCLDRPlurals() {
+ $cases = [];
+ $cases[] = [
+ [
+ 'dog or dogs' => [
+ 'one' => 'One dog',
+ 'two' => 'Two doggies',
+ 'other' => 'Some dogs',
+ 'Pluto' => 'A specific dog'
+ ]
+ ]
+ ];
+
+ $cases[] = [
+ [
+ 'dog or dogs' => [
+ 'Pluto' => 'A specific dog',
+ 'one' => 'One dog',
+ 'two' => 'Two doggies',
+ 'other' => 'Some dogs',
+ ]
+ ]
+ ];
+ return $cases;
+ }
+
+ /**
+ * @dataProvider provideMatchingValues
+ */
+ public function testCompareTrue( $input1, $input2 ) {
+ $flattener = new ArrayFlattener( '.', true );
+
+ $this->assertTrue(
+ $flattener->compareContent( $input1, $input2, $flattener )
);
+ }
+
+ /**
+ * @dataProvider provideNonMatchingValues
+ */
+ public function testCompareFalse( $input1, $input2 ) {
+ $flattener = new ArrayFlattener( '.', true );
+
+ $this->assertfalse(
+ $flattener->compareContent( $input1, $input2, $flattener )
+ );
+ }
+
+ public static function provideMatchingValues() {
+ $cases = [];
+
+ // We include some non-plural data to ensure it is processed correctly
+ $cases[] = [
+ 'a',
+ 'a'
+ ];
+
+ $cases[] = [
+ '{{PLURAL|one=cat|cats}}',
+ '{{PLURAL|one=cat|cats}}',
+ ];
+
+ $cases[] = [
+ 'Give me {{PLURAL|one=a cat|cats}}',
+ '{{PLURAL|one=Give me a cat|Give me cats}}',
+ ];
+
+ // Order should not matter
+ $cases[] = [
+ '{{PLURAL|one=Give me a cat|Give me cats}}',
+ 'Give me {{PLURAL|one=a cat|cats}}',
+ ];
+
+ // Multiple inlines
+ $cases[] = [
+ 'Test {{PLURAL|one=one|other}} and {{PLURAL|one=one|other}} and {{PLURAL|one=one|other}}!',
+ '{{PLURAL|one=Test one and one and one|Test other and other and other}}!',
+ ];
+
+ // Lots of keys
+ $cases[] = [
+ 'Is {{PLURAL|zero=zero|one=one|two=two|few=few|many=many|other}}',
+ '{{PLURAL|zero=Is zero|one=Is one|two=Is two|few=Is few|many=Is many|Is other}}',
+ ];
+
+ return $cases;
+ }
+
+ public static function provideNonMatchingValues() {
+ $cases = [];
+
+ $cases[] = [
+ 'a',
+ 'b'
+ ];
+
+ $cases[] = [
+ '{{PLURAL|one=cat|cats}}',
+ '{{PLURAL|one=dog|dogs}}',
+ ];
+
+ // Different set of keys
+ $cases[] = [
+ 'Is {{PLURAL|zero=zero|one=one|two=two|few=few|other}}',
+ '{{PLURAL|zero=Is zero|two=Is two|few=Is few|many=Is many|Is other}}',
+ ];
return $cases;
}