Merge "Fix for assertArrayEquals. Was throwing fatal for object elements"
authorAaron Schulz <aschulz@wikimedia.org>
Mon, 13 Aug 2012 20:09:10 +0000 (20:09 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 13 Aug 2012 20:09:10 +0000 (20:09 +0000)
1  2 
tests/phpunit/MediaWikiTestCase.php

@@@ -348,8 -348,6 +348,8 @@@ abstract class MediaWikiTestCase extend
         * the values given in the order of the columns in the $fields parameter.
         * Note that the rows are sorted by the columns given in $fields.
         *
 +       * @since 1.20
 +       *
         * @param $table String|Array the table(s) to query
         * @param $fields String|Array the columns to include in the result (and to sort by)
         * @param $condition String|Array "where" condition(s)
         */
        protected function assertArrayEquals( array $expected, array $actual, $ordered = false, $named = false ) {
                if ( !$ordered ) {
-                       asort( $expected );
-                       asort( $actual );
+                       $this->objectAssociativeSort( $expected );
+                       $this->objectAssociativeSort( $actual );
                }
  
                if ( !$named ) {
                );
        }
  
+       /**
+        * Does an associative sort that works for objects.
+        *
+        * @since 1.20
+        *
+        * @param array $array
+        */
+       protected function objectAssociativeSort( array &$array ) {
+               uasort(
+                       $array,
+                       function( $a, $b ) {
+                               return serialize( $a ) > serialize( $b ) ? 1 : -1;
+                       }
+               );
+       }
        /**
         * Utility function for eliminating all string keys from an array.
         * Useful to turn a database result row as returned by fetchRow() into
         * a pure indexed array.
         *
 -       * @static
 +       * @since 1.20
 +       *
         * @param $r mixed the array to remove string keys from.
         */
        protected static function stripStringKeys( &$r ) {
 -              if ( !is_array( $r ) ) return;
 +              if ( !is_array( $r ) ) {
 +                      return;
 +              }
  
                foreach ( $r as $k => $v ) {
 -                      if ( is_string( $k ) ) unset( $r[$k] );
 +                      if ( is_string( $k ) ) {
 +                              unset( $r[$k] );
 +                      }
                }
        }
 +
  }