From c3f200849b99721ac665057438b7ab2fe691e5e8 Mon Sep 17 00:00:00 2001 From: jdlrobson Date: Mon, 23 Apr 2018 17:11:27 -0700 Subject: [PATCH] resourceloader: Consider having dependencies as non-empty in WikiModule::isKnownEmpty If a module itself is empty, it must consider any dependencies it has before bailing out as empty. Bug: T191596 Change-Id: I2b45b948a6f78060e53513d3b4b77f48d7bf4a6b --- .../ResourceLoaderWikiModule.php | 4 +++ .../ResourceLoaderWikiModuleTest.php | 27 ++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/includes/resourceloader/ResourceLoaderWikiModule.php b/includes/resourceloader/ResourceLoaderWikiModule.php index 0926b60650..e87d28abc2 100644 --- a/includes/resourceloader/ResourceLoaderWikiModule.php +++ b/includes/resourceloader/ResourceLoaderWikiModule.php @@ -291,6 +291,10 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { public function isKnownEmpty( ResourceLoaderContext $context ) { $revisions = $this->getTitleInfo( $context ); + // If a module has dependencies it cannot be empty. An empty array will be cast to false + if ( $this->getDependencies() ) { + return false; + } // For user modules, don't needlessly load if there are no non-empty pages if ( $this->getGroup() === 'user' ) { foreach ( $revisions as $revision ) { diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php index d4b9c16512..db4494e08b 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php @@ -105,9 +105,9 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { * @covers ResourceLoaderWikiModule::isKnownEmpty * @dataProvider provideIsKnownEmpty */ - public function testIsKnownEmpty( $titleInfo, $group, $expected ) { + public function testIsKnownEmpty( $titleInfo, $group, $dependencies, $expected ) { $module = $this->getMockBuilder( ResourceLoaderWikiModule::class ) - ->setMethods( [ 'getTitleInfo', 'getGroup' ] ) + ->setMethods( [ 'getTitleInfo', 'getGroup', 'getDependencies' ] ) ->getMock(); $module->expects( $this->any() ) ->method( 'getTitleInfo' ) @@ -115,6 +115,9 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { $module->expects( $this->any() ) ->method( 'getGroup' ) ->will( $this->returnValue( $group ) ); + $module->expects( $this->any() ) + ->method( 'getDependencies' ) + ->will( $this->returnValue( $dependencies ) ); $context = $this->getMockBuilder( ResourceLoaderContext::class ) ->disableOriginalConstructor() ->getMock(); @@ -124,29 +127,47 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase { public static function provideIsKnownEmpty() { return [ // No valid pages - [ [], 'test1', true ], + [ [], 'test1', [], true ], // 'site' module with a non-empty page [ [ 'MediaWiki:Common.js' => [ 'page_len' => 1234 ] ], 'site', + [], + false, + ], + // 'site' module without existing pages but dependencies + [ + [], + 'site', + [ 'mobile.css' ], + false, + ], + // 'site' module which is empty but has dependencies + [ + [ 'MediaWiki:Common.js' => [ 'page_len' => 0 ] ], + 'site', + [ 'mobile.css' ], false, ], // 'site' module with an empty page [ [ 'MediaWiki:Foo.js' => [ 'page_len' => 0 ] ], 'site', + [], false, ], // 'user' module with a non-empty page [ [ 'User:Example/common.js' => [ 'page_len' => 25 ] ], 'user', + [], false, ], // 'user' module with an empty page [ [ 'User:Example/foo.js' => [ 'page_len' => 0 ] ], 'user', + [], true, ], ]; -- 2.20.1