3 class ResourceLoaderStartUpModuleTest
extends ResourceLoaderTestCase
{
5 // Version hash for a blank file module.
6 // Result of ResourceLoader::makeHash(), ResourceLoaderTestModule
7 // and ResourceLoaderFileModule::getDefinitionSummary().
8 protected static $blankVersion = 'GqV9IPpY';
10 protected static function expandPlaceholders( $text ) {
11 return strtr( $text, array(
12 '{blankVer}' => self
::$blankVersion
16 public static function provideGetModuleRegistrations() {
19 'msg' => 'Empty registry',
22 mw.loader.addSource( {
23 "local": "/w/load.php"
25 mw.loader.register( [] );'
28 'msg' => 'Basic registry',
30 'test.blank' => new ResourceLoaderTestModule(),
33 mw.loader.addSource( {
34 "local": "/w/load.php"
44 'msg' => 'Group signature',
46 'test.blank' => new ResourceLoaderTestModule(),
47 'test.group.foo' => new ResourceLoaderTestModule( array( 'group' => 'x-foo' ) ),
48 'test.group.bar' => new ResourceLoaderTestModule( array( 'group' => 'x-bar' ) ),
51 mw.loader.addSource( {
52 "local": "/w/load.php"
74 'msg' => 'Different target (non-test should not be registered)',
76 'test.blank' => new ResourceLoaderTestModule(),
77 'test.target.foo' => new ResourceLoaderTestModule( array( 'targets' => array( 'x-foo' ) ) ),
80 mw.loader.addSource( {
81 "local": "/w/load.php"
91 'msg' => 'Foreign source',
94 'loadScript' => 'http://example.org/w/load.php',
95 'apiScript' => 'http://example.org/w/api.php',
99 'test.blank' => new ResourceLoaderTestModule( array( 'source' => 'example' ) ),
102 mw.loader.addSource( {
103 "local": "/w/load.php",
104 "example": "http://example.org/w/load.php"
106 mw.loader.register( [
117 'msg' => 'Conditional dependency function',
119 'test.x.core' => new ResourceLoaderTestModule(),
120 'test.x.polyfill' => new ResourceLoaderTestModule( array(
121 'skipFunction' => 'return true;'
123 'test.y.polyfill' => new ResourceLoaderTestModule( array(
131 'test.z.foo' => new ResourceLoaderTestModule( array(
132 'dependencies' => array(
140 mw.loader.addSource( {
141 "local": "/w/load.php"
143 mw.loader.register( [
162 "return !!( window.JSON \u0026\u0026 JSON.parse \u0026\u0026 JSON.stringify);"
176 // This may seem like an edge case, but a plain MediaWiki core install
177 // with a few extensions installed is likely far more complex than this
178 // even, not to mention an install like Wikipedia.
179 // TODO: Make this even more realistic.
180 'msg' => 'Advanced (everything combined)',
183 'loadScript' => 'http://example.org/w/load.php',
184 'apiScript' => 'http://example.org/w/api.php',
188 'test.blank' => new ResourceLoaderTestModule(),
189 'test.x.core' => new ResourceLoaderTestModule(),
190 'test.x.util' => new ResourceLoaderTestModule( array(
191 'dependencies' => array(
195 'test.x.foo' => new ResourceLoaderTestModule( array(
196 'dependencies' => array(
200 'test.x.bar' => new ResourceLoaderTestModule( array(
201 'dependencies' => array(
206 'test.x.quux' => new ResourceLoaderTestModule( array(
207 'dependencies' => array(
214 'test.group.foo.1' => new ResourceLoaderTestModule( array(
217 'test.group.foo.2' => new ResourceLoaderTestModule( array(
220 'test.group.bar.1' => new ResourceLoaderTestModule( array(
223 'test.group.bar.2' => new ResourceLoaderTestModule( array(
225 'source' => 'example',
227 'test.target.foo' => new ResourceLoaderTestModule( array(
228 'targets' => array( 'x-foo' ),
230 'test.target.bar' => new ResourceLoaderTestModule( array(
231 'source' => 'example',
232 'targets' => array( 'x-foo' ),
236 mw.loader.addSource( {
237 "local": "/w/load.php",
238 "example": "http://example.org/w/load.php"
240 mw.loader.register( [
310 * @dataProvider provideGetModuleRegistrations
311 * @covers ResourceLoaderStartUpModule::compileUnresolvedDependencies
312 * @covers ResourceLoaderStartUpModule::getModuleRegistrations
313 * @covers ResourceLoader::makeLoaderSourcesScript
314 * @covers ResourceLoader::makeLoaderRegisterScript
316 public function testGetModuleRegistrations( $case ) {
317 if ( isset( $case['sources'] ) ) {
318 $this->setMwGlobals( 'wgResourceLoaderSources', $case['sources'] );
321 $context = $this->getResourceLoaderContext();
322 $rl = $context->getResourceLoader();
323 $rl->register( $case['modules'] );
324 $module = new ResourceLoaderStartUpModule();
325 $out = ltrim( $case['out'], "\n" );
328 self
::expandPlaceholders( $out ),
329 $module->getModuleRegistrations( $context ),
334 public static function provideRegistrations() {
337 'test.blank' => new ResourceLoaderTestModule(),
338 'test.min' => new ResourceLoaderTestModule( array(
345 'dependencies' => array(
353 * @dataProvider provideRegistrations
355 public function testRegistrationsMinified( $modules ) {
356 $this->setMwGlobals( 'wgResourceLoaderDebug', false );
358 $context = $this->getResourceLoaderContext();
359 $rl = $context->getResourceLoader();
360 $rl->register( $modules );
361 $module = new ResourceLoaderStartUpModule();
362 $out = 'mw.loader.addSource({"local":"/w/load.php"});' . "\n"
363 . 'mw.loader.register(['
364 . '["test.blank","{blankVer}"],'
365 . '["test.min","{blankVer}",[0],null,null,'
366 . '"return!!(window.JSON\u0026\u0026JSON.parse\u0026\u0026JSON.stringify);"'
370 self
::expandPlaceholders( $out ),
371 $module->getModuleRegistrations( $context ),
377 * @dataProvider provideRegistrations
379 public function testRegistrationsUnminified( $modules ) {
380 $context = $this->getResourceLoaderContext();
381 $rl = $context->getResourceLoader();
382 $rl->register( $modules );
383 $module = new ResourceLoaderStartUpModule();
385 'mw.loader.addSource( {
386 "local": "/w/load.php"
388 mw.loader.register( [
401 "return !!( window.JSON \u0026\u0026 JSON.parse \u0026\u0026 JSON.stringify);"
406 self
::expandPlaceholders( $out ),
407 $module->getModuleRegistrations( $context ),