[MediaWiki-commits] [Gerrit] Implement wfArrayPlus2d which combines 2d arrays - change (mediawiki/core)

2015-09-01 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged.

Change subject: Implement wfArrayPlus2d which combines 2d arrays
..


Implement wfArrayPlus2d which combines 2d arrays

Moved the logic of ExtensionRegistrations array_plus_2d merge method out
to it's own global function wfArrayPlus2d, so any other function in mediawiki
core and it's extensions can use this method when they need to union
a 2d array.

Change-Id: I56afdf306e399a4a1505828ed76c60c1bfd033b6
---
M includes/GlobalFunctions.php
M includes/registration/ExtensionRegistry.php
A tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php
3 files changed, 120 insertions(+), 8 deletions(-)

Approvals:
  Legoktm: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php
index 9d89633..b853d07 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -4273,3 +4273,28 @@
 
return true;
 }
+
+/**
+ * Merges two (possibly) 2 dimensional arrays into the target array 
($baseArray).
+ *
+ * Values that exist in both values will be combined with += (all values of 
the array
+ * of $newValues will be added to the values of the array of $baseArray, while 
values,
+ * that exists in both, the value of $baseArray will be used).
+ *
+ * @param array $baseArray The array where you want to add the values of 
$newValues to
+ * @param array $newValues An array with new values
+ * @return array The combined array
+ * @since 1.26
+ */
+function wfArrayPlus2d( array $baseArray, array $newValues ) {
+   // First merge items that are in both arrays
+   foreach ( $baseArray as $name => &$groupVal ) {
+   if ( isset( $newValues[$name] ) ) {
+   $groupVal += $newValues[$name];
+   }
+   }
+   // Now add items that didn't exist yet
+   $baseArray += $newValues;
+
+   return $baseArray;
+}
diff --git a/includes/registration/ExtensionRegistry.php 
b/includes/registration/ExtensionRegistry.php
index b89518a..f838103 100644
--- a/includes/registration/ExtensionRegistry.php
+++ b/includes/registration/ExtensionRegistry.php
@@ -222,14 +222,7 @@
$GLOBALS[$key] = array_merge_recursive( 
$GLOBALS[$key], $val );
break;
case 'array_plus_2d':
-   // First merge items that are in both 
arrays
-   foreach ( $GLOBALS[$key] as $name => 
&$groupVal ) {
-   if ( isset( $val[$name] ) ) {
-   $groupVal += 
$val[$name];
-   }
-   }
-   // Now add items that didn't exist yet
-   $GLOBALS[$key] += $val;
+   $GLOBALS[$key] = wfArrayPlus2d( 
$GLOBALS[$key], $val );
break;
case 'array_plus':
$GLOBALS[$key] = $val + $GLOBALS[$key];
diff --git a/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php 
b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php
new file mode 100644
index 000..88875bb
--- /dev/null
+++ b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php
@@ -0,0 +1,94 @@
+assertEquals(
+   $expected,
+   wfArrayPlus2d( $baseArray, $newValues ),
+   $testName
+   );
+   }
+
+   /**
+* Provider for testing wfArrayPlus2d
+*
+* @return array
+*/
+   public static function provideArrays() {
+   return array(
+   // target array, new values array, expected result
+   array(
+   array( 0 => '1dArray' ),
+   array( 1 => '1dArray' ),
+   array( 0 => '1dArray', 1 => '1dArray' ),
+   "Test simple union of two arrays with different 
keys",
+   ),
+   array(
+   array(
+   0 => array( 0 => '2dArray' ),
+   ),
+   array(
+   0 => array( 1 => '2dArray' ),
+   ),
+   array(
+   0 => array( 0 => '2dArray', 1 => 
'2dArray' ),
+   ),
+   "Test union of 2d arrays with different keys in 
the value array",
+   ),
+   array(
+ 

[MediaWiki-commits] [Gerrit] Implement wfArrayPlus2d which combines 2d arrays - change (mediawiki/core)

2015-08-27 Thread Florianschmidtwelzow (Code Review)
Florianschmidtwelzow has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/234325

Change subject: Implement wfArrayPlus2d which combines 2d arrays
..

Implement wfArrayPlus2d which combines 2d arrays

Moved the logic of ExtensionRegistrations array_plus_2d merge method out
to it's own global function wfArrayPlus2d, so any other function in mediawiki
core and it's extensions can use this method when they need to union
a 2d array.

Change-Id: I56afdf306e399a4a1505828ed76c60c1bfd033b6
---
M includes/GlobalFunctions.php
M includes/registration/ExtensionRegistry.php
A tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php
3 files changed, 132 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/25/234325/1

diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php
index 9d89633..b853d07 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -4273,3 +4273,28 @@
 
return true;
 }
+
+/**
+ * Merges two (possibly) 2 dimensional arrays into the target array 
($baseArray).
+ *
+ * Values that exist in both values will be combined with += (all values of 
the array
+ * of $newValues will be added to the values of the array of $baseArray, while 
values,
+ * that exists in both, the value of $baseArray will be used).
+ *
+ * @param array $baseArray The array where you want to add the values of 
$newValues to
+ * @param array $newValues An array with new values
+ * @return array The combined array
+ * @since 1.26
+ */
+function wfArrayPlus2d( array $baseArray, array $newValues ) {
+   // First merge items that are in both arrays
+   foreach ( $baseArray as $name = $groupVal ) {
+   if ( isset( $newValues[$name] ) ) {
+   $groupVal += $newValues[$name];
+   }
+   }
+   // Now add items that didn't exist yet
+   $baseArray += $newValues;
+
+   return $baseArray;
+}
diff --git a/includes/registration/ExtensionRegistry.php 
b/includes/registration/ExtensionRegistry.php
index b89518a..f838103 100644
--- a/includes/registration/ExtensionRegistry.php
+++ b/includes/registration/ExtensionRegistry.php
@@ -222,14 +222,7 @@
$GLOBALS[$key] = array_merge_recursive( 
$GLOBALS[$key], $val );
break;
case 'array_plus_2d':
-   // First merge items that are in both 
arrays
-   foreach ( $GLOBALS[$key] as $name = 
$groupVal ) {
-   if ( isset( $val[$name] ) ) {
-   $groupVal += 
$val[$name];
-   }
-   }
-   // Now add items that didn't exist yet
-   $GLOBALS[$key] += $val;
+   $GLOBALS[$key] = wfArrayPlus2d( 
$GLOBALS[$key], $val );
break;
case 'array_plus':
$GLOBALS[$key] = $val + $GLOBALS[$key];
diff --git a/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php 
b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php
new file mode 100644
index 000..309fc3f
--- /dev/null
+++ b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php
@@ -0,0 +1,106 @@
+?php
+/**
+ * @group GlobalFunctions
+ * @covers ::wfArrayPlus2d
+ */
+class WfArrayPlus2dTest extends MediaWikiTestCase {
+   /**
+* @dataProvider provideURLParts
+*/
+   public function testWfArrayPlus2d( $baseArray, $newValues, $expected, 
$testName ) {
+   $this-assertEquals(
+   $expected,
+   wfArrayPlus2d( $baseArray, $newValues ),
+   $testName
+   );
+   }
+
+   /**
+* Provider of URL parts for testing wfAssembleUrl()
+*
+* @return array
+*/
+   public static function provideURLParts() {
+   return array(
+   // target array, new values array, expected result
+   array(
+   array( 0 = '1dArray' ),
+   array( 1 = '1dArray' ),
+   array( 0 = '1dArray', 1 = '1dArray' ),
+   Test simple union of two arrays with different 
keys,
+   ),
+   array(
+   array(
+   0 = array( 0 = '2dArray' ),
+   ),
+   array(
+   0 = array( 1 = '2dArray' ),
+