Implemented Serializable interface in Site
authorjeroendedauw <jeroendedauw@gmail.com>
Thu, 24 Jan 2013 13:41:59 +0000 (14:41 +0100)
committerjeroendedauw <jeroendedauw@gmail.com>
Thu, 24 Jan 2013 13:41:59 +0000 (14:41 +0100)
Change-Id: I1d8394e0aa65e6ba16f1a1c1021bcae93ebb3e41

includes/site/Site.php
tests/phpunit/includes/site/SiteTest.php

index b11f2b2..d09c64d 100644 (file)
@@ -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'] );
+       }
+
 }
 
 /**
index 0336a51..255e2de 100644 (file)
 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