From f2daeaa7494b40400a927b00c92daf4b9831687b Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 30 Jan 2015 12:56:02 -0800 Subject: [PATCH] registration: Fix handling of MessagesDirs array and add tests Previously the code was designed to handle: "MessagesDirs": { "FooBar": "i18n" } However, it can also be an array, and some extensions (VisualEditor) use it like: "MessagesDirs": { "FooBar": [ "i18n", "also-i18n" ] } This properly handles both strings and arrays and adds tests to verify the behavior. Change-Id: Iff1523b86f754cac1f5b8d822d4324c5fbfc1a50 --- includes/registration/ExtensionProcessor.php | 8 +++--- .../registration/ExtensionProcessorTest.php | 27 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/includes/registration/ExtensionProcessor.php b/includes/registration/ExtensionProcessor.php index 25222f6568..8a6530b940 100644 --- a/includes/registration/ExtensionProcessor.php +++ b/includes/registration/ExtensionProcessor.php @@ -204,9 +204,11 @@ class ExtensionProcessor implements Processor { protected function extractMessageSettings( $dir, array $info ) { foreach ( array( 'ExtensionMessagesFiles', 'MessagesDirs' ) as $key ) { if ( isset( $info[$key] ) ) { - $this->globals["wg$key"] += array_map( function( $file ) use ( $dir ) { - return "$dir/$file"; - }, $info[$key] ); + foreach ( $info[$key] as $name => $files ) { + foreach ( (array)$files as $file ) { + $this->globals["wg$key"][$name][] = "$dir/$file"; + } + } $this->processed[] = $key; } } diff --git a/tests/phpunit/includes/registration/ExtensionProcessorTest.php b/tests/phpunit/includes/registration/ExtensionProcessorTest.php index 96df354b01..0d31878227 100644 --- a/tests/phpunit/includes/registration/ExtensionProcessorTest.php +++ b/tests/phpunit/includes/registration/ExtensionProcessorTest.php @@ -97,6 +97,33 @@ class ExtensionProcessorTest extends MediaWikiTestCase { $this->assertArrayNotHasKey( 'wg@IGNORED', $extracted['globals'] ); } + public static function provideExtractMessageSettings() { + $dir = __DIR__ . '/FooBar/'; + return array( + array( + array( 'MessagesDirs' => array( 'VisualEditor' => 'i18n' ) ), + array( 'wgMessagesDirs' => array( 'VisualEditor' => array( $dir . 'i18n' ) ) ) + ), + array( + array( 'MessagesDirs' => array( 'VisualEditor' => array( 'i18n', 'foobar' ) ) ), + array( 'wgMessagesDirs' => array( 'VisualEditor' => array( $dir . 'i18n', $dir . 'foobar' ) ) ) + ), + ); + } + + /** + * @covers ExtensionProcessor::extractMessageSettings + * @dataProvider provideExtractMessageSettings + */ + public function testExtractMessageSettings( $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 provideSetToGlobal() { return array( array( -- 2.20.1