From 8628893d9930f866884dd906bdc71ef3cf23b68e Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Fri, 12 May 2017 23:20:02 +0100 Subject: [PATCH] resourceloader: Add tests for OutputPage::buildExemptModules Bug: T147667 Change-Id: I40245359925ef5dc4e01ada396503a758d6b95fe --- includes/OutputPage.php | 2 +- tests/phpunit/includes/OutputPageTest.php | 80 +++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 85610b9a5b..46d6f4416c 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -3028,7 +3028,7 @@ class OutputPage extends ContextSource { && $this->userCanPreview(); } - private function isUserCssPreview() { + protected function isUserCssPreview() { return $this->getConfig()->get( 'AllowUserCss' ) && $this->getTitle() && $this->getTitle()->isCssSubpage() diff --git a/tests/phpunit/includes/OutputPageTest.php b/tests/phpunit/includes/OutputPageTest.php index 97df585f8b..cedb6232d0 100644 --- a/tests/phpunit/includes/OutputPageTest.php +++ b/tests/phpunit/includes/OutputPageTest.php @@ -344,6 +344,86 @@ class OutputPageTest extends MediaWikiTestCase { $this->assertEquals( $expectedHtml, $actualHtml ); } + public static function provideBuildExemptModules() { + return [ + 'empty' => [ + 'exemptStyleModules' => [], + '', + ], + 'empty sets' => [ + 'exemptStyleModules' => [ 'site' => [], 'noscript' => [], 'private' => [], 'user' => [] ], + '', + ], + // @codingStandardsIgnoreStart Generic.Files.LineLength + 'default logged-out' => [ + 'exemptStyleModules' => [ 'site' => [ 'site.styles' ] ], + '' . "\n" . + '', + ], + 'default logged-in' => [ + 'exemptStyleModules' => [ 'site' => [ 'site.styles' ], 'user' => [ 'user.styles' ] ], + '' . "\n" . + '' . "\n" . + '', + ], + 'custom modules' => [ + 'exemptStyleModules' => [ + 'site' => [ 'site.styles', 'example.site.a', 'example.site.b' ], + 'user' => [ 'user.styles', 'example.user' ], + ], + '' . "\n" . + '' . "\n" . + '', + ], + // @codingStandardsIgnoreEnd Generic.Files.LineLength + ]; + } + + /** + * @dataProvider provideBuildExemptModules + * @covers OutputPage::buildExemptModules + */ + public function testBuildExemptModules( array $exemptStyleModules, $expect ) { + $this->setMwGlobals( [ + 'wgResourceLoaderDebug' => false, + 'wgLoadScript' => '/w/load.php', + // Stub wgCacheEpoch as it influences getVersionHash used for the + // urls in the expected HTML + 'wgCacheEpoch' => '20140101000000', + ] ); + + // Set up stubs + $ctx = new RequestContext(); + $ctx->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'fallback' ) ); + $ctx->setLanguage( 'en' ); + $outputPage = $this->getMockBuilder( 'OutputPage' ) + ->setConstructorArgs( [ $ctx ] ) + ->setMethods( [ 'isUserCssPreview', 'buildCssLinksArray' ] ) + ->getMock(); + $outputPage->expects( $this->any() ) + ->method( 'isUserCssPreview' ) + ->willReturn( false ); + $outputPage->expects( $this->any() ) + ->method( 'buildCssLinksArray' ) + ->willReturn( [] ); + $rl = $outputPage->getResourceLoader(); + $rl->setMessageBlobStore( new NullMessageBlobStore() ); + + // Register custom modules + $rl->register( [ + 'example.site.a' => new ResourceLoaderTestModule( [ 'group' => 'site' ] ), + 'example.site.b' => new ResourceLoaderTestModule( [ 'group' => 'site' ] ), + 'example.user' => new ResourceLoaderTestModule( [ 'group' => 'user' ] ), + ] ); + + $outputPage = TestingAccessWrapper::newFromObject( $outputPage ); + $outputPage->rlExemptStyleModules = $exemptStyleModules; + $this->assertEquals( + $expect, + strval( $outputPage->buildExemptModules() ) + ); + } + /** * @dataProvider provideVaryHeaders * @covers OutputPage::addVaryHeader -- 2.20.1