Merge "Added release notes for 'ContentHandler::runLegacyHooks' removal"
[mediawiki.git] / tests / phpunit / includes / registration / ExtensionRegistryTest.php
blob9b57e1c3d108e45710542d8b7659b185ab2bdbf5
1 <?php
3 class ExtensionRegistryTest extends MediaWikiTestCase {
5 /**
6 * @covers ExtensionRegistry::exportExtractedData
7 * @dataProvider provideExportExtractedDataGlobals
8 */
9 public function testExportExtractedDataGlobals( $desc, $before, $globals, $expected ) {
10 // Set globals for test
11 if ( $before ) {
12 foreach ( $before as $key => $value ) {
13 // mw prefixed globals does not exist normally
14 if ( substr( $key, 0, 2 ) == 'mw' ) {
15 $GLOBALS[$key] = $value;
16 } else {
17 $this->setMwGlobals( $key, $value );
22 $info = [
23 'globals' => $globals,
24 'callbacks' => [],
25 'defines' => [],
26 'credits' => [],
27 'attributes' => [],
28 'autoloaderPaths' => []
30 $registry = new ExtensionRegistry();
31 $class = new ReflectionClass( 'ExtensionRegistry' );
32 $method = $class->getMethod( 'exportExtractedData' );
33 $method->setAccessible( true );
34 $method->invokeArgs( $registry, [ $info ] );
35 foreach ( $expected as $name => $value ) {
36 $this->assertArrayHasKey( $name, $GLOBALS, $desc );
37 $this->assertEquals( $value, $GLOBALS[$name], $desc );
40 // Remove mw prefixed globals
41 if ( $before ) {
42 foreach ( $before as $key => $value ) {
43 if ( substr( $key, 0, 2 ) == 'mw' ) {
44 unset( $GLOBALS[$key] );
50 public static function provideExportExtractedDataGlobals() {
51 // "mwtest" prefix used instead of "$wg" to avoid potential conflicts
52 return [
54 'Simple non-array values',
56 'mwtestFooBarConfig' => true,
57 'mwtestFooBarConfig2' => 'string',
60 'mwtestFooBarDefault' => 1234,
61 'mwtestFooBarConfig' => false,
64 'mwtestFooBarConfig' => true,
65 'mwtestFooBarConfig2' => 'string',
66 'mwtestFooBarDefault' => 1234,
70 'No global already set, simple array',
71 null,
73 'mwtestDefaultOptions' => [
74 'foobar' => true,
78 'mwtestDefaultOptions' => [
79 'foobar' => true,
84 'Global already set, simple array',
86 'mwtestDefaultOptions' => [
87 'foobar' => true,
88 'foo' => 'string'
92 'mwtestDefaultOptions' => [
93 'barbaz' => 12345,
94 'foobar' => false,
98 'mwtestDefaultOptions' => [
99 'barbaz' => 12345,
100 'foo' => 'string',
101 'foobar' => true,
106 'Global already set, 1d array that appends',
108 'mwAvailableRights' => [
109 'foobar',
110 'foo'
114 'mwAvailableRights' => [
115 'barbaz',
119 'mwAvailableRights' => [
120 'barbaz',
121 'foobar',
122 'foo',
127 'Global already set, array with integer keys',
129 'mwNamespacesFoo' => [
130 100 => true,
131 102 => false
135 'mwNamespacesFoo' => [
136 100 => false,
137 500 => true,
138 ExtensionRegistry::MERGE_STRATEGY => 'array_plus',
142 'mwNamespacesFoo' => [
143 100 => true,
144 102 => false,
145 500 => true,
150 'No global already set, $wgHooks',
152 'wgHooks' => [],
155 'wgHooks' => [
156 'FooBarEvent' => [
157 'FooBarClass::onFooBarEvent'
159 ExtensionRegistry::MERGE_STRATEGY => 'array_merge_recursive'
163 'wgHooks' => [
164 'FooBarEvent' => [
165 'FooBarClass::onFooBarEvent'
171 'Global already set, $wgHooks',
173 'wgHooks' => [
174 'FooBarEvent' => [
175 'FooBarClass::onFooBarEvent'
177 'BazBarEvent' => [
178 'FooBarClass::onBazBarEvent',
183 'wgHooks' => [
184 'FooBarEvent' => [
185 'BazBarClass::onFooBarEvent',
187 ExtensionRegistry::MERGE_STRATEGY => 'array_merge_recursive',
191 'wgHooks' => [
192 'FooBarEvent' => [
193 'FooBarClass::onFooBarEvent',
194 'BazBarClass::onFooBarEvent',
196 'BazBarEvent' => [
197 'FooBarClass::onBazBarEvent',
203 'Global already set, $wgGroupPermissions',
205 'wgGroupPermissions' => [
206 'sysop' => [
207 'something' => true,
209 'user' => [
210 'somethingtwo' => true,
215 'wgGroupPermissions' => [
216 'customgroup' => [
217 'right' => true,
219 'user' => [
220 'right' => true,
221 'somethingtwo' => false,
222 'nonduplicated' => true,
224 ExtensionRegistry::MERGE_STRATEGY => 'array_plus_2d',
228 'wgGroupPermissions' => [
229 'customgroup' => [
230 'right' => true,
232 'sysop' => [
233 'something' => true,
235 'user' => [
236 'somethingtwo' => true,
237 'right' => true,
238 'nonduplicated' => true,
244 'False local setting should not be overridden (T100767)',
246 'mwtestT100767' => false,
249 'mwtestT100767' => true,
252 'mwtestT100767' => false,
256 'test array_replace_recursive',
258 'mwtestJsonConfigs' => [
259 'JsonZeroConfig' => [
260 'namespace' => 480,
261 'nsName' => 'Zero',
262 'isLocal' => true,
267 'mwtestJsonConfigs' => [
268 'JsonZeroConfig' => [
269 'isLocal' => false,
270 'remote' => [
271 'username' => 'foo',
274 ExtensionRegistry::MERGE_STRATEGY => 'array_replace_recursive',
278 'mwtestJsonConfigs' => [
279 'JsonZeroConfig' => [
280 'namespace' => 480,
281 'nsName' => 'Zero',
282 'isLocal' => false,
283 'remote' => [
284 'username' => 'foo',