Jeroen De Dauw has submitted this change and it was merged.
Change subject: Ask DeserializerFactory and Tests
......................................................................
Ask DeserializerFactory and Tests
Change-Id: I5413d7b2472c55d9c91c2200f2df811f2d5c1312
---
M Tests/Integration/Serialization/QuerySerialializationTest.php
A Tests/Phpunit/DeserilaizerFactoryTest.php
R Tests/Phpunit/SerializerFactoryTest.php
A src/Ask/DeserializerFactory.php
R src/Ask/SerializerFactory.php
5 files changed, 227 insertions(+), 13 deletions(-)
Approvals:
Jeroen De Dauw: Looks good to me, approved
jenkins-bot: Verified
diff --git a/Tests/Integration/Serialization/QuerySerialializationTest.php
b/Tests/Integration/Serialization/QuerySerialializationTest.php
index 2685a4e..3bc1600 100644
--- a/Tests/Integration/Serialization/QuerySerialializationTest.php
+++ b/Tests/Integration/Serialization/QuerySerialializationTest.php
@@ -2,7 +2,7 @@
namespace Ask\Tests\Integration\Serialization;
-use Ask\AskFactory;
+use Ask\SerializerFactory;
use Ask\Language\Description\AnyValue;
use Ask\Language\Description\Conjunction;
use Ask\Language\Description\SomeProperty;
@@ -155,7 +155,7 @@
}
protected function getQuerySerializer() {
- $askFactory = new AskFactory();
+ $askFactory = new SerializerFactory();
return $askFactory->newQuerySerializer();
}
diff --git a/Tests/Phpunit/DeserilaizerFactoryTest.php
b/Tests/Phpunit/DeserilaizerFactoryTest.php
new file mode 100644
index 0000000..d03b9ca
--- /dev/null
+++ b/Tests/Phpunit/DeserilaizerFactoryTest.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace Ask\Tests\Phpunit;
+
+use Ask\DeserializerFactory;
+use Ask\Language\Option\SortExpression;
+use DataValues\DataValueFactory;
+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() {
+ $dataValueFactory =
$this->getMock('DataValues\DataValueFactory');
+ $askFactory = new DeserializerFactory( $dataValueFactory );
+
+ $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() {
+ $dataValueFactory =
$this->getMock('DataValues\DataValueFactory');
+ $askFactory = new DeserializerFactory( $dataValueFactory );
+
+ $deserializer = $askFactory->newDescriptionDeserializer(
$dataValueFactory );
+
+ $object = array(
+ 'objectType' => 'description',
+ 'descriptionType' => 'anyValue',
+ 'value' => array()
+ );
+
+ $this->assertDeserializerThatCanDeserializeObject(
$deserializer, $object );
+ }
+
+ public function testCanGetSelectionRequestDeserializer() {
+ $dataValueFactory =
$this->getMock('DataValues\DataValueFactory');
+ $askFactory = new DeserializerFactory( $dataValueFactory );
+
+ $deserializer = $askFactory->newSelectionRequestDeserializer(
$dataValueFactory );
+
+ $object = array(
+ 'objectType' => 'selectionRequest',
+ 'selectionRequestType' => 'subject',
+ 'value' => array(),
+ );
+
+ $this->assertDeserializerThatCanDeserializeObject(
$deserializer, $object );
+ }
+
+ public function testCanGetSortExpressionDeserializer() {
+ $dataValueFactory =
$this->getMock('DataValues\DataValueFactory');
+ $askFactory = new DeserializerFactory( $dataValueFactory );
+
+ $deserializer = $askFactory->newSortExpressionDeserializer(
$dataValueFactory );
+
+ $object = array(
+ 'objectType' => 'sortExpression',
+ 'sortExpressionType' => 'propertyValue',
+ 'value' => array()
+ );
+
+ $this->assertDeserializerThatCanDeserializeObject(
$deserializer, $object );
+ }
+
+ public function testCanGetQueryOptionsDeserializer() {
+ $dataValueFactory =
$this->getMock('DataValues\DataValueFactory');
+ $askFactory = new DeserializerFactory( $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/SerializerFactoryTest.php
similarity index 75%
rename from Tests/Phpunit/AskFactoryTest.php
rename to Tests/Phpunit/SerializerFactoryTest.php
index 2e7ed03..c49f2f3 100644
--- a/Tests/Phpunit/AskFactoryTest.php
+++ b/Tests/Phpunit/SerializerFactoryTest.php
@@ -2,7 +2,7 @@
namespace Ask\Tests\Phpunit;
-use Ask\AskFactory;
+use Ask\SerializerFactory;
use Serializers\Serializer;
/**
@@ -16,18 +16,19 @@
*
* @licence GNU GPL v2+
* @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland < [email protected] >
*/
-class AskFactoryTest extends \PHPUnit_Framework_TestCase {
+class SerializerFactoryTest 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 +36,7 @@
}
public function testCanGetDescriptionSerializer() {
- $askFactory = new AskFactory();
+ $askFactory = new SerializerFactory();
$serializer = $askFactory->newDescriptionSerializer();
@@ -45,7 +46,7 @@
}
public function testCanGetSelectionRequestSerializer() {
- $askFactory = new AskFactory();
+ $askFactory = new SerializerFactory();
$serializer = $askFactory->newSelectionRequestSerializer();
@@ -55,7 +56,7 @@
}
public function testCanGetSortExpressionSerializer() {
- $askFactory = new AskFactory();
+ $askFactory = new SerializerFactory();
$serializer = $askFactory->newSortExpressionSerializer();
@@ -65,7 +66,7 @@
}
public function testCanGetQueryOptionsSerializer() {
- $askFactory = new AskFactory();
+ $askFactory = new SerializerFactory();
$serializer = $askFactory->newQueryOptionsSerializer();
@@ -75,4 +76,5 @@
$this->assertSerializerThatCanSerializeObject( $serializer,
$object );
}
+
}
diff --git a/src/Ask/DeserializerFactory.php b/src/Ask/DeserializerFactory.php
new file mode 100644
index 0000000..f5cbec8
--- /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 {
+
+ protected $dataValueFactory;
+
+ public function __construct( DataValueFactory $dataValueFactory ) {
+ $this->dataValueFactory = $dataValueFactory;
+ }
+
+ /**
+ * Returns a Deserializer that can serialize Query objects.
+ *
+ * @since 0.1
+ *
+ * @return Deserializer
+ */
+ public function newQueryDeserializer() {
+
+
+ $dispatchingDeserializer = new DispatchingDeserializer();
+
+ $dispatchingDeserializer->addDeserializer(
$this->newDescriptionDeserializer() );
+ $dispatchingDeserializer->addDeserializer(
$this->newSelectionRequestDeserializer() );
+ $dispatchingDeserializer->addDeserializer(
$this->newSortExpressionDeserializer() );
+ $dispatchingDeserializer->addDeserializer(
$this->newQueryOptionsDeserializer() );
+
+ return new QueryDeserializer( $dispatchingDeserializer );
+ }
+
+ /**
+ * Returns a Deserializer that can serialize Description objects.
+ *
+ * @since 0.1
+ *
+ * @return Deserializer
+ */
+ public function newDescriptionDeserializer() {
+ return new DescriptionDeserializer( $this->dataValueFactory );
+ }
+
+ /**
+ * Returns a Deserializer that can serialize SelectionRequest objects.
+ *
+ * @since 0.1
+ *
+ * @return Deserializer
+ */
+ public function newSelectionRequestDeserializer() {
+ return new SelectionRequestDeserializer(
$this->dataValueFactory );
+ }
+
+ /**
+ * Returns a Deserializer that can serialize SortExpression objects.
+ *
+ * @since 0.1
+ *
+ * @return Deserializer
+ */
+ public function newSortExpressionDeserializer() {
+ return new SortExpressionDeserializer( $this->dataValueFactory
);
+ }
+
+ /**
+ * Returns a Deserializer that can serialize QueryOptions objects.
+ *
+ * @since 0.1
+ *
+ * @return Deserializer
+ */
+ public function newQueryOptionsDeserializer() {
+ return new QueryOptionsDeserializer(
$this->newSortExpressionDeserializer( $this->dataValueFactory ) );
+ }
+
+}
diff --git a/src/Ask/AskFactory.php b/src/Ask/SerializerFactory.php
similarity index 95%
rename from src/Ask/AskFactory.php
rename to src/Ask/SerializerFactory.php
index 6f6445d..49fb46a 100644
--- a/src/Ask/AskFactory.php
+++ b/src/Ask/SerializerFactory.php
@@ -18,8 +18,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.
--
To view, visit https://gerrit.wikimedia.org/r/73786
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I5413d7b2472c55d9c91c2200f2df811f2d5c1312
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Ask
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>
Gerrit-Reviewer: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits