registration: Fix regression in ExtensionMessagesFiles handling
authorKunal Mehta <legoktm@gmail.com>
Fri, 6 Feb 2015 23:02:26 +0000 (15:02 -0800)
committerKunal Mehta <legoktm@gmail.com>
Fri, 6 Feb 2015 23:02:26 +0000 (15:02 -0800)
In f2daeaa7494b404, the handling of MessageDirs was fixed to properly
handle arrays, except that broke ExtensionMessagesFiles which doesn't
support arrays. Since both settings are pretty much different, I split
them into separate functions.

Bug: T88858
Change-Id: I48765af2489d2ef1e30adb1d7c5a5a8f23bf522d

includes/registration/ExtensionProcessor.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php

index 8a6530b..1462840 100644 (file)
@@ -116,7 +116,8 @@ class ExtensionProcessor implements Processor {
                $this->extractConfig( $info );
                $this->extractHooks( $info );
                $dir = dirname( $path );
-               $this->extractMessageSettings( $dir, $info );
+               $this->extractExtensionMessagesFiles( $dir, $info );
+               $this->extractMessagesDirs( $dir, $info );
                $this->extractNamespaces( $info );
                $this->extractResourceLoaderModules( $dir, $info );
                if ( isset( $info['callback'] ) ) {
@@ -194,6 +195,15 @@ class ExtensionProcessor implements Processor {
                }
        }
 
+       protected function extractExtensionMessagesFiles( $dir, array $info ) {
+               if ( isset( $info['ExtensionMessagesFiles'] ) ) {
+                       $this->globals["wgExtensionMessagesFiles"] += array_map( function( $file ) use ( $dir ) {
+                               return "$dir/$file";
+                       }, $info['ExtensionMessagesFiles'] );
+                       $this->processed[] = 'ExtensionMessagesFiles';
+               }
+       }
+
        /**
         * Set message-related settings, which need to be expanded to use
         * absolute paths
@@ -201,16 +211,14 @@ class ExtensionProcessor implements Processor {
         * @param string $dir
         * @param array $info
         */
-       protected function extractMessageSettings( $dir, array $info ) {
-               foreach ( array( 'ExtensionMessagesFiles', 'MessagesDirs' ) as $key ) {
-                       if ( isset( $info[$key] ) ) {
-                               foreach ( $info[$key] as $name => $files ) {
-                                       foreach ( (array)$files as $file ) {
-                                               $this->globals["wg$key"][$name][] = "$dir/$file";
-                                       }
+       protected function extractMessagesDirs( $dir, array $info ) {
+               if ( isset( $info['MessagesDirs'] ) ) {
+                       foreach ( $info['MessagesDirs'] as $name => $files ) {
+                               foreach ( (array)$files as $file ) {
+                                       $this->globals["wgMessagesDirs"][$name][] = "$dir/$file";
                                }
-                               $this->processed[] = $key;
                        }
+                       $this->processed[] = 'MessagesDirs';
                }
        }
 
index 0d31878..9461a16 100644 (file)
@@ -97,7 +97,45 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                $this->assertArrayNotHasKey( 'wg@IGNORED', $extracted['globals'] );
        }
 
-       public static function provideExtractMessageSettings() {
+       public static function provideExtracttExtensionMessagesFiles() {
+               $dir = __DIR__ . '/FooBar/';
+               return array(
+                       array(
+                               array( 'ExtensionMessagesFiles' => array( 'FooBarAlias' => 'FooBar.alias.php' ) ),
+                               array( 'wgExtensionMessagesFiles' => array( 'FooBarAlias' => $dir . 'FooBar.alias.php' ) )
+                       ),
+                       array(
+                               array(
+                                       'ExtensionMessagesFiles' => array(
+                                               'FooBarAlias' => 'FooBar.alias.php',
+                                               'FooBarMagic' => 'FooBar.magic.i18n.php',
+                                       ),
+                               ),
+                               array(
+                                       'wgExtensionMessagesFiles' => array(
+                                               'FooBarAlias' => $dir . 'FooBar.alias.php',
+                                               'FooBarMagic' => $dir . 'FooBar.magic.i18n.php',
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @covers ExtensionProcessor::extracttExtensionMessagesFiles
+        * @dataProvider provideExtracttExtensionMessagesFiles
+        */
+       public function testExtracttExtensionMessagesFiles( $input, $expected ) {
+               $processor = new ExtensionProcessor();
+               $processor->extractInfo( $this->dir, $input + self::$default );
+               $out = $processor->getExtractedInfo();
+               foreach ( $expected as $key => $value ) {
+                       $this->assertEquals( $value, $out['globals'][$key] );
+               }
+       }
+
+
+       public static function provideExtractMessagesDirs() {
                $dir = __DIR__ . '/FooBar/';
                return array(
                        array(
@@ -112,10 +150,10 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers ExtensionProcessor::extractMessageSettings
-        * @dataProvider provideExtractMessageSettings
+        * @covers ExtensionProcessor::extractMessagesDirs
+        * @dataProvider provideExtractMessagesDirs
         */
-       public function testExtractMessageSettings( $input, $expected ) {
+       public function testExtractMessagesDirs( $input, $expected ) {
                $processor = new ExtensionProcessor();
                $processor->extractInfo( $this->dir, $input + self::$default );
                $out = $processor->getExtractedInfo();