3 class ResourceLoaderModuleTest
extends ResourceLoaderTestCase
{
6 * @covers ResourceLoaderModule::getVersionHash
8 public function testGetVersionHash() {
9 $context = $this->getResourceLoaderContext();
12 'scripts' => [ 'foo.js', 'bar.js' ],
13 'dependencies' => [ 'jquery', 'mediawiki' ],
14 'messages' => [ 'hello', 'world' ],
17 $module = new ResourceLoaderFileModule( $baseParams );
18 $version = json_encode( $module->getVersionHash( $context ) );
21 $module = new ResourceLoaderFileModule( $baseParams );
24 json_encode( $module->getVersionHash( $context ) ),
25 'Instance is insignificant'
28 // Re-order dependencies
29 $module = new ResourceLoaderFileModule( [
30 'dependencies' => [ 'mediawiki', 'jquery' ],
34 json_encode( $module->getVersionHash( $context ) ),
35 'Order of dependencies is insignificant'
39 $module = new ResourceLoaderFileModule( [
40 'messages' => [ 'world', 'hello' ],
44 json_encode( $module->getVersionHash( $context ) ),
45 'Order of messages is insignificant'
49 $module = new ResourceLoaderFileModule( [
50 'scripts' => [ 'bar.js', 'foo.js' ],
52 $this->assertNotEquals(
54 json_encode( $module->getVersionHash( $context ) ),
55 'Order of scripts is significant'
59 $module = new ResourceLoaderFileModuleTestModule( $baseParams );
60 $this->assertNotEquals(
62 json_encode( $module->getVersionHash( $context ) ),
63 'Class is significant'
68 * @covers ResourceLoaderModule::validateScriptFile
70 public function testValidateScriptFile() {
71 $this->setMwGlobals( 'wgResourceLoaderValidateJS', true );
73 $context = $this->getResourceLoaderContext();
75 $module = new ResourceLoaderTestModule( [
76 'script' => "var a = 'this is';\n {\ninvalid"
80 '"JavaScript parse error: Parse error: Unexpected token; ' .
81 'token } expected in file \'input\' on line 3"' .
83 $module->getScript( $context ),
84 'Replace invalid syntax with error logging'
87 $module = new ResourceLoaderTestModule( [
88 'script' => "\n'valid';"
92 $module->getScript( $context ),
93 'Leave valid scripts as-is'
97 public static function provideBuildContentScripts() {
116 "mw.foo()\n// mw.bar();",
117 "mw.foo()\n// mw.bar();",
120 "mw.foo()// mw.bar();",
121 "mw.foo()// mw.bar();",
127 * @dataProvider provideBuildContentScripts
128 * @covers ResourceLoaderModule::buildContent
130 public function testBuildContentScripts( $raw, $build, $message = null ) {
131 $context = $this->getResourceLoaderContext();
132 $module = new ResourceLoaderTestModule( [
135 $this->assertEquals( $raw, $module->getScript( $context ), 'Raw script' );
137 [ 'scripts' => $build ],
138 $module->getModuleContent( $context ),
144 * @covers ResourceLoaderModule::getRelativePaths
145 * @covers ResourceLoaderModule::expandRelativePaths
147 public function testPlaceholderize() {
148 $getRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'getRelativePaths' );
149 $getRelativePaths->setAccessible( true );
150 $expandRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'expandRelativePaths' );
151 $expandRelativePaths->setAccessible( true );
153 $this->setMwGlobals( [
154 'IP' => '/srv/example/mediawiki/core',
157 '/srv/example/mediawiki/core/resources/foo.js',
158 '/srv/example/mediawiki/core/extensions/Example/modules/bar.js',
159 '/srv/example/mediawiki/skins/Example/baz.css',
160 '/srv/example/mediawiki/skins/Example/images/quux.png',
164 'extensions/Example/modules/bar.js',
165 '../skins/Example/baz.css',
166 '../skins/Example/images/quux.png',
170 $getRelativePaths->invoke( null, $raw ),
171 'Insert placeholders'
175 $expandRelativePaths->invoke( null, $canonical ),
176 'Substitute placeholders'