Krinkle has uploaded a new change for review. https://gerrit.wikimedia.org/r/310671
Change subject: resourceloader: Add T145673 regression test ...................................................................... resourceloader: Add T145673 regression test Bug: T145673 Change-Id: Ibe788157724d73c727b9e2127b6828db32ca9420 --- M includes/resourceloader/ResourceLoaderWikiModule.php M tests/phpunit/ResourceLoaderTestCase.php M tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php 3 files changed, 79 insertions(+), 6 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/71/310671/1 diff --git a/includes/resourceloader/ResourceLoaderWikiModule.php b/includes/resourceloader/ResourceLoaderWikiModule.php index 5580306..282c585 100644 --- a/includes/resourceloader/ResourceLoaderWikiModule.php +++ b/includes/resourceloader/ResourceLoaderWikiModule.php @@ -296,12 +296,12 @@ sort( $pageNames ); $key = implode( '|', $pageNames ); if ( !isset( $this->titleInfo[$key] ) ) { - $this->titleInfo[$key] = self::fetchTitleInfo( $dbr, $pageNames, __METHOD__ ); + $this->titleInfo[$key] = static::fetchTitleInfo( $dbr, $pageNames, __METHOD__ ); } return $this->titleInfo[$key]; } - private static function fetchTitleInfo( IDatabase $db, array $pages, $fname = __METHOD__ ) { + protected static function fetchTitleInfo( IDatabase $db, array $pages, $fname = __METHOD__ ) { $titleInfo = []; $batch = new LinkBatch; foreach ( $pages as $titleText ) { @@ -353,7 +353,7 @@ } } } - $allInfo = self::fetchTitleInfo( $db, array_keys( $allPages ), __METHOD__ ); + $allInfo = static::fetchTitleInfo( $db, array_keys( $allPages ), __METHOD__ ); foreach ( $wikiModules as $module ) { $pages = $module->getPages( $context ); $info = array_intersect_key( $allInfo, $pages ); diff --git a/tests/phpunit/ResourceLoaderTestCase.php b/tests/phpunit/ResourceLoaderTestCase.php index 18a49f6..f0eb12e 100644 --- a/tests/phpunit/ResourceLoaderTestCase.php +++ b/tests/phpunit/ResourceLoaderTestCase.php @@ -22,9 +22,7 @@ ->setConstructorArgs( [ $resourceLoader, $request ] ) ->setMethods( [ 'getDirection' ] ) ->getMock(); - $ctx->expects( $this->any() )->method( 'getDirection' )->will( - $this->returnValue( $dir ) - ); + $ctx->method( 'getDirection' )->willReturn( $dir ); return $ctx; } diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php index 404fd97..a167d92 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php @@ -138,4 +138,79 @@ ], ]; } + + /** + * @covers ResourceLoaderWikiModule::getTitleInfo + */ + public function testGetTitleInfo() { + $pages = [ + 'MediaWiki:Common.css' => [ 'type' => 'styles' ], + 'mediawiki: fallback.css' => [ 'type' => 'styles' ], + ]; + $titleInfo = [ + 'MediaWiki:Common.css' => [ 'page_len' => 1234 ], + 'MediaWiki:Fallback.css' => [ 'page_len' => 0 ], + ]; + $expected = $titleInfo; + + $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' ) + ->setMethods( [ 'getPages' ] ) + ->getMock(); + $module->method( 'getPages' )->willReturn( $pages ); + // Can't mock static methods + $module::$returnFetchTitleInfo = $titleInfo; + + $context = $this->getMockBuilder( 'ResourceLoaderContext' ) + ->disableOriginalConstructor() + ->getMock(); + + $module = TestingAccessWrapper::newFromObject( $module ); + $this->assertEquals( $expected, $module->getTitleInfo( $context ), 'Title info' ); + } + + /** + * @covers ResourceLoaderWikiModule::getTitleInfo + * @covers ResourceLoaderWikiModule::setTitleInfo + * @covers ResourceLoaderWikiModule::preloadTitleInfo + */ + public function testGetPreloadedTitleInfo() { + $pages = [ + 'MediaWiki:Common.css' => [ 'type' => 'styles' ], + // Regression against T145673. It's impossible to statically declare page names in + // a canonical way since the canonical prefix is localised. As such, the preload + // cache computed the right cache key, but failed to find the results when + // doing an intersect on the canonical result, producing an empty array. + 'mediawiki: fallback.css' => [ 'type' => 'styles' ], + ]; + $titleInfo = [ + 'MediaWiki:Common.css' => [ 'page_len' => 1234 ], + 'MediaWiki:Fallback.css' => [ 'page_len' => 0 ], + ]; + $expected = $titleInfo; + + $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' ) + ->setMethods( [ 'getPages' ] ) + ->getMock(); + $module->method( 'getPages' )->willReturn( $pages ); + // Can't mock static methods + $module::$returnFetchTitleInfo = $titleInfo; + + $rl = new EmptyResourceLoader(); + $rl->register( 'testmodule', $module ); + $context = new ResourceLoaderContext( $rl, new FauxRequest() ); + + ResourceLoaderWikiModule::preloadTitleInfo( $context, wfGetDB( DB_REPLICA ), [ 'testmodule' ] ); + + $module = TestingAccessWrapper::newFromObject( $module ); + $this->assertEquals( $expected, $module->getTitleInfo( $context ), 'Title info' ); + } +} + +class TestResourceLoaderWikiModule extends ResourceLoaderWikiModule { + static $returnFetchTitleInfo = null; + protected static function fetchTitleInfo( IDatabase $db, array $pages, $fname = null ) { + $ret = self::$returnFetchTitleInfo; + self::$returnFetchTitleInfo = null; + return $ret; + } } -- To view, visit https://gerrit.wikimedia.org/r/310671 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibe788157724d73c727b9e2127b6828db32ca9420 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Krinkle <krinklem...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits