}
private static function getModules() {
- $base = array(
+ $base = [
'localBasePath' => realpath( __DIR__ ),
- );
+ ];
+
+ return [
+ 'noTemplateModule' => [],
- return array(
- 'noTemplateModule' => array(),
+ 'deprecatedModule' => $base + [
+ 'deprecated' => true,
+ ],
+ 'deprecatedTomorrow' => $base + [
+ 'deprecated' => [
+ 'message' => 'Will be removed tomorrow.'
+ ],
+ ],
- 'htmlTemplateModule' => $base + array(
- 'templates' => array(
+ 'htmlTemplateModule' => $base + [
+ 'templates' => [
'templates/template.html',
'templates/template2.html',
- )
- ),
+ ]
+ ],
- 'aliasedHtmlTemplateModule' => $base + array(
- 'templates' => array(
+ 'aliasedHtmlTemplateModule' => $base + [
+ 'templates' => [
'foo.html' => 'templates/template.html',
'bar.html' => 'templates/template2.html',
- )
- ),
+ ]
+ ],
- 'templateModuleHandlebars' => $base + array(
- 'templates' => array(
+ 'templateModuleHandlebars' => $base + [
+ 'templates' => [
'templates/template_awesome.handlebars',
- ),
- ),
+ ],
+ ],
- 'aliasFooFromBar' => $base + array(
- 'templates' => array(
+ 'aliasFooFromBar' => $base + [
+ 'templates' => [
'foo.foo' => 'templates/template.bar',
- ),
- ),
- );
+ ],
+ ],
+ ];
}
public static function providerTemplateDependencies() {
$modules = self::getModules();
- return array(
- array(
+ return [
+ [
$modules['noTemplateModule'],
- array(),
- ),
- array(
+ [],
+ ],
+ [
$modules['htmlTemplateModule'],
- array(
+ [
'mediawiki.template',
- ),
- ),
- array(
+ ],
+ ],
+ [
$modules['templateModuleHandlebars'],
- array(
+ [
'mediawiki.template',
'mediawiki.template.handlebars',
- ),
- ),
- array(
+ ],
+ ],
+ [
$modules['aliasFooFromBar'],
- array(
+ [
'mediawiki.template',
'mediawiki.template.foo',
- ),
- ),
- );
+ ],
+ ],
+ ];
}
/**
$this->assertEquals( $rl->getDependencies(), $expected );
}
+ public static function providerDeprecatedModules() {
+ return [
+ [
+ 'deprecatedModule',
+ 'mw.log.warn("This page is using the deprecated ResourceLoader module \"deprecatedModule\".");',
+ ],
+ [
+ 'deprecatedTomorrow',
+ 'mw.log.warn(' .
+ '"This page is using the deprecated ResourceLoader module \"deprecatedTomorrow\".\\n' .
+ "Will be removed tomorrow." .
+ '");'
+ ]
+ ];
+ }
+
+ /**
+ * @dataProvider providerDeprecatedModules
+ * @covers ResourceLoaderFileModule::getScript
+ */
+ public function testDeprecatedModules( $name, $expected ) {
+ $modules = self::getModules();
+ $rl = new ResourceLoaderFileModule( $modules[$name] );
+ $rl->setName( $name );
+ $ctx = $this->getResourceLoaderContext( 'en', 'ltr' );
+ $this->assertEquals( $rl->getScript( $ctx ), $expected );
+ }
+
/**
* @covers ResourceLoaderFileModule::getAllStyleFiles
* @covers ResourceLoaderFileModule::getAllSkinStyleFiles
* @covers ResourceLoaderFileModule::getSkinStyleFiles
*/
public function testGetAllSkinStyleFiles() {
- $baseParams = array(
- 'scripts' => array(
+ $baseParams = [
+ 'scripts' => [
'foo.js',
'bar.js',
- ),
- 'styles' => array(
+ ],
+ 'styles' => [
'foo.css',
- 'bar.css' => array( 'media' => 'print' ),
- 'screen.less' => array( 'media' => 'screen' ),
- 'screen-query.css' => array( 'media' => 'screen and (min-width: 400px)' ),
- ),
- 'skinStyles' => array(
+ 'bar.css' => [ 'media' => 'print' ],
+ 'screen.less' => [ 'media' => 'screen' ],
+ 'screen-query.css' => [ 'media' => 'screen and (min-width: 400px)' ],
+ ],
+ 'skinStyles' => [
'default' => 'quux-fallback.less',
- 'fakeskin' => array(
+ 'fakeskin' => [
'baz-vector.css',
'quux-vector.less',
- ),
- ),
- 'messages' => array(
+ ],
+ ],
+ 'messages' => [
'hello',
'world',
- ),
- );
+ ],
+ ];
$module = new ResourceLoaderFileModule( $baseParams );
$this->assertEquals(
- array(
+ [
'foo.css',
'baz-vector.css',
'quux-vector.less',
'bar.css',
'screen.less',
'screen-query.css',
- ),
+ ],
array_map( 'basename', $module->getAllStyleFiles() )
);
}
*/
public function testMixedCssAnnotations() {
$basePath = __DIR__ . '/../../data/css';
- $testModule = new ResourceLoaderFileModule( array(
+ $testModule = new ResourceLoaderFileModule( [
'localBasePath' => $basePath,
- 'styles' => array( 'test.css' ),
- ) );
- $expectedModule = new ResourceLoaderFileModule( array(
+ 'styles' => [ 'test.css' ],
+ ] );
+ $expectedModule = new ResourceLoaderFileModule( [
'localBasePath' => $basePath,
- 'styles' => array( 'expected.css' ),
- ) );
+ 'styles' => [ 'expected.css' ],
+ ] );
$contextLtr = $this->getResourceLoaderContext( 'en', 'ltr' );
$contextRtl = $this->getResourceLoaderContext( 'he', 'rtl' );
public static function providerGetTemplates() {
$modules = self::getModules();
- return array(
- array(
+ return [
+ [
$modules['noTemplateModule'],
- array(),
- ),
- array(
+ [],
+ ],
+ [
$modules['templateModuleHandlebars'],
- array(
+ [
'templates/template_awesome.handlebars' => "wow\n",
- ),
- ),
- array(
+ ],
+ ],
+ [
$modules['htmlTemplateModule'],
- array(
+ [
'templates/template.html' => "<strong>hello</strong>\n",
'templates/template2.html' => "<div>goodbye</div>\n",
- ),
- ),
- array(
+ ],
+ ],
+ [
$modules['aliasedHtmlTemplateModule'],
- array(
+ [
'foo.html' => "<strong>hello</strong>\n",
'bar.html' => "<div>goodbye</div>\n",
- ),
- ),
- );
+ ],
+ ],
+ ];
}
/**
$this->assertEquals( $rl->getTemplates(), $expected );
}
+
+ public function testBomConcatenation() {
+ $basePath = __DIR__ . '/../../data/css';
+ $testModule = new ResourceLoaderFileModule( [
+ 'localBasePath' => $basePath,
+ 'styles' => [ 'bom.css' ],
+ ] );
+ $this->assertEquals(
+ substr( file_get_contents( "$basePath/bom.css" ), 0, 10 ),
+ "\xef\xbb\xbf.efbbbf",
+ 'File has leading BOM'
+ );
+
+ $contextLtr = $this->getResourceLoaderContext( 'en', 'ltr' );
+ $this->assertEquals(
+ $testModule->getStyles( $contextLtr ),
+ [ 'all' => ".efbbbf_bom_char_at_start_of_file {}\n" ],
+ 'Leading BOM removed when concatenating files'
+ );
+ }
}