X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fresourceloader%2FResourceLoaderTest.php;h=86c2e9f59b0699c4d610d648a1c39d7d454f5bb2;hp=544afae95cb37c155e3980be824c16cda3d336d9;hb=bd5a37aacf600bdd5f3a6e7998f92bd1d9326a8a;hpb=a7c7cfb33404f5bc314a17b95544d90017d8917d diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php index 544afae95c..86c2e9f59b 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -70,28 +70,19 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { $this->assertTrue( ResourceLoader::isValidModuleName( $name ) ); } - /** - * @covers ResourceLoader::register - * @covers ResourceLoader::getModule - */ - public function testRegisterValidObject() { - $module = new ResourceLoaderTestModule(); - $resourceLoader = new EmptyResourceLoader(); - $resourceLoader->register( 'test', $module ); - $this->assertEquals( $module, $resourceLoader->getModule( 'test' ) ); - } - /** * @covers ResourceLoader::register * @covers ResourceLoader::getModule */ public function testRegisterValidArray() { - $module = new ResourceLoaderTestModule(); $resourceLoader = new EmptyResourceLoader(); // Covers case of register() setting $rl->moduleInfos, // but $rl->modules lazy-populated by getModule() - $resourceLoader->register( 'test', [ 'object' => $module ] ); - $this->assertEquals( $module, $resourceLoader->getModule( 'test' ) ); + $resourceLoader->register( 'test', [ 'class' => ResourceLoaderTestModule::class ] ); + $this->assertInstanceOf( + ResourceLoaderTestModule::class, + $resourceLoader->getModule( 'test' ) + ); } /** @@ -99,10 +90,12 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { * @group medium */ public function testRegisterEmptyString() { - $module = new ResourceLoaderTestModule(); $resourceLoader = new EmptyResourceLoader(); - $resourceLoader->register( '', $module ); - $this->assertEquals( $module, $resourceLoader->getModule( '' ) ); + $resourceLoader->register( '', [ 'class' => ResourceLoaderTestModule::class ] ); + $this->assertInstanceOf( + ResourceLoaderTestModule::class, + $resourceLoader->getModule( '' ) + ); } /** @@ -112,7 +105,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { public function testRegisterInvalidName() { $resourceLoader = new EmptyResourceLoader(); $this->setExpectedException( MWException::class, "name 'test!invalid' is invalid" ); - $resourceLoader->register( 'test!invalid', new ResourceLoaderTestModule() ); + $resourceLoader->register( 'test!invalid', [] ); } /** @@ -120,7 +113,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { */ public function testRegisterInvalidType() { $resourceLoader = new EmptyResourceLoader(); - $this->setExpectedException( MWException::class, 'ResourceLoader module info type error' ); + $this->setExpectedException( InvalidArgumentException::class, 'Invalid module info' ); $resourceLoader->register( 'test', new stdClass() ); } @@ -133,11 +126,13 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { ->method( 'warning' ); $resourceLoader = new EmptyResourceLoader( null, $logger ); - $module1 = new ResourceLoaderTestModule(); - $module2 = new ResourceLoaderTestModule(); - $resourceLoader->register( 'test', $module1 ); - $resourceLoader->register( 'test', $module2 ); - $this->assertSame( $module2, $resourceLoader->getModule( 'test' ) ); + $resourceLoader->register( 'test', [ 'class' => ResourceLoaderSkinModule::class ] ); + $resourceLoader->register( 'test', [ 'class' => ResourceLoaderStartUpModule::class ] ); + $this->assertInstanceOf( + ResourceLoaderStartUpModule::class, + $resourceLoader->getModule( 'test' ), + 'last one wins' + ); } /** @@ -146,8 +141,8 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { public function testGetModuleNames() { // Use an empty one so that core and extension modules don't get in. $resourceLoader = new EmptyResourceLoader(); - $resourceLoader->register( 'test.foo', new ResourceLoaderTestModule() ); - $resourceLoader->register( 'test.bar', new ResourceLoaderTestModule() ); + $resourceLoader->register( 'test.foo', [] ); + $resourceLoader->register( 'test.bar', [] ); $this->assertEquals( [ 'startup', 'test.foo', 'test.bar' ], $resourceLoader->getModuleNames() @@ -155,15 +150,21 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { } public function provideTestIsFileModule() { - $fileModuleObj = $this->getMockBuilder( ResourceLoaderFileModule::class ) - ->disableOriginalConstructor() - ->getMock(); + $fileModuleObj = $this->createMock( ResourceLoaderFileModule::class ); return [ - 'object' => [ false, - new ResourceLoaderTestModule() + 'factory ignored' => [ false, + [ + 'factory' => function () { + return new ResourceLoaderTestModule(); + } + ] ], - 'FileModule object' => [ false, - $fileModuleObj + 'factory ignored (actual FileModule)' => [ false, + [ + 'factory' => function () use ( $fileModuleObj ) { + return $fileModuleObj; + } + ] ], 'simple empty' => [ true, [] @@ -214,7 +215,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { */ public function testIsModuleRegistered() { $rl = new EmptyResourceLoader(); - $rl->register( 'test', new ResourceLoaderTestModule() ); + $rl->register( 'test', [] ); $this->assertTrue( $rl->isModuleRegistered( 'test' ) ); $this->assertFalse( $rl->isModuleRegistered( 'test.unknown' ) ); } @@ -559,12 +560,12 @@ END */ public function testMakeLoaderRegisterScript() { $this->assertEquals( - 'mw.loader.register( [ + 'mw.loader.register([ [ "test.name", "1234567" ] -] );', +]);', ResourceLoader::makeLoaderRegisterScript( [ [ 'test.name', '1234567' ], ] ), @@ -572,7 +573,7 @@ END ); $this->assertEquals( - 'mw.loader.register( [ + 'mw.loader.register([ [ "test.foo", "100" @@ -600,7 +601,7 @@ END null, "return true;" ] -] );', +]);', ResourceLoader::makeLoaderRegisterScript( [ [ 'test.foo', '100' , [], null, null ], [ 'test.bar', '200', [ 'test.unknown' ], null ], @@ -616,29 +617,29 @@ END */ public function testMakeLoaderSourcesScript() { $this->assertEquals( - 'mw.loader.addSource( { + 'mw.loader.addSource({ "local": "/w/load.php" -} );', +});', ResourceLoader::makeLoaderSourcesScript( 'local', '/w/load.php' ) ); $this->assertEquals( - 'mw.loader.addSource( { + 'mw.loader.addSource({ "local": "/w/load.php" -} );', +});', ResourceLoader::makeLoaderSourcesScript( [ 'local' => '/w/load.php' ] ) ); $this->assertEquals( - 'mw.loader.addSource( { + 'mw.loader.addSource({ "local": "/w/load.php", "example": "https://example.org/w/load.php" -} );', +});', ResourceLoader::makeLoaderSourcesScript( [ 'local' => '/w/load.php', 'example' => 'https://example.org/w/load.php' ] ) ); $this->assertEquals( - 'mw.loader.addSource( [] );', + 'mw.loader.addSource([]);', ResourceLoader::makeLoaderSourcesScript( [] ) ); } @@ -709,9 +710,13 @@ END // Disable log from outputErrorAndLog ->setMethods( [ 'outputErrorAndLog' ] )->getMock(); $rl->register( [ - 'foo' => self::getSimpleModuleMock(), - 'ferry' => self::getFailFerryMock(), - 'bar' => self::getSimpleModuleMock(), + 'foo' => [ 'class' => ResourceLoaderTestModule::class ], + 'ferry' => [ + 'factory' => function () { + return self::getFailFerryMock(); + } + ], + 'bar' => [ 'class' => ResourceLoaderTestModule::class ], ] ); $context = $this->getResourceLoaderContext( [], $rl ); @@ -742,9 +747,9 @@ END 'modules' => [ 'foo' => 'foo()', ], - 'expected' => "foo()\n" . 'mw.loader.state( { + 'expected' => "foo()\n" . 'mw.loader.state({ "foo": "ready" -} );', +});', 'minified' => "foo()\n" . 'mw.loader.state({"foo":"ready"});', 'message' => 'Script without semi-colon', ], @@ -753,10 +758,10 @@ END 'foo' => 'foo()', 'bar' => 'bar()', ], - 'expected' => "foo()\nbar()\n" . 'mw.loader.state( { + 'expected' => "foo()\nbar()\n" . 'mw.loader.state({ "foo": "ready", "bar": "ready" -} );', +});', 'minified' => "foo()\nbar()\n" . 'mw.loader.state({"foo":"ready","bar":"ready"});', 'message' => 'Two scripts without semi-colon', ], @@ -764,9 +769,9 @@ END 'modules' => [ 'foo' => "foo()\n// bar();" ], - 'expected' => "foo()\n// bar();\n" . 'mw.loader.state( { + 'expected' => "foo()\n// bar();\n" . 'mw.loader.state({ "foo": "ready" -} );', +});', 'minified' => "foo()\n" . 'mw.loader.state({"foo":"ready"});', 'message' => 'Script with semi-colon in comment (T162719)', ], @@ -800,7 +805,6 @@ END $modules = array_map( function ( $script ) { return self::getSimpleModuleMock( $script ); }, $scripts ); - $rl->register( $modules ); $context = $this->getResourceLoaderContext( [ @@ -845,7 +849,6 @@ END 'bar' => self::getSimpleModuleMock( 'bar();' ), ]; $rl = new EmptyResourceLoader(); - $rl->register( $modules ); $context = $this->getResourceLoaderContext( [ 'modules' => 'foo|ferry|bar', @@ -863,11 +866,11 @@ END $this->assertCount( 1, $errors ); $this->assertRegExp( '/Ferry not found/', $errors[0] ); $this->assertEquals( - "foo();\nbar();\n" . 'mw.loader.state( { + "foo();\nbar();\n" . 'mw.loader.state({ "ferry": "error", "foo": "ready", "bar": "ready" -} );', +});', $response ); } @@ -885,7 +888,6 @@ END 'bar' => self::getSimpleStyleModuleMock( '.bar{}' ), ]; $rl = new EmptyResourceLoader(); - $rl->register( $modules ); $context = $this->getResourceLoaderContext( [ 'modules' => 'foo|ferry|bar', @@ -922,9 +924,15 @@ END // provide the full Config object here. $rl = new EmptyResourceLoader( MediaWikiServices::getInstance()->getMainConfig() ); $rl->register( [ - 'foo' => self::getSimpleModuleMock( 'foo();' ), - 'ferry' => self::getFailFerryMock(), - 'bar' => self::getSimpleModuleMock( 'bar();' ), + 'foo' => [ 'factory' => function () { + return self::getSimpleModuleMock( 'foo();' ); + } ], + 'ferry' => [ 'factory' => function () { + return self::getFailFerryMock(); + } ], + 'bar' => [ 'factory' => function () { + return self::getSimpleModuleMock( 'bar();' ); + } ], ] ); $context = $this->getResourceLoaderContext( [ @@ -981,15 +989,12 @@ END ] ); $rl = new EmptyResourceLoader(); - $rl->register( [ - 'foo' => $module, - ] ); $context = $this->getResourceLoaderContext( [ 'modules' => 'foo', 'only' => 'scripts' ], $rl ); - $modules = [ 'foo' => $rl->getModule( 'foo' ) ]; + $modules = [ 'foo' => $module ]; $response = $rl->makeModuleResponse( $context, $modules ); $extraHeaders = TestingAccessWrapper::newFromObject( $rl )->extraHeaders; @@ -1022,13 +1027,12 @@ END ] ); $rl = new EmptyResourceLoader(); - $rl->register( [ 'foo' => $foo, 'bar' => $bar ] ); $context = $this->getResourceLoaderContext( [ 'modules' => 'foo|bar', 'only' => 'scripts' ], $rl ); - $modules = [ 'foo' => $rl->getModule( 'foo' ), 'bar' => $rl->getModule( 'bar' ) ]; + $modules = [ 'foo' => $foo, 'bar' => $bar ]; $response = $rl->makeModuleResponse( $context, $modules ); $extraHeaders = TestingAccessWrapper::newFromObject( $rl )->extraHeaders; $this->assertEquals( @@ -1073,7 +1077,11 @@ END 'makeModuleResponse', ] ) ->getMock(); - $rl->register( 'test', $module ); + $rl->register( 'test', [ + 'factory' => function () use ( $module ) { + return $module; + } + ] ); $context = $this->getResourceLoaderContext( [ 'modules' => 'test', 'only' => null ], $rl @@ -1102,7 +1110,11 @@ END 'sendResponseHeaders', ] ) ->getMock(); - $rl->register( 'test', $module ); + $rl->register( 'test', [ + 'factory' => function () use ( $module ) { + return $module; + } + ] ); $context = $this->getResourceLoaderContext( [ 'modules' => 'test' ], $rl ); // Disable logging from outputErrorAndLog $this->setLogger( 'exception', new Psr\Log\NullLogger() );