From 7067b6130d9339a9fe2e5a9a355780cdea1b0363 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 6 Feb 2015 15:02:26 -0800 Subject: [PATCH] registration: Fix regression in ExtensionMessagesFiles handling 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 | 26 +++++++---- .../registration/ExtensionProcessorTest.php | 46 +++++++++++++++++-- 2 files changed, 59 insertions(+), 13 deletions(-) diff --git a/includes/registration/ExtensionProcessor.php b/includes/registration/ExtensionProcessor.php index 8a6530b940..1462840f5f 100644 --- a/includes/registration/ExtensionProcessor.php +++ b/includes/registration/ExtensionProcessor.php @@ -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'; } } diff --git a/tests/phpunit/includes/registration/ExtensionProcessorTest.php b/tests/phpunit/includes/registration/ExtensionProcessorTest.php index 0d31878227..9461a164ce 100644 --- a/tests/phpunit/includes/registration/ExtensionProcessorTest.php +++ b/tests/phpunit/includes/registration/ExtensionProcessorTest.php @@ -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(); -- 2.20.1