public function deserializationProvider()
 {
     $serializations = array();
     $serializations[] = array(new Statement(new PropertyNoValueSnak(42)), array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'claim'));
     $serializations[] = array(new Statement(new PropertyNoValueSnak(42)), array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement'));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setGuid('q42');
     $serializations[] = array($statement, array('id' => 'q42', 'mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'claim'));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setRank(Statement::RANK_PREFERRED);
     $serializations[] = array($statement, array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'preferred'));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setRank(Statement::RANK_NORMAL);
     $serializations[] = array($statement, array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'normal'));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setRank(Statement::RANK_DEPRECATED);
     $serializations[] = array($statement, array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'deprecated'));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setQualifiers(new SnakList(array()));
     $serializations[] = array($statement, array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'normal'));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setQualifiers(new SnakList(array(new PropertyNoValueSnak(42))));
     $serializations[] = array($statement, array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'qualifiers' => array('P42' => array(array('snaktype' => 'novalue', 'property' => 'P42'))), 'type' => 'statement', 'rank' => 'normal'));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setReferences(new ReferenceList());
     $serializations[] = array($statement, array('mainsnak' => array('snaktype' => 'novalue', 'property' => "P42"), 'references' => array(), 'type' => 'statement', 'rank' => 'normal'));
     return $serializations;
 }
Example #2
0
 /**
  * @param Snak $mainSnak
  * @param Snak[]|SnakList|null $qualifiers
  * @param Reference[]|ReferenceList|null $references
  * @param string|null $guid
  */
 public function addNewStatement(Snak $mainSnak, $qualifiers = null, $references = null, $guid = null)
 {
     $qualifiers = is_array($qualifiers) ? new SnakList($qualifiers) : $qualifiers;
     $references = is_array($references) ? new ReferenceList($references) : $references;
     $statement = new Statement($mainSnak, $qualifiers, $references);
     $statement->setGuid($guid);
     $this->addStatement($statement);
 }
 public function snaksProvider()
 {
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setGuid('test');
     $statement2 = new Statement(new PropertyNoValueSnak(42));
     $statement2->setGuid('test2');
     return array(array(new StatementList()), array(new StatementList(array($statement))), array(new StatementList(array($statement, $statement2))));
 }
 /**
  * @param Snak $mainSnak
  *
  * @return Statement
  */
 private function makeStatement(Snak $mainSnak)
 {
     static $guidCounter = 0;
     $guidCounter++;
     $statement = new Statement($mainSnak);
     $statement->setGuid('EntityViewTest$' . $guidCounter);
     return $statement;
 }
 private function addStatements(Item $item)
 {
     $statement = new Statement(new PropertyValueSnak(42, new StringValue('kittens')));
     $statement->setGuid('first guid');
     $item->getStatements()->addStatement($statement);
     $statement = new Statement(new PropertyNoValueSnak(23));
     $statement->setGuid('second guid');
     $item->getStatements()->addStatement($statement);
 }
 public function testReturnsFalseForVerboseStatementWithoutReferences()
 {
     $statement = new Statement(new PropertyValueSnak(42, new StringValue('\\o/')));
     $statement->setGuid('kittens of doom');
     $statement->setRank(Statement::RANK_PREFERRED);
     $statement->setQualifiers(new SnakList(array(new PropertyValueSnak(1, new StringValue('wee')), new PropertyValueSnak(2, new StringValue('woo')), new PropertyValueSnak(3, new StringValue('waa')))));
     $filter = new ReferencedStatementFilter();
     $this->assertFalse($filter->statementMatches($statement));
 }
