Merge "Enable configuration to supply options for Special:Search form"
[lhc/web/wiklou.git] / tests / phpunit / includes / parser / ParserFactoryTest.php
index f37bdfc..048256d 100644 (file)
@@ -22,9 +22,11 @@ class ParserFactoryTest extends MediaWikiTestCase {
        public function testAllArgumentsWerePassed() {
                $factoryConstructor = new ReflectionMethod( 'ParserFactory', '__construct' );
                $mocks = [];
-               foreach ( $factoryConstructor->getParameters() as $param ) {
+               foreach ( $factoryConstructor->getParameters() as $index => $param ) {
                        $type = (string)$param->getType();
-                       if ( $type === 'array' ) {
+                       if ( $index === 0 ) {
+                               $val = $this->createMock( 'MediaWiki\Config\ServiceOptions' );
+                       } elseif ( $type === 'array' ) {
                                $val = [ 'porcupines will tell me your secrets' . count( $mocks ) ];
                        } elseif ( class_exists( $type ) || interface_exists( $type ) ) {
                                $val = $this->createMock( $type );
@@ -52,4 +54,54 @@ class ParserFactoryTest extends MediaWikiTestCase {
                $this->assertCount( 0, $mocks, 'Not all arguments to the ParserFactory constructor were ' .
                        'found in Parser member variables' );
        }
+
+       public function provideConstructorArguments() {
+               // Create a mock Config object that will satisfy ServiceOptions::__construct
+               $mockConfig = $this->createMock( 'Config' );
+               $mockConfig->method( 'has' )->willReturn( true );
+               $mockConfig->method( 'get' )->willReturn( 'I like otters.' );
+
+               $mocks = [
+                       [ 'the plural of platypus...' ],
+                       $this->createMock( 'MagicWordFactory' ),
+                       $this->createMock( 'Language' ),
+                       '...is platypodes',
+                       $this->createMock( 'MediaWiki\Special\SpecialPageFactory' ),
+                       $mockConfig,
+                       $this->createMock( 'MediaWiki\Linker\LinkRendererFactory' ),
+               ];
+
+               yield 'args_without_namespace_info' => [
+                       $mocks,
+               ];
+               yield 'args_with_namespace_info' => [
+                       array_merge( $mocks, [ $this->createMock( 'NamespaceInfo' ) ] ),
+               ];
+       }
+
+       /**
+        * @dataProvider provideConstructorArguments
+        * @covers ParserFactory::__construct
+        */
+       public function testBackwardsCompatibleConstructorArguments( $args ) {
+               $this->hideDeprecated( 'ParserFactory::__construct with Config parameter' );
+               $factory = new ParserFactory( ...$args );
+               $parser = $factory->create();
+
+               // It is expected that these are not present on the parser.
+               unset( $args[5] );
+               unset( $args[0] );
+
+               foreach ( ( new ReflectionObject( $parser ) )->getProperties() as $prop ) {
+                       $prop->setAccessible( true );
+                       foreach ( $args as $idx => $mockTest ) {
+                               if ( $prop->getValue( $parser ) === $mockTest ) {
+                                       unset( $args[$idx] );
+                               }
+                       }
+               }
+
+               $this->assertCount( 0, $args, 'Not all arguments to the ParserFactory constructor were ' .
+                       'found in Parser member variables' );
+       }
 }