$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' )
+ );
}
/**
* @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( '' )
+ );
}
/**
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', [] );
}
/**
*/
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() );
}
->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'
+ );
}
/**
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()
}
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,
[]
*/
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' ) );
}
*/
public function testMakeLoaderRegisterScript() {
$this->assertEquals(
- 'mw.loader.register( [
+ 'mw.loader.register([
[
"test.name",
"1234567"
]
-] );',
+]);',
ResourceLoader::makeLoaderRegisterScript( [
[ 'test.name', '1234567' ],
] ),
);
$this->assertEquals(
- 'mw.loader.register( [
+ 'mw.loader.register([
[
"test.foo",
"100"
null,
"return true;"
]
-] );',
+]);',
ResourceLoader::makeLoaderRegisterScript( [
[ 'test.foo', '100' , [], null, null ],
[ 'test.bar', '200', [ 'test.unknown' ], null ],
*/
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( [] )
);
}
// 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 );
'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',
],
'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',
],
'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)',
],
$modules = array_map( function ( $script ) {
return self::getSimpleModuleMock( $script );
}, $scripts );
- $rl->register( $modules );
$context = $this->getResourceLoaderContext(
[
'bar' => self::getSimpleModuleMock( 'bar();' ),
];
$rl = new EmptyResourceLoader();
- $rl->register( $modules );
$context = $this->getResourceLoaderContext(
[
'modules' => 'foo|ferry|bar',
$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
);
}
'bar' => self::getSimpleStyleModuleMock( '.bar{}' ),
];
$rl = new EmptyResourceLoader();
- $rl->register( $modules );
$context = $this->getResourceLoaderContext(
[
'modules' => 'foo|ferry|bar',
// 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(
[
] );
$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;
] );
$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(
'makeModuleResponse',
] )
->getMock();
- $rl->register( 'test', $module );
+ $rl->register( 'test', [
+ 'factory' => function () use ( $module ) {
+ return $module;
+ }
+ ] );
$context = $this->getResourceLoaderContext(
[ 'modules' => 'test', 'only' => null ],
$rl
'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() );