From 232dfda61c0a4ae1d96ae6b242a664db6c0e9222 Mon Sep 17 00:00:00 2001 From: jeroendedauw Date: Thu, 24 Jan 2013 14:41:59 +0100 Subject: [PATCH] Implemented Serializable interface in Site Change-Id: I1d8394e0aa65e6ba16f1a1c1021bcae93ebb3e41 --- includes/site/Site.php | 52 ++++++++++++++++++++++-- tests/phpunit/includes/site/SiteTest.php | 31 +++++++------- 2 files changed, 65 insertions(+), 18 deletions(-) diff --git a/includes/site/Site.php b/includes/site/Site.php index b11f2b2180..d09c64d67f 100644 --- a/includes/site/Site.php +++ b/includes/site/Site.php @@ -26,7 +26,7 @@ * @license GNU GPL v2+ * @author Jeroen De Dauw < jeroendedauw@gmail.com > */ -class Site { +class Site implements Serializable { const TYPE_UNKNOWN = 'unknown'; const TYPE_MEDIAWIKI = 'mediawiki'; @@ -620,8 +620,6 @@ class Site { } } - // TODO: config - /** * @since 1.21 * @@ -639,6 +637,54 @@ class Site { return new Site(); } + /** + * @see Serializable::serialize + * + * @since 1.21 + * + * @return string + */ + public function serialize() { + $fields = array( + 'globalid' => $this->globalId, + 'type' => $this->type, + 'group' => $this->group, + 'source' => $this->source, + 'language' => $this->languageCode, + 'localids' => $this->localIds, + 'config' => $this->extraConfig, + 'data' => $this->extraData, + 'forward' => $this->forward, + 'internalid' => $this->internalId, + + ); + + return serialize( $fields ); + } + + /** + * @see Serializable::unserialize + * + * @since 1.21 + * + * @param string $serialized + */ + public function unserialize( $serialized ) { + $fields = unserialize( $serialized ); + + $this->__construct( $fields['type'] ); + + $this->setGlobalId( $fields['globalid'] ); + $this->setGroup( $fields['group'] ); + $this->setSource( $fields['source'] ); + $this->setLanguageCode( $fields['language'] ); + $this->localIds = $fields['localids']; + $this->setExtraConfig( $fields['config'] ); + $this->setExtraData( $fields['data'] ); + $this->setForward( $fields['forward'] ); + $this->setInternalId( $fields['internalid'] ); + } + } /** diff --git a/tests/phpunit/includes/site/SiteTest.php b/tests/phpunit/includes/site/SiteTest.php index 0336a51775..255e2de380 100644 --- a/tests/phpunit/includes/site/SiteTest.php +++ b/tests/phpunit/includes/site/SiteTest.php @@ -32,21 +32,7 @@ class SiteTest extends MediaWikiTestCase { public function instanceProvider() { - $instances = array(); - - $instances[] = new Site(); - - $site = new Site(); - $site->setGlobalId( 'enwiki' ); - $site->setInternalId( 42 ); - $instances[] = $site; - - $site = new MediaWikiSite(); - $site->setGlobalId( 'nlwiki' ); - $site->setLanguageCode( 'nl' ); - $instances[] = $site; - - return $this->arrayWrap( $instances ); + return $this->arrayWrap( TestSites::getSites() ); } /** @@ -264,4 +250,19 @@ class SiteTest extends MediaWikiTestCase { } } + /** + * @dataProvider instanceProvider + * @param Site $site + */ + public function testSerialization( Site $site ) { + $this->assertInstanceOf( 'Serializable', $site ); + + $serialization = serialize( $site ); + $newInstance = unserialize( $serialization ); + + $this->assertInstanceOf( 'Site', $newInstance ); + + $this->assertEquals( $serialization, serialize( $newInstance ) ); + } + } \ No newline at end of file -- 2.20.1