Example #7
0
 private function makeStatement(Snak $mainSnak, $guid = null)
 {
     if ($guid === null) {
         $this->guidCounter++;
         $guid = 'TEST$statement-' . $this->guidCounter;
     }
     $claim = new Statement($mainSnak);
     $claim->setGuid($guid);
     return $claim;
 }
 public function testLabelLookupFallsBackToId()
 {
     $labelLookup = $this->getMock('Queryr\\Resources\\Builders\\ResourceLabelLookup');
     $labelLookup->expects($this->any())->method('getLabelByIdAndLanguage')->will($this->returnValue(null));
     $statement = new Statement(new PropertyValueSnak(42, new EntityIdValue(new ItemId('Q1337'))));
     $statement->setGuid('first guid');
     $builder = new SimpleStatementsBuilder('en', $labelLookup);
     $simpleStatements = $builder->buildFromStatements(new StatementList([$statement]));
     $expected = SimpleStatement::newInstance()->withPropertyName('P42')->withPropertyId(new PropertyId('P42'))->withType('string')->withValues([new StringValue('Q1337')]);
     $this->assertEquals([$expected], $simpleStatements);
 }
 public function testLabelLookupFallsBackToId()
 {
     $labelLookup = $this->getMock(LabelLookup::class);
     $labelLookup->expects($this->any())->method('getLabelByIdAndLanguage')->will($this->returnValue(null));
     $statement = new Statement(new PropertyValueSnak(42, new EntityIdValue(new ItemId('Q1337'))));
     $statement->setGuid('first guid');
     $builder = new SimpleStatementsBuilder('en', $labelLookup, new UrlBuilder('http://test'));
     $simpleStatements = $builder->buildFromStatements(new StatementList([$statement]));
     $expected = SimpleStatement::newInstance()->withPropertyName('P42')->withPropertyId(new PropertyId('P42'))->withPropertyUrl('http://test/properties/P42')->withType('queryr-entity-identity')->withValues([new EntityIdentityValue(new ItemId('Q1337'), 'Q1337', 'http://test/items/Q1337')]);
     $this->assertEquals([$expected], $simpleStatements);
 }
 public function testStatementListSerializerWithOptionObjectsForMaps()
 {
     $statement = new Statement(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));
 }
 public function testGetStatementFromEntity()
 {
     $helper = $this->getNewInstance();
     $item = new Item(new ItemId('Q42'));
     $snak = new PropertyValueSnak(2754236, new StringValue('test'));
     $statement = new Statement($snak);
     $statement->setGuid('q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F');
     $item->getStatements()->addStatement($statement);
     $guid = $statement->getGuid();
     $this->assertEquals($statement, $helper->getStatementFromEntity($guid, $item));
     $this->setExpectedException('\\UsageException');
     $helper->getStatementFromEntity('q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0N', $item);
 }
 /**
  * @see ChangeOp::apply
  *
  * @param Entity $entity
  * @param Summary|null $summary
  *
  * @throws ChangeOpException
  */
 public function apply(Entity $entity, Summary $summary = null)
 {
     if ($this->statement->getGuid() === null) {
         $this->statement->setGuid($this->guidGenerator->newGuid($entity->getId()));
     }
     $guid = $this->guidParser->parse($this->statement->getGuid());
     if ($this->guidValidator->validate($guid->getSerialization()) === false) {
         throw new ChangeOpException("Claim does not have a valid GUID");
     } elseif (!$entity->getId()->equals($guid->getEntityId())) {
         throw new ChangeOpException("Claim GUID invalid for given entity");
     }
     $this->applyClaimToEntity($entity, $summary);
 }
 public function buildDeserializer()
 {
     $entityIdDeserializerMock = $this->getMock('\\Deserializers\\Deserializer');
     $entityIdDeserializerMock->expects($this->any())->method('deserialize')->with($this->equalTo('P42'))->will($this->returnValue(new PropertyId('P42')));
     $termListDeserializerMock = $this->getMock('\\Deserializers\\Deserializer');
     $termListDeserializerMock->expects($this->any())->method('deserialize')->with($this->equalTo(array('en' => array('lang' => 'en', 'value' => 'foo'))))->will($this->returnValue(new TermList(array(new Term('en', 'foo')))));
     $aliasGroupListDeserializerMock = $this->getMock('\\Deserializers\\Deserializer');
     $aliasGroupListDeserializerMock->expects($this->any())->method('deserialize')->with($this->equalTo(array('en' => array('lang' => 'en', 'values' => array('foo', 'bar')))))->will($this->returnValue(new AliasGroupList(array(new AliasGroup('en', array('foo', 'bar'))))));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setGuid('test');
     $statementListDeserializerMock = $this->getMock('\\Deserializers\\Deserializer');
     $statementListDeserializerMock->expects($this->any())->method('deserialize')->with($this->equalTo(array('P42' => array(array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'normal')))))->will($this->returnValue(new StatementList(array($statement))));
     return new PropertyDeserializer($entityIdDeserializerMock, $termListDeserializerMock, $aliasGroupListDeserializerMock, $statementListDeserializerMock);
 }
 public function testArrayObjectNotConstructedFromObject()
 {
     $statement1 = new Statement(new PropertyNoValueSnak(1));
     $statement1->setGuid('1');
     $statement2 = new Statement(new PropertyNoValueSnak(2));
     $statement2->setGuid('2');
     $object = new ArrayObject();
     $object->append($statement1);
     $byPropertyIdArray = new ByPropertyIdArray($object);
     // According to the documentation append() "cannot be called when the ArrayObject was
     // constructed from an object." This test makes sure it was not constructed from an object.
     $byPropertyIdArray->append($statement2);
     $this->assertCount(2, $byPropertyIdArray);
 }
 /**
  * @see ChangeOp::apply
  *
  * @param EntityDocument $entity
  * @param Summary|null $summary
  *
  * @throws ChangeOpException
  */
 public function apply(EntityDocument $entity, Summary $summary = null)
 {
     if (!$entity instanceof StatementListHolder) {
         throw new InvalidArgumentException('$entity must be a StatementListHolder');
     }
     if ($this->statement->getGuid() === null) {
         $this->statement->setGuid($this->guidGenerator->newGuid($entity->getId()));
     }
     $guid = $this->guidParser->parse($this->statement->getGuid());
     if ($this->guidValidator->validate($guid->getSerialization()) === false) {
         throw new ChangeOpException("Claim does not have a valid GUID");
     } elseif (!$entity->getId()->equals($guid->getEntityId())) {
         throw new ChangeOpException("Claim GUID invalid for given entity");
     }
     $this->applyStatementToEntity($entity, $summary);
 }
 public function testStatementsArePatched()
 {
     $s1337 = new Statement(new PropertyNoValueSnak(1337));
     $s1337->setGuid('s1337');
     $s23 = new Statement(new PropertyNoValueSnak(23));
     $s23->setGuid('s23');
     $s42 = new Statement(new PropertyNoValueSnak(42));
     $s42->setGuid('s42');
     $patch = new EntityDiff(array('claim' => new Diff(array('s42' => new DiffOpRemove($s42), 's23' => new DiffOpAdd($s23)))));
     $property = Property::newFromType('kittens');
     $property->getStatements()->addStatement($s1337);
     $property->getStatements()->addStatement($s42);
     $expectedProperty = Property::newFromType('kittens');
     $expectedProperty->getStatements()->addStatement($s1337);
     $expectedProperty->getStatements()->addStatement($s23);
     $this->assertEquals($expectedProperty, $this->getPatchedProperty($property, $patch));
 }
 public function findSnaksProvider()
 {
     $propertyId = new PropertyId('P1337');
     $statement1 = new Statement(new PropertyValueSnak($propertyId, new StringValue('a kitten!')));
     $statement1->setGuid('Q42$1');
     $statement2 = new Statement(new PropertyValueSnak($propertyId, new StringValue('two kittens!!')));
     $statement2->setGuid('Q42$2');
     // A Statement with a lower rank which should not affect the output
     $statement3 = new Statement(new PropertyValueSnak($propertyId, new StringValue('three kittens!!!')));
     $statement3->setGuid('Q42$3');
     $statement3->setRank(Statement::RANK_DEPRECATED);
     $item = new Item(new ItemId('Q42'));
     $item->getStatements()->addStatement($statement1);
     $item->getStatements()->addStatement($statement2);
     $item->getStatements()->addStatement($statement3);
     $snaksNormal = array(new PropertyValueSnak($propertyId, new StringValue('a kitten!')), new PropertyValueSnak($propertyId, new StringValue('two kittens!!')));
     $snakDeprecated = array(new PropertyValueSnak($propertyId, new StringValue('three kittens!!!')));
     return array(array($snaksNormal, $item, new PropertyId('P1337')), array(array(), $item, new PropertyId('P90001')), array($snakDeprecated, $item, new PropertyId('P1337'), array(Statement::RANK_DEPRECATED)));
 }
