diff --git a/README.md b/README.md index 73983dac..8f58909d 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,10 @@ and by [Jeroen De Dauw](https://www.mediawiki.org/wiki/User:Jeroen_De_Dauw) as [ ## Release notes +### 1.4.0 (dev) + +* Added support for showing the component version when loaded via MediaWiki + ### 1.3.0 (2015-01-28) * `FingerprintSerializer` now supports serializing `AliasGroupFallback`s and `TermFallback`s diff --git a/src/DeserializerFactory.php b/src/DeserializerFactory.php index b39be498..8999dc9c 100644 --- a/src/DeserializerFactory.php +++ b/src/DeserializerFactory.php @@ -16,6 +16,7 @@ use Wikibase\DataModel\Deserializers\SiteLinkDeserializer; use Wikibase\DataModel\Deserializers\SnakDeserializer; use Wikibase\DataModel\Deserializers\SnakListDeserializer; +use Wikibase\DataModel\Deserializers\StatementListDeserializer; use Wikibase\DataModel\Entity\EntityIdParser; /** @@ -54,8 +55,8 @@ public function __construct( Deserializer $dataValueDeserializer, EntityIdParser */ public function newEntityDeserializer() { return new DispatchingDeserializer( array( - new ItemDeserializer( $this->newEntityIdDeserializer(), $this->newFingerprintDeserializer(), $this->newClaimsDeserializer(), $this->newSiteLinkDeserializer() ), - new PropertyDeserializer( $this->newEntityIdDeserializer(), $this->newFingerprintDeserializer(), $this->newClaimsDeserializer() ) + new ItemDeserializer( $this->newEntityIdDeserializer(), $this->newFingerprintDeserializer(), $this->newStatementListDeserializer(), $this->newSiteLinkDeserializer() ), + new PropertyDeserializer( $this->newEntityIdDeserializer(), $this->newFingerprintDeserializer(), $this->newStatementListDeserializer() ) ) ); } @@ -77,6 +78,15 @@ public function newClaimsDeserializer() { return new ClaimsDeserializer( $this->newClaimDeserializer() ); } + /** + * Returns a Deserializer that can deserialize StatementList objects. + * + * @return Deserializer + */ + public function newStatementListDeserializer() { + return new StatementListDeserializer( $this->newClaimDeserializer() ); + } + /** * Returns a Deserializer that can deserialize Claim objects. * diff --git a/src/Deserializers/EntityDeserializer.php b/src/Deserializers/EntityDeserializer.php index c09d0680..83e0c223 100644 --- a/src/Deserializers/EntityDeserializer.php +++ b/src/Deserializers/EntityDeserializer.php @@ -6,7 +6,6 @@ use Deserializers\Exceptions\DeserializationException; use Deserializers\TypedObjectDeserializer; use Wikibase\DataModel\Entity\Entity; -use Wikibase\DataModel\Statement\StatementList; /** * Package private @@ -29,24 +28,25 @@ abstract class EntityDeserializer extends TypedObjectDeserializer { /** * @var Deserializer */ - private $claimsDeserializer; + private $statementListDeserializer; /** * @param string $entityType * @param Deserializer $entityIdDeserializer - * @param Deserializer $claimsDeserializer + * @param Deserializer $fingerprintDeserializer + * @param Deserializer $statementListDeserializer */ public function __construct( $entityType, Deserializer $entityIdDeserializer, Deserializer $fingerprintDeserializer, - Deserializer $claimsDeserializer + Deserializer $statementListDeserializer ) { parent::__construct( $entityType, 'type' ); $this->entityIdDeserializer = $entityIdDeserializer; $this->fingerprintDeserializer = $fingerprintDeserializer; - $this->claimsDeserializer = $claimsDeserializer; + $this->statementListDeserializer = $statementListDeserializer; } /** @@ -75,7 +75,7 @@ private function getDeserialized( array $serialization ) { $entity->setFingerprint( $this->fingerprintDeserializer->deserialize( $serialization ) ); $this->setIdFromSerialization( $serialization, $entity ); - $this->setClaimsFromSerialization( $serialization, $entity ); + $this->setStatementListFromSerialization( $serialization, $entity ); return $entity; } @@ -88,13 +88,12 @@ private function setIdFromSerialization( array $serialization, Entity $entity ) $entity->setId( $this->entityIdDeserializer->deserialize( $serialization['id'] ) ); } - private function setClaimsFromSerialization( array $serialization, Entity $entity ) { + private function setStatementListFromSerialization( array $serialization, Entity $entity ) { if ( !array_key_exists( 'claims', $serialization ) || !method_exists( $entity, 'setStatements' ) ) { return; } - $claims = $this->claimsDeserializer->deserialize( $serialization['claims'] ); - $statements = new StatementList( iterator_to_array( $claims ) ); + $statements = $this->statementListDeserializer->deserialize( $serialization['claims'] ); $entity->setStatements( $statements ); } diff --git a/src/Deserializers/StatementListDeserializer.php b/src/Deserializers/StatementListDeserializer.php new file mode 100644 index 00000000..a5fbfdb9 --- /dev/null +++ b/src/Deserializers/StatementListDeserializer.php @@ -0,0 +1,67 @@ + + */ +class StatementListDeserializer implements Deserializer { + + /** + * @var Deserializer + */ + private $statementDeserializer; + + /** + * @param Deserializer $statementDeserializer + */ + public function __construct( Deserializer $statementDeserializer ) { + $this->statementDeserializer = $statementDeserializer; + } + + /** + * @see Deserializer::deserialize + * + * @param mixed $serialization + * + * @return object + * @throws DeserializationException + */ + public function deserialize( $serialization ) { + $this->assertHasGoodFormat( $serialization ); + + return $this->getDeserialized( $serialization ); + } + + private function getDeserialized( array $serialization ) { + $statementList = new StatementList(); + + foreach( $serialization as $statementArray ) { + foreach( $statementArray as $statementSerialization ) { + $statementList->addStatement( $this->statementDeserializer->deserialize( $statementSerialization ) ); + } + } + + return $statementList; + } + + private function assertHasGoodFormat( $serialization ) { + if( !is_array( $serialization ) ) { + throw new DeserializationException( 'The StatementList serialization should be an array' ); + } + + foreach( $serialization as $statementArray ) { + if( !is_array( $statementArray ) ) { + throw new DeserializationException( 'The statements per property should be an array' ); + } + } + } + +} diff --git a/src/SerializerFactory.php b/src/SerializerFactory.php index ad550b34..d5cfbbe1 100644 --- a/src/SerializerFactory.php +++ b/src/SerializerFactory.php @@ -15,6 +15,7 @@ use Wikibase\DataModel\Serializers\SiteLinkSerializer; use Wikibase\DataModel\Serializers\SnakSerializer; use Wikibase\DataModel\Serializers\SnaksSerializer; +use Wikibase\DataModel\Serializers\StatementListSerializer; use Wikibase\DataModel\Serializers\TypedSnakSerializer; /** @@ -70,8 +71,8 @@ private function shouldUseObjectsForMaps() { public function newEntitySerializer() { $fingerprintSerializer = new FingerprintSerializer( $this->shouldUseObjectsForMaps() ); return new DispatchingSerializer( array( - new ItemSerializer( $fingerprintSerializer, $this->newClaimsSerializer(), $this->newSiteLinkSerializer(), $this->shouldUseObjectsForMaps() ), - new PropertySerializer( $fingerprintSerializer, $this->newClaimsSerializer() ), + new ItemSerializer( $fingerprintSerializer, $this->newStatementListSerializer(), $this->newSiteLinkSerializer(), $this->shouldUseObjectsForMaps() ), + new PropertySerializer( $fingerprintSerializer, $this->newStatementListSerializer() ), ) ); } @@ -93,6 +94,15 @@ public function newClaimsSerializer() { return new ClaimsSerializer( $this->newClaimSerializer(), $this->shouldUseObjectsForMaps() ); } + /** + * Returns a Serializer that can serialize StatementList objects. + * + * @return Serializer + */ + public function newStatementListSerializer() { + return new StatementListSerializer( $this->newClaimSerializer(), $this->shouldUseObjectsForMaps() ); + } + /** * Returns a Serializer that can serialize Claim objects. * diff --git a/src/Serializers/ItemSerializer.php b/src/Serializers/ItemSerializer.php index 57fdcb61..fcdd47be 100644 --- a/src/Serializers/ItemSerializer.php +++ b/src/Serializers/ItemSerializer.php @@ -6,7 +6,6 @@ use Serializers\Exceptions\SerializationException; use Serializers\Exceptions\UnsupportedObjectException; use Serializers\Serializer; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Item; /** @@ -26,7 +25,7 @@ class ItemSerializer implements DispatchableSerializer { /** * @var Serializer */ - private $claimsSerializer; + private $statementListSerializer; /** * @var Serializer @@ -40,13 +39,18 @@ class ItemSerializer implements DispatchableSerializer { /** * @param FingerprintSerializer $fingerprintSerializer - * @param Serializer $claimsSerializer + * @param Serializer $statementListSerializer * @param Serializer $siteLinkSerializer * @param bool $useObjectsForMaps */ - public function __construct( FingerprintSerializer $fingerprintSerializer, Serializer $claimsSerializer, Serializer $siteLinkSerializer, $useObjectsForMaps ) { + public function __construct( + FingerprintSerializer $fingerprintSerializer, + Serializer $statementListSerializer, + Serializer $siteLinkSerializer, + $useObjectsForMaps + ) { $this->fingerprintSerializer = $fingerprintSerializer; - $this->claimsSerializer = $claimsSerializer; + $this->statementListSerializer = $statementListSerializer; $this->siteLinkSerializer = $siteLinkSerializer; $this->useObjectsForMaps = $useObjectsForMaps; } @@ -87,16 +91,14 @@ private function getSerialized( Item $item ) { ); $this->fingerprintSerializer->addBasicsToSerialization( $item, $serialization ); - $this->addClaimsToSerialization( $item, $serialization ); + $this->addStatementListToSerialization( $item, $serialization ); $this->addSiteLinksToSerialization( $item, $serialization ); return $serialization; } - private function addClaimsToSerialization( Item $item, array &$serialization ) { - $claims = new Claims( $item->getClaims() ); - - $serialization['claims'] = $this->claimsSerializer->serialize( $claims ); + private function addStatementListToSerialization( Item $item, array &$serialization ) { + $serialization['claims'] = $this->statementListSerializer->serialize( $item->getStatements() ); } private function addSiteLinksToSerialization( Item $item, array &$serialization ) { diff --git a/src/Serializers/PropertySerializer.php b/src/Serializers/PropertySerializer.php index f20cb8ac..b149f7ad 100644 --- a/src/Serializers/PropertySerializer.php +++ b/src/Serializers/PropertySerializer.php @@ -6,7 +6,6 @@ use Serializers\Exceptions\SerializationException; use Serializers\Exceptions\UnsupportedObjectException; use Serializers\Serializer; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Property; /** @@ -26,15 +25,15 @@ class PropertySerializer implements DispatchableSerializer { /** * @var Serializer */ - private $claimsSerializer; + private $statementListSerializer; /** * @param FingerprintSerializer $fingerprintSerializer - * @param Serializer $claimsSerializer + * @param Serializer $statementListSerializer */ - public function __construct( FingerprintSerializer $fingerprintSerializer, Serializer $claimsSerializer ) { + public function __construct( FingerprintSerializer $fingerprintSerializer, Serializer $statementListSerializer ) { $this->fingerprintSerializer = $fingerprintSerializer; - $this->claimsSerializer = $claimsSerializer; + $this->statementListSerializer = $statementListSerializer; } /** @@ -74,15 +73,13 @@ private function getSerialized( Property $entity ) { ); $this->fingerprintSerializer->addBasicsToSerialization( $entity, $serialization ); - $this->addClaimsToSerialization( $entity, $serialization ); + $this->addStatementListToSerialization( $entity, $serialization ); return $serialization; } - private function addClaimsToSerialization( Property $entity, array &$serialization ) { - $claims = new Claims( $entity->getStatements() ); - - $serialization['claims'] = $this->claimsSerializer->serialize( $claims ); + private function addStatementListToSerialization( Property $entity, array &$serialization ) { + $serialization['claims'] = $this->statementListSerializer->serialize( $entity->getStatements() ); } } diff --git a/src/Serializers/StatementListSerializer.php b/src/Serializers/StatementListSerializer.php new file mode 100644 index 00000000..a9786f83 --- /dev/null +++ b/src/Serializers/StatementListSerializer.php @@ -0,0 +1,97 @@ + + */ +class StatementListSerializer implements DispatchableSerializer { + + /** + * @var Serializer + */ + protected $statementSerializer; + + /** + * @var bool + */ + protected $useObjectsForMaps; + + /** + * @param Serializer $statementSerializer + * @param bool $useObjectsForMaps + */ + public function __construct( Serializer $statementSerializer, $useObjectsForMaps ) { + $this->statementSerializer = $statementSerializer; + $this->useObjectsForMaps = $useObjectsForMaps; + } + + /** + * @see Serializer::isSerializerFor + * + * @param mixed $object + * + * @return bool + */ + public function isSerializerFor( $object ) { + return $object instanceof StatementList; + } + + /** + * @see Serializer::serialize + * + * @param mixed $object + * + * @return array + * @throws SerializationException + */ + public function serialize( $object ) { + if ( !$this->isSerializerFor( $object ) ) { + throw new UnsupportedObjectException( + $object, + 'StatementListSerializer can only serialize StatementList objects' + ); + } + + return $this->getSerialized( $object ); + } + + private function getSerialized( StatementList $statementList ) { + $serialization = array(); + + $byPropertyIdGrouper = new ByPropertyIdGrouper( $statementList ); + + foreach( $byPropertyIdGrouper->getPropertyIds() as $propertyId ) { + $serialization[$propertyId->getSerialization()] = $this->getSerializedStatements( + $byPropertyIdGrouper->getByPropertyId( $propertyId ) + ); + } + + if ( $this->useObjectsForMaps ) { + $serialization = (object)$serialization; + } + + return $serialization; + } + + private function getSerializedStatements( array $statements ) { + $serialization = array(); + + foreach ( $statements as $statement ) { + $serialization[] = $this->statementSerializer->serialize( $statement ); + } + + return $serialization; + } + +} diff --git a/tests/unit/DeserializerFactoryTest.php b/tests/unit/DeserializerFactoryTest.php index 6d9ca213..e8a7c7a1 100644 --- a/tests/unit/DeserializerFactoryTest.php +++ b/tests/unit/DeserializerFactoryTest.php @@ -55,6 +55,16 @@ public function testNewClaimsDeserializer() { ); } + public function testStatementListDeserializer() { + $this->assertDeserializesWithoutException( + $this->buildDeserializerFactory()->newStatementListDeserializer(), + array( + 'P42' => array( + ) + ) + ); + } + public function testNewClaimDeserializer() { $this->assertTrue( $this->buildDeserializerFactory()->newClaimDeserializer()->isDeserializerFor( array( diff --git a/tests/unit/Deserializers/EntityDeserializerTest.php b/tests/unit/Deserializers/EntityDeserializerTest.php index 12fbc0c0..fccf0b91 100644 --- a/tests/unit/Deserializers/EntityDeserializerTest.php +++ b/tests/unit/Deserializers/EntityDeserializerTest.php @@ -4,11 +4,11 @@ use Deserializers\Deserializer; use Wikibase\DataModel\Claim\Claim; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Item; use Wikibase\DataModel\Entity\ItemId; use Wikibase\DataModel\Snak\PropertyNoValueSnak; use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Statement\StatementList; use Wikibase\DataModel\Term\Fingerprint; /** @@ -34,12 +34,11 @@ public function buildDeserializer() { ->method( 'deserialize' ) ->will( $this->returnValue( new Fingerprint() ) ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement->setGuid( 'test' ); - $claim = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); - $claim->setGuid( 'test' ); - - $claimsDeserializerMock = $this->getMock( '\Deserializers\Deserializer' ); - $claimsDeserializerMock->expects( $this->any() ) + $statementListDeserializerMock = $this->getMock( '\Deserializers\Deserializer' ); + $statementListDeserializerMock->expects( $this->any() ) ->method( 'deserialize' ) ->with( $this->equalTo( array( 'P42' => array( @@ -53,12 +52,13 @@ public function buildDeserializer() { ) ) ) ) ) - ->will( $this->returnValue( new Claims( array( $claim ) ) ) ); + ->will( $this->returnValue( new StatementList( array( $statement ) ) ) ); $entityDeserializerMock = $this->getMockForAbstractClass( '\Wikibase\DataModel\Deserializers\EntityDeserializer', - array( 'item', $entityIdDeserializerMock, $fingerprintDeserializerMock, $claimsDeserializerMock ) + array( 'item', $entityIdDeserializerMock, $fingerprintDeserializerMock, $statementListDeserializerMock ) ); + $entityDeserializerMock->expects( $this->any() ) ->method( 'getPartiallyDeserialized' ) ->will( $this->returnValue( new Item() ) ); diff --git a/tests/unit/Deserializers/ItemDeserializerTest.php b/tests/unit/Deserializers/ItemDeserializerTest.php index 670d830b..521c635a 100644 --- a/tests/unit/Deserializers/ItemDeserializerTest.php +++ b/tests/unit/Deserializers/ItemDeserializerTest.php @@ -23,8 +23,7 @@ public function buildDeserializer() { ->method( 'deserialize' ) ->will( $this->returnValue( new Fingerprint() ) ); - $claimsDeserializerMock = $this->getMock( '\Deserializers\Deserializer' ); - + $statementListDeserializerMock = $this->getMock( '\Deserializers\Deserializer' ); $siteLinkDeserializerMock = $this->getMock( '\Deserializers\Deserializer' ); $siteLinkDeserializerMock->expects( $this->any() ) @@ -36,7 +35,7 @@ public function buildDeserializer() { ) ) ) ->will( $this->returnValue( new SiteLink( 'enwiki', 'Nyan Cat' ) ) ); - return new ItemDeserializer( $entityIdDeserializerMock, $fingerprintDeserializerMock, $claimsDeserializerMock, $siteLinkDeserializerMock ); + return new ItemDeserializer( $entityIdDeserializerMock, $fingerprintDeserializerMock, $statementListDeserializerMock, $siteLinkDeserializerMock ); } public function deserializableProvider() { diff --git a/tests/unit/Deserializers/PropertyDeserializerTest.php b/tests/unit/Deserializers/PropertyDeserializerTest.php index 58a20227..2a9e2786 100644 --- a/tests/unit/Deserializers/PropertyDeserializerTest.php +++ b/tests/unit/Deserializers/PropertyDeserializerTest.php @@ -3,11 +3,11 @@ namespace Tests\Wikibase\DataModel\Deserializers; use Wikibase\DataModel\Claim\Claim; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Deserializers\PropertyDeserializer; use Wikibase\DataModel\Entity\Property; use Wikibase\DataModel\Snak\PropertyNoValueSnak; use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Statement\StatementList; use Wikibase\DataModel\Term\Fingerprint; /** @@ -26,11 +26,11 @@ public function buildDeserializer() { ->method( 'deserialize' ) ->will( $this->returnValue( new Fingerprint() ) ); - $claim = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); - $claim->setGuid( 'test' ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement->setGuid( 'test' ); - $claimsDeserializerMock = $this->getMock( '\Deserializers\Deserializer' ); - $claimsDeserializerMock->expects( $this->any() ) + $statementListDeserializerMock = $this->getMock( '\Deserializers\Deserializer' ); + $statementListDeserializerMock->expects( $this->any() ) ->method( 'deserialize' ) ->with( $this->equalTo( array( 'P42' => array( @@ -44,10 +44,10 @@ public function buildDeserializer() { ) ) ) ) ) - ->will( $this->returnValue( new Claims( array( $claim ) ) ) ); + ->will( $this->returnValue( new StatementList( array( $statement ) ) ) ); - return new PropertyDeserializer( $entityIdDeserializerMock, $fingerprintDeserializerMock, $claimsDeserializerMock ); + return new PropertyDeserializer( $entityIdDeserializerMock, $fingerprintDeserializerMock, $statementListDeserializerMock ); } public function deserializableProvider() { diff --git a/tests/unit/Deserializers/StatementListDeserializerTest.php b/tests/unit/Deserializers/StatementListDeserializerTest.php new file mode 100644 index 00000000..dbc47dae --- /dev/null +++ b/tests/unit/Deserializers/StatementListDeserializerTest.php @@ -0,0 +1,129 @@ + + */ +class StatementListDeserializerTest extends DeserializerBaseTest { + + public function buildDeserializer() { + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement->setGuid( 'test' ); + + $statementDeserializerMock = $this->getMock( '\Deserializers\Deserializer' ); + $statementDeserializerMock->expects( $this->any() ) + ->method( 'deserialize' ) + ->with( $this->equalTo( array( + 'mainsnak' => array( + 'snaktype' => 'novalue', + 'property' => 'P42' + ), + 'type' => 'statement', + 'rank' => 'normal' + ) ) ) + ->will( $this->returnValue( $statement ) ); + + return new StatementListDeserializer( $statementDeserializerMock ); + } + + public function deserializableProvider() { + return array( + array( + array() + ), + array( + array( + 'P42' => array( + array( + 'mainsnak' => array( + 'snaktype' => 'novalue', + 'property' => 'P42' + ), + 'type' => 'statement', + 'rank' => 'normal' + ) + ) + ) + ), + array( + array( + 'P42' => array( + array( + 'mainsnak' => array( + 'snaktype' => 'novalue', + 'property' => 'P42' + ), + 'type' => 'statement', + 'rank' => 'normal' + ), + array( + 'mainsnak' => array( + 'snaktype' => 'novalue', + 'property' => 'P42' + ), + 'type' => 'statement', + 'rank' => 'normal' + ) + ) + ) + ), + ); + } + + public function nonDeserializableProvider() { + return array( + array( + 42 + ), + array( + array( + 'id' => 'P10' + ) + ), + array( + array( + 'type' => '42' + ) + ), + ); + } + + public function deserializationProvider() { + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement->setGuid( 'test' ); + + return array( + array( + new StatementList(), + array() + ), + array( + new StatementList( array( + $statement + ) ), + array( + 'P42' => array( + array( + 'mainsnak' => array( + 'snaktype' => 'novalue', + 'property' => 'P42' + ), + 'type' => 'statement', + 'rank' => 'normal' + ) + ) + ) + ), + ); + } +} diff --git a/tests/unit/SerializerFactoryTest.php b/tests/unit/SerializerFactoryTest.php index 18abe0b7..770f8c5e 100644 --- a/tests/unit/SerializerFactoryTest.php +++ b/tests/unit/SerializerFactoryTest.php @@ -15,6 +15,7 @@ use Wikibase\DataModel\Snak\PropertyNoValueSnak; use Wikibase\DataModel\Snak\SnakList; use Wikibase\DataModel\Snak\TypedSnak; +use Wikibase\DataModel\Statement\StatementList; /** * @licence GNU GPL v2+ @@ -57,6 +58,13 @@ public function testNewClaimsSerializer() { ); } + public function testNewStatementListSerializer() { + $this->assertSerializesWithoutException( + $this->buildSerializerFactory()->newStatementListSerializer(), + new StatementList() + ); + } + public function testNewClaimSerializer() { $this->assertSerializesWithoutException( $this->buildSerializerFactory()->newClaimSerializer(), diff --git a/tests/unit/Serializers/FingerprintSerializerTest.php b/tests/unit/Serializers/FingerprintSerializerTest.php index 422cd7cf..77dd6ae9 100644 --- a/tests/unit/Serializers/FingerprintSerializerTest.php +++ b/tests/unit/Serializers/FingerprintSerializerTest.php @@ -3,12 +3,12 @@ namespace Tests\Wikibase\DataModel\Serializers; use stdClass; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Item; use Wikibase\DataModel\Entity\ItemId; use Wikibase\DataModel\Serializers\FingerprintSerializer; use Wikibase\DataModel\Serializers\ItemSerializer; use Wikibase\DataModel\Snak\PropertyNoValueSnak; +use Wikibase\DataModel\Statement\StatementList; use Wikibase\DataModel\Term\AliasGroupFallback; use Wikibase\DataModel\Term\TermFallback; @@ -22,10 +22,10 @@ class FingerprintSerializerTest extends SerializerBaseTest { protected function buildSerializer() { - $claimsSerializerMock = $this->getMock( '\Serializers\Serializer' ); - $claimsSerializerMock->expects( $this->any() ) + $statementListSerializerMock = $this->getMock( '\Serializers\Serializer' ); + $statementListSerializerMock->expects( $this->any() ) ->method( 'serialize' ) - ->with( $this->equalTo( new Claims() ) ) + ->with( $this->equalTo( new StatementList() ) ) ->will( $this->returnValue( array() ) ); $siteLinkSerializerMock = $this->getMock( '\Serializers\Serializer' ); @@ -34,7 +34,7 @@ protected function buildSerializer() { $entitySerializer = new FingerprintSerializer( false ); - return new ItemSerializer( $entitySerializer, $claimsSerializerMock, $siteLinkSerializerMock, false ); + return new ItemSerializer( $entitySerializer, $statementListSerializerMock, $siteLinkSerializerMock, false ); } public function serializableProvider() { diff --git a/tests/unit/Serializers/ItemSerializerTest.php b/tests/unit/Serializers/ItemSerializerTest.php index 261ecf89..9f978841 100644 --- a/tests/unit/Serializers/ItemSerializerTest.php +++ b/tests/unit/Serializers/ItemSerializerTest.php @@ -3,13 +3,13 @@ namespace Tests\Wikibase\DataModel\Serializers; use stdClass; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Item; use Wikibase\DataModel\Entity\Property; use Wikibase\DataModel\Serializers\FingerprintSerializer; use Wikibase\DataModel\Serializers\ItemSerializer; use Wikibase\DataModel\SiteLink; use Wikibase\DataModel\Snak\PropertyNoValueSnak; +use Wikibase\DataModel\Statement\StatementList; /** * @covers Wikibase\DataModel\Serializers\ItemSerializer @@ -21,11 +21,11 @@ class ItemSerializerTest extends SerializerBaseTest { protected function buildSerializer() { - $claimsSerializerMock = $this->getMock( '\Serializers\Serializer' ); - $claimsSerializerMock->expects( $this->any() ) + $statementListSerializerMock = $this->getMock( '\Serializers\Serializer' ); + $statementListSerializerMock->expects( $this->any() ) ->method( 'serialize' ) - ->will( $this->returnCallback( function( Claims $claims ) { - if ( $claims->isEmpty() ) { + ->will( $this->returnCallback( function( StatementList $statementList ) { + if ( $statementList->isEmpty() ) { return array(); } @@ -55,7 +55,7 @@ protected function buildSerializer() { $fingerprintSerializer = new FingerprintSerializer( false ); - return new ItemSerializer( $fingerprintSerializer, $claimsSerializerMock, $siteLinkSerializerMock, false ); + return new ItemSerializer( $fingerprintSerializer, $statementListSerializerMock, $siteLinkSerializerMock, false ); } public function serializableProvider() { @@ -144,10 +144,10 @@ public function serializationProvider() { } public function testItemSerializerWithOptionObjectsForMaps() { - $claimsSerializerMock = $this->getMock( '\Serializers\Serializer' ); - $claimsSerializerMock->expects( $this->any() ) + $statementListSerializerMock = $this->getMock( '\Serializers\Serializer' ); + $statementListSerializerMock->expects( $this->any() ) ->method( 'serialize' ) - ->with( $this->equalTo( new Claims() ) ) + ->with( $this->equalTo( new StatementList() ) ) ->will( $this->returnValue( array() ) ); $siteLinkSerializerMock = $this->getMock( '\Serializers\Serializer' ); @@ -162,7 +162,7 @@ public function testItemSerializerWithOptionObjectsForMaps() { $fingerprintSerializer = new FingerprintSerializer( false ); - $serializer = new ItemSerializer( $fingerprintSerializer, $claimsSerializerMock, $siteLinkSerializerMock, true ); + $serializer = new ItemSerializer( $fingerprintSerializer, $statementListSerializerMock, $siteLinkSerializerMock, true ); $item = new Item(); $item->addSiteLink( new SiteLink( 'enwiki', 'Nyan Cat' ) ); diff --git a/tests/unit/Serializers/PropertySerializerTest.php b/tests/unit/Serializers/PropertySerializerTest.php index 46fd8d9d..4cd9a8bd 100644 --- a/tests/unit/Serializers/PropertySerializerTest.php +++ b/tests/unit/Serializers/PropertySerializerTest.php @@ -2,12 +2,12 @@ namespace Tests\Wikibase\DataModel\Serializers; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\Item; use Wikibase\DataModel\Entity\Property; use Wikibase\DataModel\Serializers\FingerprintSerializer; use Wikibase\DataModel\Serializers\PropertySerializer; use Wikibase\DataModel\Snak\PropertyNoValueSnak; +use Wikibase\DataModel\Statement\StatementList; /** * @covers Wikibase\DataModel\Serializers\PropertySerializer @@ -18,11 +18,11 @@ class PropertySerializerTest extends SerializerBaseTest { protected function buildSerializer() { - $claimsSerializerMock = $this->getMock( 'Serializers\Serializer' ); - $claimsSerializerMock->expects( $this->any() ) + $statementListSerializerMock = $this->getMock( 'Serializers\Serializer' ); + $statementListSerializerMock->expects( $this->any() ) ->method( 'serialize' ) - ->will( $this->returnCallback( function( Claims $claims ) { - if ( $claims->isEmpty() ) { + ->will( $this->returnCallback( function( StatementList $statementList ) { + if ( $statementList->isEmpty() ) { return array(); } @@ -42,7 +42,7 @@ protected function buildSerializer() { $fingerprintSerializer = new FingerprintSerializer( false ); - return new PropertySerializer( $fingerprintSerializer, $claimsSerializerMock ); + return new PropertySerializer( $fingerprintSerializer, $statementListSerializerMock ); } public function serializableProvider() { diff --git a/tests/unit/Serializers/StatementListSerializerTest.php b/tests/unit/Serializers/StatementListSerializerTest.php new file mode 100644 index 00000000..5b4affde --- /dev/null +++ b/tests/unit/Serializers/StatementListSerializerTest.php @@ -0,0 +1,122 @@ + + */ +class StatementListSerializerTest extends SerializerBaseTest { + + protected function buildSerializer() { + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement->setGuid( 'test' ); + + $statementSerializerMock = $this->getMock( '\Serializers\Serializer' ); + $statementSerializerMock->expects( $this->any() ) + ->method( 'serialize' ) + ->with( $this->equalTo( $statement ) ) + ->will( $this->returnValue( array( + 'mainsnak' => array( + 'snaktype' => 'novalue', + 'property' => 'P42' + ), + 'type' => 'statement', + 'rank' => 'normal' + ) ) ); + + return new StatementListSerializer( $statementSerializerMock, false ); + } + + public function serializableProvider() { + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement->setGuid( 'test' ); + + return array( + array( + new StatementList() + ), + array( + new StatementList( array( + $statement + ) ) + ), + ); + } + + public function nonSerializableProvider() { + return array( + array( + 5 + ), + array( + array() + ), + array( + new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ) + ), + ); + } + + public function serializationProvider() { + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement->setGuid( 'test' ); + + return array( + array( + array(), + new StatementList() + ), + array( + array( + 'P42' => array( + array( + 'mainsnak' => array( + 'snaktype' => 'novalue', + 'property' => 'P42' + ), + 'type' => 'statement', + 'rank' => 'normal' + ) + ) + ), + new StatementList( array( + $statement + ) ) + ), + ); + } + + public function testStatementListSerializerWithOptionObjectsForMaps() { + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement->setGuid( 'test' ); + $statementSerializerMock = $this->getMock( '\Serializers\Serializer' ); + $statementSerializerMock->expects( $this->any() ) + ->method( 'serialize' ) + ->with( $this->equalTo( $statement ) ) + ->will( $this->returnValue( array( + 'mockedsuff' => array(), + 'type' => 'statement', + ) ) ); + $serializer = new StatementListSerializer( $statementSerializerMock, true ); + + $statementList = new StatementList( array( $statement ) ); + + $serial = new stdClass(); + $serial->P42 = array( array( + 'mockedsuff' => array(), + 'type' => 'statement', + ) ); + $this->assertEquals( $serial, $serializer->serialize( $statementList ) ); + } + +}