/** * @dataProvider snaksProvider */ public function testSnakSerializationRoundtrips(StatementList $statements) { $serializerFactory = new SerializerFactory(new DataValueSerializer()); $deserializerFactory = new DeserializerFactory(new DataValueDeserializer(), new BasicEntityIdParser()); $serialization = $serializerFactory->newStatementListSerializer()->serialize($statements); $newStatements = $deserializerFactory->newStatementListDeserializer()->deserialize($serialization); $this->assertEquals($statements, $newStatements); }
/** * @param string[] $params * @param Statement[] $statements */ public function doTestValidRequest(array $params, array $statements) { $statements = new StatementList($statements); $serializer = $this->serializerFactory->newStatementListSerializer(); $expected = $serializer->serialize($statements); list($resultArray, ) = $this->doApiRequest($params); $this->assertInternalType('array', $resultArray, 'top level element is an array'); $this->assertArrayHasKey('claims', $resultArray, 'top level element has a claims key'); // Assert that value mainsnaks have a datatype added foreach ($resultArray['claims'] as &$claimsByProperty) { foreach ($claimsByProperty as &$claimArray) { $this->assertArrayHasKey('datatype', $claimArray['mainsnak']); unset($claimArray['mainsnak']['datatype']); } } $this->assertEquals($expected, $resultArray['claims']); }
/** * Get serialized claims and add them to result * * @since 0.5 * * @param Statement[] $statements the labels to set in the result * @param array|string $path where the data is located * @param array|string $props a list of fields to include, or "all" */ public function addStatements(array $statements, $path, $props = 'all') { $serializer = $this->serializerFactory->newStatementListSerializer(); $values = $serializer->serialize(new StatementList($statements)); if (is_array($props) && !in_array('references', $props)) { $values = $this->modifier->modifyUsingCallback($values, '*/*', function ($array) { unset($array['references']); return $array; }); } $values = $this->getArrayWithAlteredClaims($values, '*/*/'); if ($this->addMetaData) { $values = $this->getClaimsArrayWithMetaData($values, '*/*/'); $values = $this->modifier->modifyUsingCallback($values, null, $this->callbackFactory->getCallbackToSetArrayType('kvp', 'id')); $values = $this->modifier->modifyUsingCallback($values, '*', $this->callbackFactory->getCallbackToIndexTags('claim')); } $values = $this->modifier->modifyUsingCallback($values, '*/*/mainsnak', $this->callbackFactory->getCallbackToAddDataTypeToSnak($this->dataTypeLookup)); if ($this->addMetaData) { ApiResult::setArrayType($values, 'kvp', 'id'); } $this->setList($path, 'claims', $values, 'property'); }