/**
  * @dataProvider snaksProvider
  */
 public function testSnakSerializationRoundtrips(Statement $statement)
 {
     $serializerFactory = new SerializerFactory(new DataValueSerializer());
     $deserializerFactory = new DeserializerFactory(new DataValueDeserializer(), new BasicEntityIdParser());
     $serialization = $serializerFactory->newStatementSerializer()->serialize($statement);
     $newStatement = $deserializerFactory->newStatementDeserializer()->deserialize($serialization);
     $this->assertEquals($statement->getHash(), $newStatement->getHash());
 }
 /**
  * @dataProvider rankProvider
  */
 public function testRankSerialization($rank)
 {
     $statement = new Statement(new PropertyNoValueSnak(new PropertyId('P42')));
     $statement->setRank($rank);
     $factory = new SerializerFactory(new DataValueSerializer());
     $statementSerializer = $factory->newStatementSerializer();
     $serialization = $statementSerializer->serialize($statement);
     $rankSerializer = new StatementRankSerializer();
     $this->assertEquals($rank, $rankSerializer->deserialize($serialization['rank']), 'Roundtrip between rank serialization and unserialization 1');
     $this->assertEquals($serialization['rank'], $rankSerializer->serialize($rank), 'Roundtrip between rank serialization and unserialization 2');
 }
 /**
  * Get serialized claim and add it to result
  *
  * @param Statement $statement
  *
  * @since 0.5
  */
 public function addStatement(Statement $statement)
 {
     $serializer = $this->serializerFactory->newStatementSerializer();
     //TODO: this is currently only used to add a Claim as the top level structure,
     //      with a null path and a fixed name. Would be nice to also allow claims
     //      to be added to a list, using a path and a id key or index.
     $value = $serializer->serialize($statement);
     $value = $this->getArrayWithAlteredClaims($value);
     if ($this->addMetaData) {
         $value = $this->getClaimsArrayWithMetaData($value);
     }
     $value = $this->modifier->modifyUsingCallback($value, 'mainsnak', $this->callbackFactory->getCallbackToAddDataTypeToSnak($this->dataTypeLookup));
     $this->setValue(null, 'claim', $value);
 }
 /**
  * @param Statement|array $statement Native or serialized statement object.
  * @param ItemId $itemId
  * @param int $expectedCount
  * @param string $requestLabel A label to identify requests that are made in errors.
  * @param int|null $index
  * @param int|null $baserevid
  * @param string|null $error
  */
 private function makeRequest($statement, ItemId $itemId, $expectedCount, $requestLabel, $index = null, $baserevid = null, $error = null)
 {
     $serializerFactory = new SerializerFactory(new DataValueSerializer());
     $statementSerializer = $serializerFactory->newStatementSerializer();
     $statementDeserializer = WikibaseRepo::getDefaultInstance()->getStatementDeserializer();
     if ($statement instanceof Statement) {
         $serialized = $statementSerializer->serialize($statement);
     } else {
         $serialized = $statement;
         $statement = $statementDeserializer->deserialize($serialized);
     }
     $params = array('action' => 'wbsetclaim', 'claim' => FormatJson::encode($serialized));
     if (!is_null($index)) {
         $params['index'] = $index;
     }
     if (!is_null($baserevid)) {
         $params['baserevid'] = $baserevid;
     }
     $resultArray = $this->assertApiRequest($params, $error);
     if ($resultArray) {
         $this->assertValidResponse($resultArray);
         $this->assertStatementWasSet($statement, $itemId, $expectedCount, $requestLabel);
     }
 }