Merge "Fix various mistakes in PHPDoc comments"
[lhc/web/wiklou.git] / tests / phpunit / includes / resourceloader / ResourceLoaderModuleTest.php
1 <?php
2
3 class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
4
5 /**
6 * @covers ResourceLoaderModule::getVersionHash
7 * @group Broken
8 */
9 public function testGetVersionHash() {
10 $context = $this->getResourceLoaderContext();
11
12 $baseParams = array(
13 'scripts' => array( 'foo.js', 'bar.js' ),
14 'dependencies' => array( 'jquery', 'mediawiki' ),
15 'messages' => array( 'hello', 'world' ),
16 );
17
18 $module = new ResourceLoaderFileModule( $baseParams );
19 $version = json_encode( $module->getVersionHash( $context ) );
20
21 // Exactly the same
22 $module = new ResourceLoaderFileModule( $baseParams );
23 $this->assertEquals(
24 $version,
25 json_encode( $module->getVersionHash( $context ) ),
26 'Instance is insignificant'
27 );
28
29 // Re-order dependencies
30 $module = new ResourceLoaderFileModule( array(
31 'dependencies' => array( 'mediawiki', 'jquery' ),
32 ) + $baseParams );
33 $this->assertEquals(
34 $version,
35 json_encode( $module->getVersionHash( $context ) ),
36 'Order of dependencies is insignificant'
37 );
38
39 // Re-order messages
40 $module = new ResourceLoaderFileModule( array(
41 'messages' => array( 'world', 'hello' ),
42 ) + $baseParams );
43 $this->assertEquals(
44 $version,
45 json_encode( $module->getVersionHash( $context ) ),
46 'Order of messages is insignificant'
47 );
48
49 // Re-order scripts
50 $module = new ResourceLoaderFileModule( array(
51 'scripts' => array( 'bar.js', 'foo.js' ),
52 ) + $baseParams );
53 $this->assertNotEquals(
54 $version,
55 json_encode( $module->getVersionHash( $context ) ),
56 'Order of scripts is significant'
57 );
58
59 // Subclass
60 $module = new ResourceLoaderFileModuleTestModule( $baseParams );
61 $this->assertNotEquals(
62 $version,
63 json_encode( $module->getVersionHash( $context ) ),
64 'Class is significant'
65 );
66 }
67
68 /**
69 * @covers ResourceLoaderModule::validateScriptFile
70 */
71 public function testValidateScriptFile() {
72 $this->setMwGlobals( 'wgResourceLoaderValidateJS', true );
73
74 $context = $this->getResourceLoaderContext();
75
76 $module = new ResourceLoaderTestModule( array(
77 'script' => "var a = 'this is';\n {\ninvalid"
78 ) );
79 $this->assertEquals(
80 $module->getScript( $context ),
81 'mw.log.error(' .
82 '"JavaScript parse error: Parse error: Unexpected token; ' .
83 'token } expected in file \'input\' on line 3"' .
84 ');',
85 'Replace invalid syntax with error logging'
86 );
87
88 $module = new ResourceLoaderTestModule( array(
89 'script' => "\n'valid';"
90 ) );
91 $this->assertEquals(
92 $module->getScript( $context ),
93 "\n'valid';",
94 'Leave valid scripts as-is'
95 );
96 }
97
98 /**
99 * @covers ResourceLoaderModule::getRelativePaths
100 * @covers ResourceLoaderModule::expandRelativePaths
101 */
102 public function testPlaceholderize() {
103 $getRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'getRelativePaths' );
104 $getRelativePaths->setAccessible( true );
105 $expandRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'expandRelativePaths' );
106 $expandRelativePaths->setAccessible( true );
107
108 $this->setMwGlobals( array(
109 'IP' => '/srv/example/mediawiki/core',
110 ) );
111 $raw = array(
112 '/srv/example/mediawiki/core/resources/foo.js',
113 '/srv/example/mediawiki/core/extensions/Example/modules/bar.js',
114 '/srv/example/mediawiki/skins/Example/baz.css',
115 '/srv/example/mediawiki/skins/Example/images/quux.png',
116 );
117 $canonical = array(
118 'resources/foo.js',
119 'extensions/Example/modules/bar.js',
120 '../skins/Example/baz.css',
121 '../skins/Example/images/quux.png',
122 );
123 $this->assertEquals(
124 $getRelativePaths->invoke( null, $raw ),
125 $canonical,
126 'Insert placeholders'
127 );
128 $this->assertEquals(
129 $expandRelativePaths->invoke( null, $canonical ),
130 $raw,
131 'Substitute placeholders'
132 );
133 }
134 }