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
This commit is contained in:
jdlrobson 2018-04-23 17:11:27 -07:00 committed by Krinkle
parent 2224e31507
commit c3f200849b
2 changed files with 28 additions and 3 deletions

View file

@ -291,6 +291,10 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
public function isKnownEmpty( ResourceLoaderContext $context ) { public function isKnownEmpty( ResourceLoaderContext $context ) {
$revisions = $this->getTitleInfo( $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 // For user modules, don't needlessly load if there are no non-empty pages
if ( $this->getGroup() === 'user' ) { if ( $this->getGroup() === 'user' ) {
foreach ( $revisions as $revision ) { foreach ( $revisions as $revision ) {

View file

@ -105,9 +105,9 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
* @covers ResourceLoaderWikiModule::isKnownEmpty * @covers ResourceLoaderWikiModule::isKnownEmpty
* @dataProvider provideIsKnownEmpty * @dataProvider provideIsKnownEmpty
*/ */
public function testIsKnownEmpty( $titleInfo, $group, $expected ) { public function testIsKnownEmpty( $titleInfo, $group, $dependencies, $expected ) {
$module = $this->getMockBuilder( ResourceLoaderWikiModule::class ) $module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
->setMethods( [ 'getTitleInfo', 'getGroup' ] ) ->setMethods( [ 'getTitleInfo', 'getGroup', 'getDependencies' ] )
->getMock(); ->getMock();
$module->expects( $this->any() ) $module->expects( $this->any() )
->method( 'getTitleInfo' ) ->method( 'getTitleInfo' )
@ -115,6 +115,9 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
$module->expects( $this->any() ) $module->expects( $this->any() )
->method( 'getGroup' ) ->method( 'getGroup' )
->will( $this->returnValue( $group ) ); ->will( $this->returnValue( $group ) );
$module->expects( $this->any() )
->method( 'getDependencies' )
->will( $this->returnValue( $dependencies ) );
$context = $this->getMockBuilder( ResourceLoaderContext::class ) $context = $this->getMockBuilder( ResourceLoaderContext::class )
->disableOriginalConstructor() ->disableOriginalConstructor()
->getMock(); ->getMock();
@ -124,29 +127,47 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
public static function provideIsKnownEmpty() { public static function provideIsKnownEmpty() {
return [ return [
// No valid pages // No valid pages
[ [], 'test1', true ], [ [], 'test1', [], true ],
// 'site' module with a non-empty page // 'site' module with a non-empty page
[ [
[ 'MediaWiki:Common.js' => [ 'page_len' => 1234 ] ], [ 'MediaWiki:Common.js' => [ 'page_len' => 1234 ] ],
'site', '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, false,
], ],
// 'site' module with an empty page // 'site' module with an empty page
[ [
[ 'MediaWiki:Foo.js' => [ 'page_len' => 0 ] ], [ 'MediaWiki:Foo.js' => [ 'page_len' => 0 ] ],
'site', 'site',
[],
false, false,
], ],
// 'user' module with a non-empty page // 'user' module with a non-empty page
[ [
[ 'User:Example/common.js' => [ 'page_len' => 25 ] ], [ 'User:Example/common.js' => [ 'page_len' => 25 ] ],
'user', 'user',
[],
false, false,
], ],
// 'user' module with an empty page // 'user' module with an empty page
[ [
[ 'User:Example/foo.js' => [ 'page_len' => 0 ] ], [ 'User:Example/foo.js' => [ 'page_len' => 0 ] ],
'user', 'user',
[],
true, true,
], ],
]; ];