Fixed SiteArray serialization
authorjeroendedauw <jeroendedauw@gmail.com>
Wed, 12 Dec 2012 19:00:03 +0000 (20:00 +0100)
committerjeroendedauw <jeroendedauw@gmail.com>
Wed, 12 Dec 2012 19:00:03 +0000 (20:00 +0100)
Change-Id: I9844236b8720d96f99aef788ab023c522f993045

includes/site/SiteArray.php
tests/phpunit/includes/libs/GenericArrayObjectTest.php
tests/phpunit/includes/site/SiteArrayTest.php

index ad57ed3..096a179 100644 (file)
@@ -202,4 +202,39 @@ class SiteArray extends GenericArrayObject implements SiteList {
                $this[] = $site;
        }
 
+       /**
+        * @see GenericArrayObject::getSerializationData
+        *
+        * @since 1.21
+        *
+        * @return array
+        */
+       protected function getSerializationData() {
+               return array_merge(
+                       parent::getSerializationData(),
+                       array(
+                               'internalIds' => $this->byInternalId,
+                               'globalIds' => $this->byGlobalId,
+                       )
+               );
+       }
+
+       /**
+        * @see GenericArrayObject::unserialize
+        *
+        * @since 1.21
+        *
+        * @param string $serialization
+        *
+        * @return array
+        */
+       public function unserialize( $serialization ) {
+               $serializationData = parent::unserialize( $serialization );
+
+               $this->byInternalId = $serializationData['internalIds'];
+               $this->byGlobalId = $serializationData['globalIds'];
+
+               return $serializationData;
+       }
+
 }
index 40a3965..c0f8a96 100644 (file)
@@ -241,4 +241,24 @@ abstract class GenericArrayObjectTest extends MediaWikiTestCase {
                } );
        }
 
+       /**
+        * @dataProvider instanceProvider
+        *
+        * @since 1.21
+        *
+        * @param GenericArrayObject $list
+        */
+       public function testSerialization( GenericArrayObject $list ) {
+               $serialization = serialize( $list );
+               $copy = unserialize( $serialization );
+
+               $this->assertEquals( $serialization, serialize( $copy ) );
+               $this->assertEquals( count( $list ), count( $copy ) );
+
+               $list = $list->getArrayCopy();
+               $copy = $copy->getArrayCopy();
+
+               $this->assertArrayEquals( $list, $copy, true, true );
+       }
+
 }
index 021691a..613f63f 100644 (file)
@@ -65,4 +65,28 @@ class SiteArrayTest extends GenericArrayObjectTest {
                return 'SiteArray';
        }
 
+       /**
+        * @dataProvider instanceProvider
+        *
+        * @since 1.21
+        *
+        * @param SiteArray $list
+        */
+       public function testSerializationMore( SiteArray $list ) {
+               $serialization = serialize( $list );
+               /**
+                * @var SiteArray $copy
+                */
+               $copy = unserialize( $serialization );
+
+               $this->assertArrayEquals( $list->getGlobalIdentifiers(), $copy->getGlobalIdentifiers() );
+
+               /**
+                * @var Site $site
+                */
+               foreach ( $list as $site ) {
+                       $this->assertTrue( $copy->hasInternalId( $site->getInternalId() ) );
+               }
+       }
+
 }
\ No newline at end of file