2013-10-18 13:34:50 +00:00
|
|
|
<?php
|
|
|
|
|
|
2014-03-07 17:18:31 +00:00
|
|
|
class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
|
2013-10-18 13:34:50 +00:00
|
|
|
|
|
|
|
|
/**
|
2015-06-18 18:57:16 +00:00
|
|
|
* @covers ResourceLoaderModule::getVersionHash
|
2015-10-20 01:57:36 +00:00
|
|
|
* @group Broken
|
2013-10-18 13:34:50 +00:00
|
|
|
*/
|
2015-06-18 18:57:16 +00:00
|
|
|
public function testGetVersionHash() {
|
2014-12-19 00:52:28 +00:00
|
|
|
$context = $this->getResourceLoaderContext();
|
2013-10-18 13:34:50 +00:00
|
|
|
|
|
|
|
|
$baseParams = array(
|
|
|
|
|
'scripts' => array( 'foo.js', 'bar.js' ),
|
|
|
|
|
'dependencies' => array( 'jquery', 'mediawiki' ),
|
|
|
|
|
'messages' => array( 'hello', 'world' ),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$module = new ResourceLoaderFileModule( $baseParams );
|
2015-06-18 18:57:16 +00:00
|
|
|
$version = json_encode( $module->getVersionHash( $context ) );
|
2013-10-18 13:34:50 +00:00
|
|
|
|
|
|
|
|
// Exactly the same
|
|
|
|
|
$module = new ResourceLoaderFileModule( $baseParams );
|
|
|
|
|
$this->assertEquals(
|
2015-06-18 18:57:16 +00:00
|
|
|
$version,
|
|
|
|
|
json_encode( $module->getVersionHash( $context ) ),
|
2013-10-18 13:34:50 +00:00
|
|
|
'Instance is insignificant'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Re-order dependencies
|
|
|
|
|
$module = new ResourceLoaderFileModule( array(
|
|
|
|
|
'dependencies' => array( 'mediawiki', 'jquery' ),
|
|
|
|
|
) + $baseParams );
|
|
|
|
|
$this->assertEquals(
|
2015-06-18 18:57:16 +00:00
|
|
|
$version,
|
|
|
|
|
json_encode( $module->getVersionHash( $context ) ),
|
2013-10-18 13:34:50 +00:00
|
|
|
'Order of dependencies is insignificant'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Re-order messages
|
|
|
|
|
$module = new ResourceLoaderFileModule( array(
|
|
|
|
|
'messages' => array( 'world', 'hello' ),
|
|
|
|
|
) + $baseParams );
|
|
|
|
|
$this->assertEquals(
|
2015-06-18 18:57:16 +00:00
|
|
|
$version,
|
|
|
|
|
json_encode( $module->getVersionHash( $context ) ),
|
2013-10-18 13:34:50 +00:00
|
|
|
'Order of messages is insignificant'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Re-order scripts
|
|
|
|
|
$module = new ResourceLoaderFileModule( array(
|
|
|
|
|
'scripts' => array( 'bar.js', 'foo.js' ),
|
|
|
|
|
) + $baseParams );
|
|
|
|
|
$this->assertNotEquals(
|
2015-06-18 18:57:16 +00:00
|
|
|
$version,
|
|
|
|
|
json_encode( $module->getVersionHash( $context ) ),
|
2013-10-18 13:34:50 +00:00
|
|
|
'Order of scripts is significant'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Subclass
|
|
|
|
|
$module = new ResourceLoaderFileModuleTestModule( $baseParams );
|
|
|
|
|
$this->assertNotEquals(
|
2015-06-18 18:57:16 +00:00
|
|
|
$version,
|
|
|
|
|
json_encode( $module->getVersionHash( $context ) ),
|
2013-10-18 13:34:50 +00:00
|
|
|
'Class is significant'
|
|
|
|
|
);
|
|
|
|
|
}
|
2015-06-02 22:48:47 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @covers ResourceLoaderModule::validateScriptFile
|
|
|
|
|
*/
|
|
|
|
|
public function testValidateScriptFile() {
|
|
|
|
|
$context = $this->getResourceLoaderContext();
|
|
|
|
|
|
|
|
|
|
$module = new ResourceLoaderTestModule( array(
|
|
|
|
|
'script' => "var a = 'this is';\n {\ninvalid"
|
|
|
|
|
) );
|
|
|
|
|
$this->assertEquals(
|
|
|
|
|
$module->getScript( $context ),
|
2015-09-26 19:48:17 +00:00
|
|
|
'mw.log.error(' .
|
|
|
|
|
'"JavaScript parse error: Parse error: Unexpected token; ' .
|
|
|
|
|
'token } expected in file \'input\' on line 3"' .
|
|
|
|
|
');',
|
2015-06-02 22:48:47 +00:00
|
|
|
'Replace invalid syntax with error logging'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$module = new ResourceLoaderTestModule( array(
|
|
|
|
|
'script' => "\n'valid';"
|
|
|
|
|
) );
|
|
|
|
|
$this->assertEquals(
|
|
|
|
|
$module->getScript( $context ),
|
|
|
|
|
"\n'valid';",
|
|
|
|
|
'Leave valid scripts as-is'
|
|
|
|
|
);
|
|
|
|
|
}
|
2015-09-23 01:35:38 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @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( array(
|
|
|
|
|
'IP' => '/srv/example/mediawiki/core',
|
|
|
|
|
) );
|
|
|
|
|
$raw = array(
|
|
|
|
|
'/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 = array(
|
|
|
|
|
'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'
|
|
|
|
|
);
|
|
|
|
|
}
|
2013-10-18 13:34:50 +00:00
|
|
|
}
|