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
