ab0c8d9b14053a094048a36f3073d045246d909b
[lhc/web/wiklou.git] / tests / phpunit / includes / resourceloader / ResourceLoaderTest.php
1 <?php
2
3 class ResourceLoaderTest extends ResourceLoaderTestCase {
4
5 protected static $resourceLoaderRegisterModulesHook;
6
7 protected function setUp() {
8 parent::setUp();
9
10 // $wgResourceLoaderLESSFunctions, $wgResourceLoaderLESSImportPaths; $wgResourceLoaderLESSVars;
11
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];
18 }
19 return $sum;
20 },
21 ),
22 'wgResourceLoaderLESSImportPaths' => array(
23 dirname( dirname( __DIR__ ) ) . '/data/less/common',
24 ),
25 'wgResourceLoaderLESSVars' => array(
26 'foo' => '2px',
27 'Foo' => '#eeeeee',
28 'bar' => 5,
29 ),
30 ) );
31 }
32
33 /* Hook Methods */
34
35 /**
36 * ResourceLoaderRegisterModules hook
37 */
38 public static function resourceLoaderRegisterModules( &$resourceLoader ) {
39 self::$resourceLoaderRegisterModulesHook = true;
40
41 return true;
42 }
43
44 /* Provider Methods */
45 public static function provideValidModules() {
46 return array(
47 array( 'TEST.validModule1', new ResourceLoaderTestModule() ),
48 );
49 }
50
51 /* Test Methods */
52
53 /**
54 * Ensures that the ResourceLoaderRegisterModules hook is called when a new ResourceLoader object is constructed
55 * @covers ResourceLoader::__construct
56 */
57 public function testCreatingNewResourceLoaderCallsRegistrationHook() {
58 self::$resourceLoaderRegisterModulesHook = false;
59 $resourceLoader = new ResourceLoader();
60 $this->assertTrue( self::$resourceLoaderRegisterModulesHook );
61
62 return $resourceLoader;
63 }
64
65 /**
66 * @dataProvider provideValidModules
67 * @depends testCreatingNewResourceLoaderCallsRegistrationHook
68 * @covers ResourceLoader::register
69 * @covers ResourceLoader::getModule
70 */
71 public function testRegisteredValidModulesAreAccessible(
72 $name, ResourceLoaderModule $module, ResourceLoader $resourceLoader
73 ) {
74 $resourceLoader->register( $name, $module );
75 $this->assertEquals( $module, $resourceLoader->getModule( $name ) );
76 }
77
78 /**
79 * @covers ResourceLoaderFileModule::compileLessFile
80 */
81 public function testLessFileCompilation() {
82 $context = self::getResourceLoaderContext();
83 $basePath = __DIR__ . '/../../data/less/module';
84 $module = new ResourceLoaderFileModule( array(
85 'localBasePath' => $basePath,
86 'styles' => array( 'styles.less' ),
87 ) );
88 $styles = $module->getStyles( $context );
89 $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] );
90 }
91
92 /**
93 * @dataProvider providePackedModules
94 * @covers ResourceLoader::makePackedModulesString
95 */
96 public function testMakePackedModulesString( $desc, $modules, $packed ) {
97 $this->assertEquals( $packed, ResourceLoader::makePackedModulesString( $modules ), $desc );
98 }
99
100 /**
101 * @dataProvider providePackedModules
102 * @covers ResourceLoaderContext::expandModuleNames
103 */
104 public function testexpandModuleNames( $desc, $modules, $packed ) {
105 $this->assertEquals( $modules, ResourceLoaderContext::expandModuleNames( $packed ), $desc );
106 }
107
108 public static function providePackedModules() {
109 return array(
110 array(
111 'Example from makePackedModulesString doc comment',
112 array( 'foo.bar', 'foo.baz', 'bar.baz', 'bar.quux' ),
113 'foo.bar,baz|bar.baz,quux',
114 ),
115 array(
116 'Example from expandModuleNames doc comment',
117 array( 'jquery.foo', 'jquery.bar', 'jquery.ui.baz', 'jquery.ui.quux' ),
118 'jquery.foo,bar|jquery.ui.baz,quux',
119 ),
120 array(
121 'Regression fixed in r88706 with dotless names',
122 array( 'foo', 'bar', 'baz' ),
123 'foo,bar,baz',
124 ),
125 array(
126 'Prefixless modules after a prefixed module',
127 array( 'single.module', 'foobar', 'foobaz' ),
128 'single.module|foobar,foobaz',
129 ),
130 );
131 }
132 }
133
134 /* Hooks */
135 global $wgHooks;
136 $wgHooks['ResourceLoaderRegisterModules'][] = 'ResourceLoaderTest::resourceLoaderRegisterModules';