From 6292d54dff87e591864637e22386cb6058b79616 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Mon, 28 May 2018 01:39:58 +0100 Subject: [PATCH] resourceloader: Add coverage for non-js error case in makeModuleResponse Adds coverage for line 1170-1175. Change-Id: I2208264d3fca306b2740b243d7cdc209b224ebca --- .../resourceloader/ResourceLoaderTest.php | 51 +++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php index 95006aa923..2fea7f30cc 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -596,11 +596,11 @@ mw.example(); } } - protected function getFailFerryMock() { + protected function getFailFerryMock( $getter = 'getScript' ) { $mock = $this->getMockBuilder( ResourceLoaderTestModule::class ) - ->setMethods( [ 'getScript' ] ) + ->setMethods( [ $getter ] ) ->getMock(); - $mock->method( 'getScript' )->will( $this->throwException( + $mock->method( $getter )->will( $this->throwException( new Exception( 'Ferry not found' ) ) ); return $mock; @@ -614,6 +614,14 @@ mw.example(); return $mock; } + protected function getSimpleStyleModuleMock( $styles = '' ) { + $mock = $this->getMockBuilder( ResourceLoaderTestModule::class ) + ->setMethods( [ 'getStyles' ] ) + ->getMock(); + $mock->method( 'getStyles' )->willReturn( [ '' => $styles ] ); + return $mock; + } + /** * @covers ResourceLoader::getCombinedVersion */ @@ -770,6 +778,43 @@ mw.example(); ); } + /** + * Verify that exceptions in PHP for one module will not break others + * (stylesheet response). + * + * @covers ResourceLoader::makeModuleResponse + */ + public function testMakeModuleResponseErrorCSS() { + $modules = [ + 'foo' => self::getSimpleStyleModuleMock( '.foo{}' ), + 'ferry' => self::getFailFerryMock( 'getStyles' ), + 'bar' => self::getSimpleStyleModuleMock( '.bar{}' ), + ]; + $rl = new EmptyResourceLoader(); + $rl->register( $modules ); + $context = $this->getResourceLoaderContext( + [ + 'modules' => 'foo|ferry|bar', + 'only' => 'styles', + 'debug' => 'false', + ], + $rl + ); + + // Disable log from makeModuleResponse via outputErrorAndLog + $this->setLogger( 'exception', new Psr\Log\NullLogger() ); + + $response = $rl->makeModuleResponse( $context, $modules ); + $errors = $rl->getErrors(); + + $this->assertCount( 2, $errors ); + $this->assertRegExp( '/Ferry not found/', $errors[0] ); + $this->assertRegExp( '/Problem.+\n\s*"ferry":\s*"error"/m', $errors[1] ); + $this->assertEquals( + '.foo{}.bar{}', + $response + ); + } /** * Verify that when building the startup module response, * an exception from one module class will not break the entire -- 2.20.1