class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
/**
- * @covers ResourceLoaderModule::getDefinitionSummary
- * @covers ResourceLoaderFileModule::getDefinitionSummary
+ * @covers ResourceLoaderModule::getVersionHash
*/
- public function testDefinitionSummary() {
+ public function testGetVersionHash() {
$context = $this->getResourceLoaderContext();
- $baseParams = array(
- 'scripts' => array( 'foo.js', 'bar.js' ),
- 'dependencies' => array( 'jquery', 'mediawiki' ),
- 'messages' => array( 'hello', 'world' ),
- );
+ $baseParams = [
+ 'scripts' => [ 'foo.js', 'bar.js' ],
+ 'dependencies' => [ 'jquery', 'mediawiki' ],
+ 'messages' => [ 'hello', 'world' ],
+ ];
$module = new ResourceLoaderFileModule( $baseParams );
-
- $jsonSummary = json_encode( $module->getDefinitionSummary( $context ) );
+ $version = json_encode( $module->getVersionHash( $context ) );
// Exactly the same
$module = new ResourceLoaderFileModule( $baseParams );
-
$this->assertEquals(
- $jsonSummary,
- json_encode( $module->getDefinitionSummary( $context ) ),
+ $version,
+ json_encode( $module->getVersionHash( $context ) ),
'Instance is insignificant'
);
// Re-order dependencies
- $module = new ResourceLoaderFileModule( array(
- 'dependencies' => array( 'mediawiki', 'jquery' ),
- ) + $baseParams );
-
+ $module = new ResourceLoaderFileModule( [
+ 'dependencies' => [ 'mediawiki', 'jquery' ],
+ ] + $baseParams );
$this->assertEquals(
- $jsonSummary,
- json_encode( $module->getDefinitionSummary( $context ) ),
+ $version,
+ json_encode( $module->getVersionHash( $context ) ),
'Order of dependencies is insignificant'
);
// Re-order messages
- $module = new ResourceLoaderFileModule( array(
- 'messages' => array( 'world', 'hello' ),
- ) + $baseParams );
-
+ $module = new ResourceLoaderFileModule( [
+ 'messages' => [ 'world', 'hello' ],
+ ] + $baseParams );
$this->assertEquals(
- $jsonSummary,
- json_encode( $module->getDefinitionSummary( $context ) ),
+ $version,
+ json_encode( $module->getVersionHash( $context ) ),
'Order of messages is insignificant'
);
// Re-order scripts
- $module = new ResourceLoaderFileModule( array(
- 'scripts' => array( 'bar.js', 'foo.js' ),
- ) + $baseParams );
-
+ $module = new ResourceLoaderFileModule( [
+ 'scripts' => [ 'bar.js', 'foo.js' ],
+ ] + $baseParams );
$this->assertNotEquals(
- $jsonSummary,
- json_encode( $module->getDefinitionSummary( $context ) ),
+ $version,
+ json_encode( $module->getVersionHash( $context ) ),
'Order of scripts is significant'
);
// Subclass
$module = new ResourceLoaderFileModuleTestModule( $baseParams );
-
$this->assertNotEquals(
- $jsonSummary,
- json_encode( $module->getDefinitionSummary( $context ) ),
+ $version,
+ json_encode( $module->getVersionHash( $context ) ),
'Class is significant'
);
}
+
+ /**
+ * @covers ResourceLoaderModule::validateScriptFile
+ */
+ public function testValidateScriptFile() {
+ $this->setMwGlobals( 'wgResourceLoaderValidateJS', true );
+
+ $context = $this->getResourceLoaderContext();
+
+ $module = new ResourceLoaderTestModule( [
+ 'script' => "var a = 'this is';\n {\ninvalid"
+ ] );
+ $this->assertEquals(
+ $module->getScript( $context ),
+ 'mw.log.error(' .
+ '"JavaScript parse error: Parse error: Unexpected token; ' .
+ 'token } expected in file \'input\' on line 3"' .
+ ');',
+ 'Replace invalid syntax with error logging'
+ );
+
+ $module = new ResourceLoaderTestModule( [
+ 'script' => "\n'valid';"
+ ] );
+ $this->assertEquals(
+ $module->getScript( $context ),
+ "\n'valid';",
+ 'Leave valid scripts as-is'
+ );
+ }
+
+ /**
+ * @covers ResourceLoaderModule::getRelativePaths
+ * @covers ResourceLoaderModule::expandRelativePaths
+ */
+ public function testPlaceholderize() {
+ $getRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'getRelativePaths' );
+ $getRelativePaths->setAccessible( true );
+ $expandRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'expandRelativePaths' );
+ $expandRelativePaths->setAccessible( true );
+
+ $this->setMwGlobals( [
+ 'IP' => '/srv/example/mediawiki/core',
+ ] );
+ $raw = [
+ '/srv/example/mediawiki/core/resources/foo.js',
+ '/srv/example/mediawiki/core/extensions/Example/modules/bar.js',
+ '/srv/example/mediawiki/skins/Example/baz.css',
+ '/srv/example/mediawiki/skins/Example/images/quux.png',
+ ];
+ $canonical = [
+ 'resources/foo.js',
+ 'extensions/Example/modules/bar.js',
+ '../skins/Example/baz.css',
+ '../skins/Example/images/quux.png',
+ ];
+ $this->assertEquals(
+ $getRelativePaths->invoke( null, $raw ),
+ $canonical,
+ 'Insert placeholders'
+ );
+ $this->assertEquals(
+ $expandRelativePaths->invoke( null, $canonical ),
+ $raw,
+ 'Substitute placeholders'
+ );
+ }
}