From 9e4761e3aa8f8cf51ae8cc1b164a7a9065cfe396 Mon Sep 17 00:00:00 2001 From: jeroendedauw Date: Wed, 12 Dec 2012 20:00:03 +0100 Subject: [PATCH] Fixed SiteArray serialization Change-Id: I9844236b8720d96f99aef788ab023c522f993045 --- includes/site/SiteArray.php | 35 +++++++++++++++++++ .../includes/libs/GenericArrayObjectTest.php | 20 +++++++++++ tests/phpunit/includes/site/SiteArrayTest.php | 24 +++++++++++++ 3 files changed, 79 insertions(+) diff --git a/includes/site/SiteArray.php b/includes/site/SiteArray.php index ad57ed37f5..096a17929c 100644 --- a/includes/site/SiteArray.php +++ b/includes/site/SiteArray.php @@ -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; + } + } diff --git a/tests/phpunit/includes/libs/GenericArrayObjectTest.php b/tests/phpunit/includes/libs/GenericArrayObjectTest.php index 40a3965fa9..c0f8a96ce1 100644 --- a/tests/phpunit/includes/libs/GenericArrayObjectTest.php +++ b/tests/phpunit/includes/libs/GenericArrayObjectTest.php @@ -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 ); + } + } diff --git a/tests/phpunit/includes/site/SiteArrayTest.php b/tests/phpunit/includes/site/SiteArrayTest.php index 021691a881..613f63f619 100644 --- a/tests/phpunit/includes/site/SiteArrayTest.php +++ b/tests/phpunit/includes/site/SiteArrayTest.php @@ -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 -- 2.20.1