Merge "TraditionalImageGallery factor getCaptionHtml into own function"
[lhc/web/wiklou.git] / tests / phpunit / includes / resourceloader / ResourceLoaderWikiModuleTest.php
index db4494e..7a47a63 100644 (file)
@@ -351,38 +351,82 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                $module = TestingAccessWrapper::newFromObject( $module );
                $this->assertEquals(
                        $expected,
-                       $module->getContent( $titleText )
+                       $module->getContent( $titleText, $context )
                );
        }
 
        /**
         * @covers ResourceLoaderWikiModule::getContent
+        * @covers ResourceLoaderWikiModule::getContentObj
+        * @covers ResourceLoaderWikiModule::shouldEmbedModule
+        */
+       public function testContentOverrides() {
+               $pages = [
+                       'MediaWiki:Common.css' => [ 'type' => 'style' ],
+               ];
+
+               $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class )
+                       ->setMethods( [ 'getPages' ] )
+                       ->getMock();
+               $module->method( 'getPages' )->willReturn( $pages );
+
+               $rl = new EmptyResourceLoader();
+               $rl->register( 'testmodule', $module );
+               $context = new DerivativeResourceLoaderContext(
+                       new ResourceLoaderContext( $rl, new FauxRequest() )
+               );
+               $context->setContentOverrideCallback( function ( Title $t ) {
+                       if ( $t->getPrefixedText() === 'MediaWiki:Common.css' ) {
+                               return new CssContent( '.override{}' );
+                       }
+                       return null;
+               } );
+
+               $this->assertTrue( $module->shouldEmbedModule( $context ) );
+               $this->assertEquals( [
+                       'all' => [
+                               "/*\nMediaWiki:Common.css\n*/\n.override{}"
+                       ]
+               ], $module->getStyles( $context ) );
+
+               $context->setContentOverrideCallback( function ( Title $t ) {
+                       if ( $t->getPrefixedText() === 'MediaWiki:Skin.css' ) {
+                               return new CssContent( '.override{}' );
+                       }
+                       return null;
+               } );
+               $this->assertFalse( $module->shouldEmbedModule( $context ) );
+       }
+
+       /**
+        * @covers ResourceLoaderWikiModule::getContent
+        * @covers ResourceLoaderWikiModule::getContentObj
         */
        public function testGetContentForRedirects() {
                // Set up context and module object
-               $context = $this->getResourceLoaderContext( [], new EmptyResourceLoader );
+               $context = new DerivativeResourceLoaderContext(
+                       $this->getResourceLoaderContext( [], new EmptyResourceLoader )
+               );
                $module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
-                       ->setMethods( [ 'getPages', 'getContentObj' ] )
+                       ->setMethods( [ 'getPages' ] )
                        ->getMock();
                $module->expects( $this->any() )
                        ->method( 'getPages' )
                        ->will( $this->returnValue( [
                                'MediaWiki:Redirect.js' => [ 'type' => 'script' ]
                        ] ) );
-               $module->expects( $this->any() )
-                       ->method( 'getContentObj' )
-                       ->will( $this->returnCallback( function ( Title $title ) {
-                               if ( $title->getPrefixedText() === 'MediaWiki:Redirect.js' ) {
-                                       $handler = new JavaScriptContentHandler();
-                                       return $handler->makeRedirectContent(
-                                               Title::makeTitle( NS_MEDIAWIKI, 'Target.js' )
-                                       );
-                               } elseif ( $title->getPrefixedText() === 'MediaWiki:Target.js' ) {
-                                       return new JavaScriptContent( 'target;' );
-                               } else {
-                                       return null;
-                               }
-                       } ) );
+               $context->setContentOverrideCallback( function ( Title $title ) {
+                       if ( $title->getPrefixedText() === 'MediaWiki:Redirect.js' ) {
+                               $handler = new JavaScriptContentHandler();
+                               return $handler->makeRedirectContent(
+                                       Title::makeTitle( NS_MEDIAWIKI, 'Target.js' )
+                               );
+                       } elseif ( $title->getPrefixedText() === 'MediaWiki:Target.js' ) {
+                               return new JavaScriptContent( 'target;' );
+                       } else {
+                               return null;
+                       }
+               } );
 
                // Mock away Title's db queries with LinkCache
                MediaWikiServices::getInstance()->getLinkCache()->addGoodLinkObj(