Release notes for Iabf4873f
[mediawiki.git] / tests / phpunit / includes / ResourceLoaderTest.php
blobca8b2b6efe40f75496afee05bfd9609d916f508e
1 <?php
3 class ResourceLoaderTest extends MediaWikiTestCase {
5 protected static $resourceLoaderRegisterModulesHook;
7 protected function setUp() {
8 parent::setUp();
10 // $wgResourceLoaderLESSFunctions, $wgResourceLoaderLESSImportPaths; $wgResourceLoaderLESSVars;
12 $this->setMwGlobals( array(
13 'wgResourceLoaderLESSFunctions' => array(
14 'test-sum' => function ( $frame, $less ) {
15 $sum = 0;
16 foreach ( $frame[2] as $arg ) {
17 $sum += (int)$arg[1];
19 return $sum;
22 'wgResourceLoaderLESSImportPaths' => array(
23 dirname( __DIR__ ) . '/data/less/common',
25 'wgResourceLoaderLESSVars' => array(
26 'foo' => '2px',
27 'Foo' => '#eeeeee',
28 'bar' => 5,
30 ) );
33 /* Hook Methods */
35 /**
36 * ResourceLoaderRegisterModules hook
38 public static function resourceLoaderRegisterModules( &$resourceLoader ) {
39 self::$resourceLoaderRegisterModulesHook = true;
41 return true;
44 /* Provider Methods */
45 public static function provideValidModules() {
46 return array(
47 array( 'TEST.validModule1', new ResourceLoaderTestModule() ),
51 public static function provideResourceLoaderContext() {
52 $resourceLoader = new ResourceLoader();
53 $request = new FauxRequest();
54 return array(
55 array( new ResourceLoaderContext( $resourceLoader, $request ) ),
59 /* Test Methods */
61 /**
62 * Ensures that the ResourceLoaderRegisterModules hook is called when a new ResourceLoader object is constructed
63 * @covers ResourceLoader::__construct
65 public function testCreatingNewResourceLoaderCallsRegistrationHook() {
66 self::$resourceLoaderRegisterModulesHook = false;
67 $resourceLoader = new ResourceLoader();
68 $this->assertTrue( self::$resourceLoaderRegisterModulesHook );
70 return $resourceLoader;
73 /**
74 * @dataProvider provideValidModules
75 * @depends testCreatingNewResourceLoaderCallsRegistrationHook
76 * @covers ResourceLoader::register
77 * @covers ResourceLoader::getModule
79 public function testRegisteredValidModulesAreAccessible(
80 $name, ResourceLoaderModule $module, ResourceLoader $resourceLoader
81 ) {
82 $resourceLoader->register( $name, $module );
83 $this->assertEquals( $module, $resourceLoader->getModule( $name ) );
86 /**
87 * @dataProvider provideResourceLoaderContext
88 * @covers ResourceLoaderFileModule::compileLessFile
90 public function testLessFileCompilation( $context ) {
91 $basePath = __DIR__ . '/../data/less/module';
92 $module = new ResourceLoaderFileModule( array(
93 'localBasePath' => $basePath,
94 'styles' => array( 'styles.less' ),
95 ) );
96 $styles = $module->getStyles( $context );
97 $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] );
101 * @dataProvider providePackedModules
102 * @covers ResourceLoader::makePackedModulesString
104 public function testMakePackedModulesString( $desc, $modules, $packed ) {
105 $this->assertEquals( $packed, ResourceLoader::makePackedModulesString( $modules ), $desc );
109 * @dataProvider providePackedModules
110 * @covers ResourceLoaderContext::expandModuleNames
112 public function testexpandModuleNames( $desc, $modules, $packed ) {
113 $this->assertEquals( $modules, ResourceLoaderContext::expandModuleNames( $packed ), $desc );
116 public static function providePackedModules() {
117 return array(
118 array(
119 'Example from makePackedModulesString doc comment',
120 array( 'foo.bar', 'foo.baz', 'bar.baz', 'bar.quux' ),
121 'foo.bar,baz|bar.baz,quux',
123 array(
124 'Example from expandModuleNames doc comment',
125 array( 'jquery.foo', 'jquery.bar', 'jquery.ui.baz', 'jquery.ui.quux' ),
126 'jquery.foo,bar|jquery.ui.baz,quux',
128 array(
129 'Regression fixed in r88706 with dotless names',
130 array( 'foo', 'bar', 'baz' ),
131 'foo,bar,baz',
133 array(
134 'Prefixless modules after a prefixed module',
135 array( 'single.module', 'foobar', 'foobaz' ),
136 'single.module|foobar,foobaz',
142 /* Stubs */
144 class ResourceLoaderTestModule extends ResourceLoaderModule {
147 /* Hooks */
148 global $wgHooks;
149 $wgHooks['ResourceLoaderRegisterModules'][] = 'ResourceLoaderTest::resourceLoaderRegisterModules';