Example #18
0
 public function diffProvider()
 {
     $diffs = array();
     $diffOps = array('label' => new Diff(array('en' => new DiffOpAdd('foobar'), 'de' => new DiffOpRemove('onoez'), 'nl' => new DiffOpChange('foo', 'bar')), true));
     $diffs[] = new EntityDiff($diffOps);
     $diffOps['description'] = new Diff(array('en' => new DiffOpAdd('foobar'), 'de' => new DiffOpRemove('onoez'), 'nl' => new DiffOpChange('foo', 'bar')), true);
     $diffs[] = new EntityDiff($diffOps);
     $diffOps['aliases'] = new Diff(array('en' => new Diff(array(new DiffOpAdd('foobar'), new DiffOpRemove('onoez')), false), 'de' => new Diff(array(new DiffOpRemove('foo')), false)), true);
     $diffs[] = new EntityDiff($diffOps);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setGuid('EntityDiffTest$foo');
     $statementListDiffer = new StatementListDiffer();
     $diffOps['claim'] = $statementListDiffer->getDiff(new StatementList($statement), new StatementList());
     $diffs[] = new EntityDiff($diffOps);
     $argLists = array();
     foreach ($diffs as $diff) {
         $argLists[] = array($diff);
     }
     return $argLists;
 }
 public function testFoo()
 {
     $statement0 = new Statement(new PropertyNoValueSnak(42));
     $statement0->setGuid('s0');
     $statement1 = new Statement(new PropertySomeValueSnak(42));
     $statement1->setGuid('s1');
     $statement2 = new Statement(new PropertyValueSnak(42, new StringValue('ohi')));
     $statement2->setGuid('s2');
     $statement3 = new Statement(new PropertyNoValueSnak(1));
     $statement3->setGuid('s3');
     $patch = new Diff(array('s0' => new DiffOpRemove($statement0), 's2' => new DiffOpAdd($statement2), 's3' => new DiffOpAdd($statement3)));
     $source = new StatementList();
     $source->addStatement($statement0);
     $source->addStatement($statement1);
     $expected = new StatementList();
     $expected->addStatement($statement1);
     $expected->addStatement($statement2);
     $expected->addStatement($statement3);
     $this->assertListResultsFromPatch($expected, $source, $patch);
 }
 public function serializationProvider()
 {
     $serializations = array();
     $serializations[] = array(array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'normal'), new Statement(new PropertyNoValueSnak(42)));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setGuid('q42');
     $serializations[] = array(array('id' => 'q42', 'mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'normal'), $statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setRank(Statement::RANK_PREFERRED);
     $serializations[] = array(array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'preferred'), $statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setRank(Statement::RANK_DEPRECATED);
     $serializations[] = array(array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'deprecated'), $statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setQualifiers(new SnakList(array()));
     $serializations[] = array(array('mainsnak' => array('snaktype' => 'novalue', 'property' => "P42"), 'type' => 'statement', 'rank' => 'normal'), $statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setQualifiers(new SnakList(array(new PropertyNoValueSnak(42))));
     $serializations[] = array(array('mainsnak' => array('snaktype' => 'novalue', 'property' => "P42"), 'qualifiers' => array('P42' => array(array('snaktype' => 'novalue', 'property' => 'P42'))), 'qualifiers-order' => array('P42'), 'type' => 'statement', 'rank' => 'normal'), $statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setReferences(new ReferenceList(array(new Reference(array(new PropertyNoValueSnak(1))))));
     $serializations[] = array(array('mainsnak' => array('snaktype' => 'novalue', 'property' => "P42"), 'references' => array(array('hash' => 'da39a3ee5e6b4b0d3255bfef95601890afd80709', 'snaks' => array())), 'type' => 'statement', 'rank' => 'normal'), $statement);
     return $serializations;
 }
 public function snaksProvider()
 {
     $statements = array();
     $statements[] = array(new Statement(new PropertyNoValueSnak(42)));
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setGuid('q42');
     $statements[] = array($statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setRank(Statement::RANK_PREFERRED);
     $statements[] = array($statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setRank(Statement::RANK_DEPRECATED);
     $statements[] = array($statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setQualifiers(new SnakList(array()));
     $statements[] = array($statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setQualifiers(new SnakList(array(new PropertySomeValueSnak(42), new PropertyNoValueSnak(42), new PropertySomeValueSnak(24))));
     $statements[] = array($statement);
     $statement = new Statement(new PropertyNoValueSnak(42));
     $statement->setReferences(new ReferenceList(array(new Reference(array(new PropertySomeValueSnak(42), new PropertyNoValueSnak(42), new PropertySomeValueSnak(24))))));
     $statements[] = array($statement);
     return $statements;
 }
Example #22
0
 public function testAddStatementWithGuid()
 {
     $list = new StatementList();
     $list->addNewStatement($this->newSnak(42, 'foo'), null, null, 'kittens');
     $statement = new Statement($this->newSnak(42, 'foo'));
     $statement->setGuid('kittens');
     $this->assertEquals(new StatementList($statement), $list);
 }
Example #23
0
 public function testSetClaims()
 {
     $property = Property::newFromType('string');
     $statement0 = new Statement(new PropertyNoValueSnak(42));
     $statement0->setGuid('TEST$NVS42');
     $statement1 = new Statement(new PropertySomeValueSnak(42));
     $statement1->setGuid('TEST$SVS42');
     $statements = array($statement0, $statement1);
     $property->setClaims(new Claims($statements));
     $this->assertEquals(count($statements), $property->getStatements()->count(), 'added some statements');
     $property->setClaims(new Claims());
     $this->assertTrue($property->getStatements()->isEmpty(), 'should be empty again');
 }
 /**
  * @param Snak $mainSnak
  *
  * @return Statement
  */
 private function getTestStatement(Snak $mainSnak)
 {
     $statement = new Statement($mainSnak);
     $statement->setGuid(uniqid('kittens', true));
     return $statement;
 }
Example #25
0
 public function testGivenStatementWithDifferentGuids_equalsReturnsFalse()
 {
     $statement = new Statement(new PropertyNoValueSnak(42));
     $differentStatement = new Statement(new PropertyNoValueSnak(42));
     $differentStatement->setGuid('kittens');
     $this->assertFalse($statement->equals($differentStatement));
 }
 public function deserializationProvider()
 {
     $statement = new Statement(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')))));
 }
 private function newStatement($propertyId, $guid)
 {
     $statement = new Statement(new PropertyNoValueSnak($propertyId));
     $statement->setGuid($guid);
     return $statement;
 }
 /**
  * @return array 1=>from 2=>to 3=>expectedFrom 4=>expectedTo
  */
 public function provideData()
 {
     $testCases = array();
     $itemWithEnLabel = new Item();
     $itemWithEnLabel->getFingerprint()->setLabel('en', 'foo');
     $testCases['labelMerge'] = array($itemWithEnLabel->copy(), new Item(), new Item(), $itemWithEnLabel->copy());
     $testCases['identicalLabelMerge'] = array($itemWithEnLabel->copy(), $itemWithEnLabel->copy(), new Item(), $itemWithEnLabel->copy());
     $itemWithEnBarLabel = new Item();
     $itemWithEnBarLabel->getFingerprint()->setLabel('en', 'bar');
     $itemWithLabelAndAlias = new Item();
     $itemWithLabelAndAlias->getFingerprint()->setLabel('en', 'bar');
     $itemWithLabelAndAlias->getFingerprint()->setAliasGroup('en', array('foo'));
     $testCases['labelAsAliasMerge'] = array($itemWithEnLabel->copy(), $itemWithEnBarLabel->copy(), new Item(), $itemWithLabelAndAlias->copy());
     $itemWithDescription = new Item();
     $itemWithDescription->getFingerprint()->setDescription('en', 'foo');
     $testCases['descriptionMerge'] = array($itemWithDescription->copy(), new Item(), new Item(), $itemWithDescription->copy());
     $testCases['identicalDescriptionMerge'] = array($itemWithDescription->copy(), $itemWithDescription->copy(), new Item(), $itemWithDescription->copy());
     $itemWithBarDescription = new Item();
     $itemWithBarDescription->getFingerprint()->setDescription('en', 'bar');
     $testCases['ignoreConflictDescriptionMerge'] = array($itemWithDescription->copy(), $itemWithBarDescription->copy(), $itemWithDescription->copy(), $itemWithBarDescription->copy(), array('description'));
     $itemWithFooBarAliases = new Item();
     $itemWithFooBarAliases->getFingerprint()->setAliasGroup('en', array('foo', 'bar'));
     $testCases['aliasMerge'] = array($itemWithFooBarAliases->copy(), new Item(), new Item(), $itemWithFooBarAliases->copy());
     $itemWithFooBarBazAliases = new Item();
     $itemWithFooBarBazAliases->getFingerprint()->setAliasGroup('en', array('foo', 'bar', 'baz'));
     $testCases['duplicateAliasMerge'] = array($itemWithFooBarAliases->copy(), $itemWithFooBarBazAliases->copy(), new Item(), $itemWithFooBarBazAliases->copy());
     $itemWithLink = new Item();
     $itemWithLink->getSiteLinkList()->addNewSiteLink('enwiki', 'foo');
     $testCases['linkMerge'] = array($itemWithLink->copy(), new Item(), new Item(), $itemWithLink->copy());
     $testCases['sameLinkLinkMerge'] = array($itemWithLink->copy(), $itemWithLink->copy(), new Item(), $itemWithLink->copy());
     $itemWithBarLink = new Item();
     $itemWithBarLink->getSiteLinkList()->addNewSiteLink('enwiki', 'bar');
     $testCases['ignoreConflictLinkMerge'] = array($itemWithLink->copy(), $itemWithBarLink->copy(), $itemWithLink->copy(), $itemWithBarLink->copy(), array('sitelink'));
     $statement = new Statement(new PropertyNoValueSnak(new PropertyId('P56')));
     $statement->setGuid('Q111$D8404CDA-25E4-4334-AF13-A390BCD9C556');
     $itemWithStatement = new Item();
     $itemWithStatement->getStatements()->addStatement($statement);
     $testCases['statementMerge'] = array($itemWithStatement->copy(), new Item(), new Item(), $itemWithStatement->copy());
     $qualifiedStatement = new Statement(new PropertyNoValueSnak(new PropertyId('P56')), new SnakList(array(new PropertyNoValueSnak(new PropertyId('P56')))));
     $qualifiedStatement->setGuid('Q111$D8404CDA-25E4-4334-AF13-A390BCD9C556');
     $itemWithQualifiedStatement = new Item();
     $itemWithQualifiedStatement->getStatements()->addStatement($qualifiedStatement);
     $testCases['statementWithQualifierMerge'] = array($itemWithQualifiedStatement->copy(), new Item(), new Item(), $itemWithQualifiedStatement->copy());
     $anotherQualifiedStatement = new Statement(new PropertyNoValueSnak(new PropertyId('P88')), new SnakList(array(new PropertyNoValueSnak(new PropertyId('P88')))));
     $anotherQualifiedStatement->setGuid('Q111$D8404CDA-25E4-4334-AF88-A3290BCD9C0F');
     $selfReferencingStatement = new Statement(new PropertyValueSnak(new PropertyId('P42'), new EntityIdValue(new ItemId('Q111'))));
     $selfReferencingStatement->setGuid('Q111$D74D43D7-BD8F-4240-A058-24C5171ABBFA');
     $bigItem = new Item();
     $bigItem->setId(111);
     $bigItem->getFingerprint()->setLabel('en', 'foo');
     $bigItem->getFingerprint()->setLabel('pt', 'ptfoo');
     $bigItem->getFingerprint()->setDescription('en', 'foo');
     $bigItem->getFingerprint()->setDescription('pl', 'pldesc');
     $bigItem->getFingerprint()->setAliasGroup('en', array('foo', 'bar'));
     $bigItem->getFingerprint()->setAliasGroup('de', array('defoo', 'debar'));
     $bigItem->getSiteLinkList()->addNewSiteLink('dewiki', 'foo');
     $bigItem->getStatements()->addStatement($anotherQualifiedStatement);
     $bigItem->getStatements()->addStatement($selfReferencingStatement);
     $testCases['itemMerge'] = array($bigItem->copy(), new Item(), new Item(), $bigItem->copy());
     $referencingStatement = new Statement(new PropertyValueSnak(new PropertyId('P42'), new EntityIdValue(new ItemId('Q222'))));
     $referencingStatement->setGuid('Q111$949A4D27-0EBC-46A7-BF5F-AA2DD33C0443');
     $bigItem->getSiteLinkList()->addNewSiteLink('nlwiki', 'bar');
     $bigItem->getStatements()->addStatement($referencingStatement);
     $smallerItem = new Item();
     $smallerItem->setId(222);
     $smallerItem->getFingerprint()->setLabel('en', 'toLabel');
     $smallerItem->getFingerprint()->setDescription('pl', 'toDescription');
     $smallerItem->getSiteLinkList()->addNewSiteLink('nlwiki', 'toLink');
     $smallerMergedItem = new Item();
     $smallerMergedItem->setId(222);
     $smallerMergedItem->getFingerprint()->setDescription('pl', 'pldesc');
     $smallerMergedItem->getSiteLinkList()->addNewSiteLink('nlwiki', 'bar');
     $bigMergedItem = new Item();
     $bigMergedItem->setId(111);
     $bigMergedItem->getFingerprint()->setLabel('en', 'toLabel');
     $bigMergedItem->getFingerprint()->setLabel('pt', 'ptfoo');
     $bigMergedItem->getFingerprint()->setDescription('en', 'foo');
     $bigMergedItem->getFingerprint()->setDescription('pl', 'toDescription');
     $bigMergedItem->getFingerprint()->setAliasGroup('en', array('foo', 'bar'));
     $bigMergedItem->getFingerprint()->setAliasGroup('de', array('defoo', 'debar'));
     $bigMergedItem->getSiteLinkList()->addNewSiteLink('dewiki', 'foo');
     $bigMergedItem->getSiteLinkList()->addNewSiteLink('nlwiki', 'toLink');
     $bigMergedItem->setStatements(new StatementList($anotherQualifiedStatement, $selfReferencingStatement, $referencingStatement));
     $testCases['ignoreConflictItemMerge'] = array($bigItem->copy(), $smallerItem->copy(), $smallerMergedItem->copy(), $bigMergedItem->copy(), array('description', 'sitelink', 'statement'));
     return $testCases;
 }
 public function validateProvider()
 {
     $p11 = new PropertyId('P11');
     $q17 = new ItemId('Q17');
     //NOTE: the mock validator will consider the string "INVALID" to be invalid.
     $goodSnak = new PropertyValueSnak($p11, new StringValue('good'));
     $badSnak = new PropertyValueSnak($p11, new StringValue('INVALID'));
     $brokenSnak = new PropertyValueSnak($p11, new NumberValue(23));
     $guidGenerator = new GuidGenerator();
     $cases = array();
     $statement = new Statement($badSnak);
     $statement->setGuid($guidGenerator->newGuid($q17));
     $cases['invalid value in main snak'] = array($q17, $statement);
     $statement = new Statement($brokenSnak);
     $statement->setGuid($guidGenerator->newGuid($q17));
     $cases['mismatching value in main snak'] = array($q17, $statement);
     $statement = new Statement($goodSnak);
     $statement->setGuid($guidGenerator->newGuid($q17));
     $statement->setQualifiers(new SnakList(array($badSnak)));
     $cases['bad snak in qualifiers'] = array($q17, $statement);
     $statement = new Statement($goodSnak);
     $statement->setGuid($guidGenerator->newGuid($q17));
     $statement->setQualifiers(new SnakList(array($brokenSnak)));
     $cases['mismatching value in qualifier'] = array($q17, $statement);
     $statement = new Statement($goodSnak);
     $reference = new Reference(new SnakList(array($badSnak)));
     $statement->setGuid($guidGenerator->newGuid($q17));
     $statement->setReferences(new ReferenceList(array($reference)));
     $cases['bad snak in reference'] = array($q17, $statement);
     $statement = new Statement($goodSnak);
     $reference = new Reference(new SnakList(array($badSnak)));
     $statement->setGuid($guidGenerator->newGuid($q17));
     $statement->setReferences(new ReferenceList(array($reference)));
     $cases['mismatching value in reference'] = array($q17, $statement);
     return $cases;
 }
 public function testBadPropertyError()
 {
     $store = WikibaseRepo::getDefaultInstance()->getEntityStore();
     $property = Property::newFromType('quantity');
     $property = $store->saveEntity($property, '', $GLOBALS['wgUser'], EDIT_NEW)->getEntity();
     $item = new Item();
     /** @var Item $item */
     $item = $store->saveEntity($item, '', $GLOBALS['wgUser'], EDIT_NEW)->getEntity();
     $guidGenerator = new GuidGenerator();
     $statement = new Statement(new PropertyNoValueSnak($property->getId()));
     $statement->setGuid($guidGenerator->newGuid($item->getId()));
     $item->getStatements()->addStatement($statement);
     $store->saveEntity($item, '', $GLOBALS['wgUser'], EDIT_UPDATE);
     // try to change the main snak's property
     $badProperty = Property::newFromType('string');
     $badProperty = $store->saveEntity($badProperty, '', $GLOBALS['wgUser'], EDIT_NEW)->getEntity();
     $badSerialization = array('id' => $statement->getGuid(), 'mainsnak' => array('snaktype' => 'novalue', 'property' => $badProperty->getId()->getSerialization()), 'type' => 'statement', 'rank' => 'normal');
     $params = array('action' => 'wbsetclaim', 'claim' => FormatJson::encode($badSerialization));
     try {
         $this->doApiRequestWithToken($params);
         $this->fail('Changed main snak property did not raise an error');
     } catch (UsageException $e) {
         $this->assertEquals('modification-failed', $e->getCodeString(), 'Changed main snak property');
     }
 }