1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
<?php
namespace MediaWiki\Tests\Unit\Settings\Config;
use MediaWiki\Settings\Config\MergeStrategy;
use MediaWiki\Settings\SettingsBuilderException;
use PHPUnit\Framework\TestCase;
/**
* @covers \MediaWiki\Settings\Config\MergeStrategy
*/
class MergeStrategyTest extends TestCase {
public function testUnknownStrategy() {
$this->expectException( SettingsBuilderException::class );
MergeStrategy::newFromName( 'unknown' )->merge( [], [] );
}
public static function provideMergeStrategies() {
yield 'array_merge_recursive' => [
'strategy' => MergeStrategy::ARRAY_MERGE_RECURSIVE,
'newArray' => [ 'a' => [ 'b' => [ 'd' ] ] ],
'baseArray' => [ 'a' => [ 'b' => [ 'c' ], 'e' => [ 'f' ] ] ],
'expected' => [ 'a' => [ 'b' => [ 'c', 'd' ], 'e' => [ 'f' ] ] ],
];
yield 'array_replace_recursive' => [
'strategy' => MergeStrategy::ARRAY_REPLACE_RECURSIVE,
'newArray' => [ 'a' => [ 'b' => [ 'c' ] ] ],
'baseArray' => [ 'a' => [ 'b' => [ 'd' ], 'e' => [ 'f' ] ] ],
'expected' => [ 'a' => [ 'b' => [ 'c' ], 'e' => [ 'f' ] ] ],
];
yield 'array_plus_2d' => [
'strategy' => MergeStrategy::ARRAY_PLUS_2D,
'newArray' => [ 'a' => [ 'b' => [ 'c' => [ 'e' => 'f' ] ] ] ],
'baseArray' => [ 'a' => [ 'b' => [ 'c' => [ 'g' => 'h' ] ], 'i' => 'j' ] ],
'expected' => [ 'a' => [ 'b' => [ 'c' => [ 'e' => 'f' ] ], 'i' => 'j' ] ],
];
yield 'array_plus' => [
'strategy' => MergeStrategy::ARRAY_PLUS,
'newArray' => [ 100 => 'Goo', 101 => 'Boo' ],
'baseArray' => [ 100 => 'Foo', 102 => 'Too' ],
'expected' => [ 100 => 'Goo', 101 => 'Boo', 102 => 'Too' ],
];
yield 'array_merge' => [
'strategy' => MergeStrategy::ARRAY_MERGE,
'newArray' => [ 'a' => [ 'b' => [ 'c' ] ] ],
'baseArray' => [ 'a' => [ 'b' => [ 'd' ] ], 'e' => [ 'f' ] ],
'expected' => [ 'a' => [ 'b' => [ 'c' ] ], 'e' => [ 'f' ] ],
];
yield 'replace' => [
'strategy' => MergeStrategy::REPLACE,
'newArray' => [ 'a' => [ 'b' => [ 'c' ] ] ],
'baseArray' => [ 'a' => [ 'b' => [ 'd' ] ], 'e' => [ 'f' ] ],
'expected' => [ 'a' => [ 'b' => [ 'c' ] ] ],
];
}
/**
* @dataProvider provideMergeStrategies
*/
public function testMergeStrategies( string $strategy, array $newArray, array $baseArray, array $expected ) {
$mergeStrategy = MergeStrategy::newFromName( $strategy );
$this->assertEquals( $expected, $mergeStrategy->merge( $baseArray, $newArray ) );
}
/**
* @dataProvider provideMergeStrategies
*/
public function testReverse( string $strategy, array $newArray, array $baseArray, array $expected ) {
$mergeStrategy = MergeStrategy::newFromName( $strategy )->reverse();
$this->assertEquals( $expected, $mergeStrategy->merge( $newArray, $baseArray ) );
}
public function testMergeStrategyReusesObjects() {
$this->assertSame(
MergeStrategy::newFromName( MergeStrategy::ARRAY_MERGE ),
MergeStrategy::newFromName( MergeStrategy::ARRAY_MERGE )
);
}
public function testReverseReusesObjects() {
$this->assertSame(
MergeStrategy::newFromName( MergeStrategy::ARRAY_MERGE )->reverse(),
MergeStrategy::newFromName( MergeStrategy::ARRAY_MERGE )->reverse()
);
}
public function testGetName() {
$this->assertSame(
MergeStrategy::ARRAY_MERGE,
MergeStrategy::newFromName( MergeStrategy::ARRAY_MERGE )->getName()
);
}
}
|