Addshore has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/73786


Change subject: Ask DeserializerFactory and Tests
......................................................................

Ask DeserializerFactory and Tests

Change-Id: I5413d7b2472c55d9c91c2200f2df811f2d5c1312
---
A Tests/Phpunit/DeserilaizerFactoryTest.php
R Tests/Phpunit/SerilaizerFactoryTest.php
A src/Ask/DeserializerFactory.php
R src/Ask/SerializerFactory.php
4 files changed, 246 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Ask 
refs/changes/86/73786/1

diff --git a/Tests/Phpunit/DeserilaizerFactoryTest.php 
b/Tests/Phpunit/DeserilaizerFactoryTest.php
new file mode 100644
index 0000000..bfb1150
--- /dev/null
+++ b/Tests/Phpunit/DeserilaizerFactoryTest.php
@@ -0,0 +1,113 @@
+<?php
+
+namespace Ask\Tests\Phpunit;
+
+use Ask\DeserializerFactory;
+use Ask\Language\Option\SortExpression;
+use Deserializers\Deserializer;
+
+/**
+ * @covers Ask\AskFactory
+ *
+ * @file
+ * @since 0.1
+ *
+ * @ingroup Ask
+ * @group Ask
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland < [email protected] >
+ */
+class DeserializerFactoryTest extends \PHPUnit_Framework_TestCase {
+
+       public function testCanGetQueryDeserializer() {
+               $askFactory = new DeserializerFactory();
+
+               $deserializer = $askFactory->newQueryDeserializer();
+
+               $object = array(
+                       'objectType' => 'query',
+                       'description' => array(
+                               'objectType' => 'description',
+                               'descriptionType' => 'conjunction',
+                               'value' => array(
+                                       'descriptions' => array()
+                               )
+                       ),
+                       'options' => array(),
+                       'selectionRequests' => array(),
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+       protected function assertDeserializerThatCanDeserializeObject( 
Deserializer $deserializer, $object ) {
+               $this->assertTrue( $deserializer->canDeserialize( $object ) );
+       }
+
+       public function testCanGetDescriptionDeserializer() {
+               $askFactory = new DeserializerFactory();
+               $dataValueFactory = 
$this->getMock('DataValues\dataValueFactory');
+
+               $deserializer = $askFactory->newDescriptionDeserializer( 
$dataValueFactory );
+
+               $object = array(
+                       'objectType' => 'description',
+                       'descriptionType' => 'anyValue',
+                       'value' => array()
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+       public function testCanGetSelectionRequestDeserializer() {
+               $askFactory = new DeserializerFactory();
+               $dataValueFactory = 
$this->getMock('DataValues\dataValueFactory');
+
+               $deserializer = $askFactory->newSelectionRequestDeserializer( 
$dataValueFactory );
+
+               $object = array(
+                       'objectType' => 'selectionRequest',
+                       'selectionRequestType' => 'subject',
+                       'value' => array(),
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+       public function testCanGetSortExpressionDeserializer() {
+               $askFactory = new DeserializerFactory();
+               $dataValueFactory = 
$this->getMock('DataValues\dataValueFactory');
+
+               $deserializer = $askFactory->newSortExpressionDeserializer( 
$dataValueFactory );
+
+               $object = array(
+                       'objectType' => 'sortExpression',
+                       'sortExpressionType' => 'propertyValue',
+                       'value' => array()
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+       public function testCanGetQueryOptionsDeserializer() {
+               $askFactory = new DeserializerFactory();
+               $dataValueFactory = 
$this->getMock('DataValues\dataValueFactory');
+
+               $deserializer = $askFactory->newQueryOptionsDeserializer( 
$dataValueFactory );
+
+               $object = array(
+                       'objectType' => 'queryOptions',
+                       'limit' => 100,
+                       'offset' => 42,
+                       'sort' => array(
+                               'expressions' => array(),
+                       )
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+
+}
diff --git a/Tests/Phpunit/AskFactoryTest.php 
b/Tests/Phpunit/SerilaizerFactoryTest.php
similarity index 74%
rename from Tests/Phpunit/AskFactoryTest.php
rename to Tests/Phpunit/SerilaizerFactoryTest.php
index 2e7ed03..f00cd35 100644
--- a/Tests/Phpunit/AskFactoryTest.php
+++ b/Tests/Phpunit/SerilaizerFactoryTest.php
@@ -2,7 +2,8 @@
 
 namespace Ask\Tests\Phpunit;
 
-use Ask\AskFactory;
+use Ask\SerializerFactory;
+use Deserializers\Deserializer;
 use Serializers\Serializer;
 
 /**
@@ -16,18 +17,19 @@
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland < [email protected] >
  */
-class AskFactoryTest extends \PHPUnit_Framework_TestCase {
+class SerilaizerFactoryTest extends \PHPUnit_Framework_TestCase {
 
        public function testCanGetQuerySerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
-               $querySerializer = $askFactory->newQuerySerializer();
+               $serializer = $askFactory->newQuerySerializer();
 
-               $query = $this->getMockBuilder( 'Ask\Language\Query' )
+               $object = $this->getMockBuilder( 'Ask\Language\Query' )
                        ->disableOriginalConstructor()->getMock();
 
-               $this->assertSerializerThatCanSerializeObject( 
$querySerializer, $query );
+               $this->assertSerializerThatCanSerializeObject( $serializer, 
$object );
        }
 
        protected function assertSerializerThatCanSerializeObject( Serializer 
$serializer, $object ) {
@@ -35,7 +37,7 @@
        }
 
        public function testCanGetDescriptionSerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
                $serializer = $askFactory->newDescriptionSerializer();
 
@@ -45,7 +47,7 @@
        }
 
        public function testCanGetSelectionRequestSerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
                $serializer = $askFactory->newSelectionRequestSerializer();
 
@@ -55,7 +57,7 @@
        }
 
        public function testCanGetSortExpressionSerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
                $serializer = $askFactory->newSortExpressionSerializer();
 
@@ -65,7 +67,7 @@
        }
 
        public function testCanGetQueryOptionsSerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
                $serializer = $askFactory->newQueryOptionsSerializer();
 
@@ -75,4 +77,5 @@
                $this->assertSerializerThatCanSerializeObject( $serializer, 
$object );
        }
 
+
 }
diff --git a/src/Ask/DeserializerFactory.php b/src/Ask/DeserializerFactory.php
new file mode 100644
index 0000000..2b13cd1
--- /dev/null
+++ b/src/Ask/DeserializerFactory.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace Ask;
+use Ask\Deserializers\DescriptionDeserializer;
+use Ask\Deserializers\QueryDeserializer;
+use Ask\Deserializers\QueryOptionsDeserializer;
+use Ask\Deserializers\SelectionRequestDeserializer;
+use Ask\Deserializers\SortExpressionDeserializer;
+use DataValues\DataValueFactory;
+use Deserializers\Deserializer;
+use Deserializers\DispatchingDeserializer;
+
+/**
+ * @since 0.1
+ *
+ * @file
+ * @ingroup Ask
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland < [email protected] >
+ */
+class DeserializerFactory {
+
+       /**
+        * Returns a Deserializer that can serialize Query objects.
+        *
+        * @since 0.1
+        *
+        * @return Deserializer
+        */
+       public function newQueryDeserializer() {
+               $dataValueFactory = new DataValueFactory();
+
+               $dispatchingDeserializer = new DispatchingDeserializer();
+
+               $dispatchingDeserializer->addDeserializer( 
$this->newDescriptionDeserializer( $dataValueFactory ) );
+               $dispatchingDeserializer->addDeserializer( 
$this->newSelectionRequestDeserializer( $dataValueFactory ) );
+               $dispatchingDeserializer->addDeserializer( 
$this->newQueryOptionsDeserializer( $dataValueFactory ) );
+
+               return new QueryDeserializer( $dispatchingDeserializer );
+       }
+
+       /**
+        * Returns a Deserializer that can serialize Description objects.
+        *
+        * @since 0.1
+        *
+        * @param $dataValueFactory
+        *
+        * @return Deserializer
+        */
+       public function newDescriptionDeserializer( $dataValueFactory ) {
+               return new DescriptionDeserializer( $dataValueFactory );
+       }
+
+       /**
+        * Returns a Deserializer that can serialize SelectionRequest objects.
+        *
+        * @since 0.1
+        *
+        * @param $dataValueFactory
+        *
+        * @return Deserializer
+        */
+       public function newSelectionRequestDeserializer( $dataValueFactory ) {
+               return new SelectionRequestDeserializer( $dataValueFactory );
+       }
+
+       /**
+        * Returns a Deserializer that can serialize SortExpression objects.
+        *
+        * @since 0.1
+        *
+        * @param $dataValueFactory
+        *
+        * @return Deserializer
+        */
+       public function newSortExpressionDeserializer( $dataValueFactory ) {
+               return new SortExpressionDeserializer( $dataValueFactory );
+       }
+
+       /**
+        * Returns a Deserializer that can serialize QueryOptions objects.
+        *
+        * @since 0.1
+        *
+        * @param $dataValueFactory
+        *
+        * @return Deserializer
+        */
+       public function newQueryOptionsDeserializer( $dataValueFactory ) {
+               return new QueryOptionsDeserializer( 
$this->newSortExpressionDeserializer( $dataValueFactory ) );
+       }
+
+}
diff --git a/src/Ask/AskFactory.php b/src/Ask/SerializerFactory.php
similarity index 73%
rename from src/Ask/AskFactory.php
rename to src/Ask/SerializerFactory.php
index 6f6445d..f46a17e 100644
--- a/src/Ask/AskFactory.php
+++ b/src/Ask/SerializerFactory.php
@@ -2,11 +2,14 @@
 
 namespace Ask;
 
+use Ask\Deserializers\DescriptionDeserializer;
 use Ask\Serializers\DescriptionSerializer;
 use Ask\Serializers\QueryOptionsSerializer;
 use Ask\Serializers\QuerySerializer;
 use Ask\Serializers\SelectionRequestSerializer;
 use Ask\Serializers\SortExpressionSerializer;
+use Deserializers\Deserializer;
+use Deserializers\DispatchingDeserializer;
 use Serializers\DispatchingSerializer;
 use Serializers\Serializer;
 
@@ -18,8 +21,9 @@
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland < [email protected] >
  */
-class AskFactory {
+class SerializerFactory {
 
        /**
         * Returns a Serializer that can serialize Query objects.
@@ -82,4 +86,23 @@
                return new QueryOptionsSerializer( 
$this->newSortExpressionSerializer() );
        }
 
+       /**
+        * Returns a Deserializer that can deserialize Query objects.
+        *
+        * @since 0.1
+        *
+        * @return Deserializer
+        */
+       public function newQueryDeserializer() {
+               $dispatchingDeserializer = new DispatchingDeserializer();
+
+               $dispatchingDeserializer->addDeserializer( 
$this->newDescriptionDeserializer() );
+
+               return new QuerySerializer( $dispatchingSerializer );
+       }
+
+       public function newDescriptionDeserializer() {
+               return new DescriptionDeserializer();
+       }
+
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/73786
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5413d7b2472c55d9c91c2200f2df811f2d5c1312
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Ask
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to