diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 9a673310..e32b2d5e 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -2,11 +2,16 @@ ## Version 1.1 (dev) +#### Breaking changes + +* Changed the constructor signature of `Statement` + #### Additions * The `Property` constructor now accepts an optional `StatementList` parameter * Added `Property::getStatements` and `Property::setStatements` * Added `StatementList::getAllSnaks` to use instead of `Entity::getAllSnaks` +* Added `Statement::setClaim` ## Version 1.0 (2014-09-02) diff --git a/src/Entity/Item.php b/src/Entity/Item.php index e86d6cc6..2fa75dfd 100644 --- a/src/Entity/Item.php +++ b/src/Entity/Item.php @@ -216,7 +216,7 @@ public function getType() { * @return Statement */ public function newClaim( Snak $mainSnak ) { - return new Statement( $mainSnak ); + return new Statement( new Claim( $mainSnak ) ); } /** diff --git a/src/Statement/Statement.php b/src/Statement/Statement.php index fec42a90..758f3f19 100644 --- a/src/Statement/Statement.php +++ b/src/Statement/Statement.php @@ -4,11 +4,9 @@ use InvalidArgumentException; use Wikibase\DataModel\Claim\Claim; -use Wikibase\DataModel\Reference; use Wikibase\DataModel\ReferenceList; use Wikibase\DataModel\References; use Wikibase\DataModel\Snak\Snak; -use Wikibase\DataModel\Snak\Snaks; /** * Class representing a Wikibase statement. @@ -18,6 +16,7 @@ * * @licence GNU GPL v2+ * @author Jeroen De Dauw < jeroendedauw@gmail.com > + * @author Bene* < benestar.wikimedia@gmail.com > */ class Statement extends Claim { @@ -31,15 +30,8 @@ class Statement extends Claim { */ private $rank = self::RANK_NORMAL; - /** - * @since 0.1 - * - * @param Snak $mainSnak - * @param Snaks|null $qualifiers - * @param References|null $references - */ - public function __construct( Snak $mainSnak, Snaks $qualifiers = null, References $references = null ) { - parent::__construct( $mainSnak, $qualifiers ); + public function __construct( Claim $claim, References $references = null ) { + $this->setClaim( $claim ); $this->references = $references === null ? new ReferenceList() : $references; } @@ -150,6 +142,17 @@ public function equals( $target ) { && $this->references->equals( $target->references ); } + /** + * @since 1.1 + * + * @param Claim $claim + */ + public function setClaim( Claim $claim ) { + $this->mainSnak = $claim->getMainSnak(); + $this->qualifiers = $claim->getQualifiers(); + $this->guid = $claim->getGuid(); + } + /** * @since 1.0 * diff --git a/src/Statement/StatementList.php b/src/Statement/StatementList.php index 27d7d5fb..05bb2219 100644 --- a/src/Statement/StatementList.php +++ b/src/Statement/StatementList.php @@ -4,6 +4,7 @@ use InvalidArgumentException; use Traversable; +use Wikibase\DataModel\Claim\Claim; use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\PropertyId; use Wikibase\DataModel\Reference; @@ -106,7 +107,7 @@ public function addNewStatement( Snak $mainSnak, $qualifiers = null, $references $qualifiers = is_array( $qualifiers ) ? new SnakList( $qualifiers ) : $qualifiers; $references = is_array( $references ) ? new ReferenceList( $references ) : $references; - $statement = new Statement( $mainSnak, $qualifiers, $references ); + $statement = new Statement( new Claim( $mainSnak, $qualifiers ), $references ); $statement->setGuid( $guid ); $this->addStatement( $statement ); diff --git a/tests/unit/ByPropertyIdArrayTest.php b/tests/unit/ByPropertyIdArrayTest.php index 15dfa64f..0457566b 100644 --- a/tests/unit/ByPropertyIdArrayTest.php +++ b/tests/unit/ByPropertyIdArrayTest.php @@ -80,7 +80,7 @@ function( Snak $snak ) { $lists[] = array_map( function( Snak $snak ) { - return new Statement( $snak ); + return new Statement( new Claim( $snak ) ); }, $snaks ); diff --git a/tests/unit/Claim/ClaimStandaloneTest.php b/tests/unit/Claim/ClaimStandaloneTest.php index 46484cca..7b968e4b 100644 --- a/tests/unit/Claim/ClaimStandaloneTest.php +++ b/tests/unit/Claim/ClaimStandaloneTest.php @@ -81,7 +81,7 @@ public function testGivenClaimWithDifferentGuids_equalsReturnsFalse() { public function testGivenSimilarStatement_equalsReturnsFalse() { $claim = new Claim( new PropertyNoValueSnak( 42 ) ); - $this->assertFalse( $claim->equals( new Statement( new PropertyNoValueSnak( 42 ) ) ) ); + $this->assertFalse( $claim->equals( new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ) ) ); } } diff --git a/tests/unit/Claim/ClaimsTest.php b/tests/unit/Claim/ClaimsTest.php index cef8124c..f4caefd2 100644 --- a/tests/unit/Claim/ClaimsTest.php +++ b/tests/unit/Claim/ClaimsTest.php @@ -56,7 +56,7 @@ protected function makeStatement( Snak $mainSnak, $guid = null ) { $guid = 'TEST$statement-' . $this->guidCounter; } - $claim = new Statement( $mainSnak ); + $claim = new Statement( new Claim( $mainSnak ) ); $claim->setGuid( $guid ); return $claim; diff --git a/tests/unit/Entity/Diff/EntityDiffTest.php b/tests/unit/Entity/Diff/EntityDiffTest.php index 8819687c..3000c409 100644 --- a/tests/unit/Entity/Diff/EntityDiffTest.php +++ b/tests/unit/Entity/Diff/EntityDiffTest.php @@ -90,7 +90,7 @@ public function diffProvider() { $diffs[] = new EntityDiff( $diffOps ); - $statement = new Statement( new PropertyNoValueSnak( 42 ) ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); $statement->setGuid( 'EntityDiffTest$foo' ); $statementListDiffer = new StatementListDiffer(); diff --git a/tests/unit/Entity/Diff/ItemDifferTest.php b/tests/unit/Entity/Diff/ItemDifferTest.php index ba5494af..020d2573 100644 --- a/tests/unit/Entity/Diff/ItemDifferTest.php +++ b/tests/unit/Entity/Diff/ItemDifferTest.php @@ -6,10 +6,11 @@ use Diff\DiffOp\DiffOpAdd; use Diff\DiffOp\DiffOpChange; use Diff\DiffOp\DiffOpRemove; -use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Claim\Claim; use Wikibase\DataModel\Entity\Diff\ItemDiffer; use Wikibase\DataModel\Entity\Item; use Wikibase\DataModel\Snak\PropertySomeValueSnak; +use Wikibase\DataModel\Statement\Statement; /** * @covers Wikibase\DataModel\Entity\Diff\ItemDiffer @@ -61,7 +62,7 @@ public function testClaimsAreDiffed() { $firstItem = Item::newEmpty(); $secondItem = Item::newEmpty(); - $statement = new Statement( new PropertySomeValueSnak( 42 ) ); + $statement = new Statement( new Claim( new PropertySomeValueSnak( 42 ) ) ); $statement->setGuid( 'kittens' ); $secondItem->addClaim( $statement ); diff --git a/tests/unit/Entity/EntityTest.php b/tests/unit/Entity/EntityTest.php index a6064c6e..a93afe3a 100644 --- a/tests/unit/Entity/EntityTest.php +++ b/tests/unit/Entity/EntityTest.php @@ -6,12 +6,12 @@ use Diff\DiffOp\DiffOpAdd; use Diff\DiffOp\DiffOpChange; use Diff\DiffOp\DiffOpRemove; -use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Claim\Claim; use Wikibase\DataModel\Entity\Diff\EntityDiff; use Wikibase\DataModel\Entity\Entity; use Wikibase\DataModel\Entity\Item; -use Wikibase\DataModel\Reference; use Wikibase\DataModel\Snak\PropertyNoValueSnak; +use Wikibase\DataModel\Statement\Statement; use Wikibase\DataModel\Term\AliasGroup; use Wikibase\DataModel\Term\AliasGroupList; use Wikibase\DataModel\Term\Fingerprint; @@ -441,7 +441,7 @@ public function testNewClaim( Entity $entity ) { } $snak = new PropertyNoValueSnak( 42 ); - $claim = new Statement( $snak ); + $claim = new Statement( new Claim( $snak ) ); $claim->setGuid( 'q42$foobarbaz' ); $this->assertInstanceOf( 'Wikibase\DataModel\Claim\Claim', $claim ); diff --git a/tests/unit/Entity/ItemTest.php b/tests/unit/Entity/ItemTest.php index 8952f43c..21b4675c 100644 --- a/tests/unit/Entity/ItemTest.php +++ b/tests/unit/Entity/ItemTest.php @@ -63,8 +63,7 @@ public function makeClaims() { $claims[] = new Claim( new PropertyNoValueSnak( 42 ) ); $claims[] = new Statement( - new PropertyNoValueSnak( 42 ), - null, + new Claim( new PropertyNoValueSnak( 42 ), null ), new ReferenceList( array( new Reference( new SnakList( array( new PropertyNoValueSnak( 24 ), @@ -154,9 +153,9 @@ public function itemProvider() { * @var Item $item; */ $item = $item->copy(); - $item->addClaim( new Statement( + $item->addClaim( new Statement( new Claim( new PropertyNoValueSnak( new PropertyId( 'P42' ) ) - ) ); + ) ) ); $items[] = $item; $argLists = array(); @@ -448,10 +447,10 @@ public function diffProvider() { public function patchProvider() { $argLists = parent::patchProvider(); - $statement0 = new Statement( new PropertyNoValueSnak( 42 ) ); - $statement1 = new Statement( new PropertySomeValueSnak( 42 ) ); - $statement2 = new Statement( new PropertyValueSnak( 42, new StringValue( 'ohi' ) ) ); - $statement3 = new Statement( new PropertyNoValueSnak( 1 ) ); + $statement0 = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement1 = new Statement( new Claim( new PropertySomeValueSnak( 42 ) ) ); + $statement2 = new Statement( new Claim( new PropertyValueSnak( 42, new StringValue( 'ohi' ) ) ) ); + $statement3 = new Statement( new Claim( new PropertyNoValueSnak( 1 ) ) ); $statement0->setGuid( 'claim0' ); $statement1->setGuid( 'claim1' ); @@ -698,10 +697,10 @@ public function testNewClaimReturnsStatementWithProvidedMainSnak() { public function testSetClaims() { $item = Item::newEmpty(); - $statement0 = new Statement( new PropertyNoValueSnak( 42 ) ); + $statement0 = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); $statement0->setGuid( 'TEST$NVS42' ); - $statement1 = new Statement( new PropertySomeValueSnak( 42 ) ); + $statement1 = new Statement( new Claim( new PropertySomeValueSnak( 42 ) ) ); $statement1->setGuid( 'TEST$SVS42' ); $statements = array( $statement0, $statement1 ); @@ -765,7 +764,7 @@ public function testItemWithoutSitelinksHasNoSitelinks() { } private function newStatement() { - $statement = new Statement( new PropertyNoValueSnak( 42 ) ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); $statement->setGuid( 'kittens' ); return $statement; } @@ -787,7 +786,7 @@ public function testClearRemovesAllButId() { } public function testCanConstructWithStatementList() { - $statement = new Statement( new PropertyNoValueSnak( 42 ) ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); $statement->setGuid( 'meh' ); $statements = new StatementList( array( $statement ) ); diff --git a/tests/unit/Statement/StatementListTest.php b/tests/unit/Statement/StatementListTest.php index e4359881..f16814e4 100644 --- a/tests/unit/Statement/StatementListTest.php +++ b/tests/unit/Statement/StatementListTest.php @@ -142,7 +142,7 @@ public function testGetAllSnaksReturnsAllSnaks() { private function getStatementWithSnak( $propertyId, $stringValue ) { $snak = $this->newSnak( $propertyId, $stringValue ); - $statement = new Statement( $snak ); + $statement = new Statement( new Claim( $snak ) ); $statement->setGuid( sha1( $snak->getHash() ) ); return $statement; } @@ -158,7 +158,7 @@ public function testAddStatementWithOnlyMainSnak() { $this->assertEquals( new StatementList( array( - new Statement( $this->newSnak( 42, 'foo' ) ) + new Statement( new Claim( $this->newSnak( 42, 'foo' ) ) ) ) ), $list ); @@ -176,12 +176,12 @@ public function testAddStatementWithQualifiersAsSnakArray() { $this->assertEquals( new StatementList( array( - new Statement( + new Statement( new Claim( $this->newSnak( 42, 'foo' ), new SnakList( array( $this->newSnak( 1, 'bar' ) ) ) - ) + ) ) ) ), $list ); @@ -200,10 +200,10 @@ public function testAddStatementWithQualifiersAsSnakList() { $this->assertEquals( new StatementList( array( - new Statement( + new Statement( new Claim( $this->newSnak( 42, 'foo' ), $snakList - ) + ) ) ) ), $list ); @@ -219,10 +219,10 @@ public function testAddStatementWithGuid() { 'kittens' ); - $statement = new Statement( + $statement = new Statement( new Claim( $this->newSnak( 42, 'foo' ), null - ); + ) ); $statement->setGuid( 'kittens' ); diff --git a/tests/unit/Statement/StatementTest.php b/tests/unit/Statement/StatementTest.php index 0265129a..c45f69e4 100644 --- a/tests/unit/Statement/StatementTest.php +++ b/tests/unit/Statement/StatementTest.php @@ -25,6 +25,13 @@ */ class StatementTest extends \PHPUnit_Framework_TestCase { + public function testConstructorTakesGuidFromClaim() { + $claim = new Claim( new PropertyNoValueSnak( new PropertyId( 'P42' ) ) ); + $claim->setGuid( 'meh' ); + $statement = new Statement( $claim ); + $this->assertEquals( 'meh', $statement->getGuid() ); + } + /** * @dataProvider instanceProvider */ @@ -47,7 +54,7 @@ public function testGetGuid( Statement $statement ) { public function testSetAndGetMainSnak() { $snak = new PropertyNoValueSnak( new PropertyId( 'P42' ) ); - $statement = new Statement( $snak ); + $statement = new Statement( new Claim( $snak ) ); $this->assertSame( $snak, $statement->getMainSnak() ); } @@ -56,10 +63,10 @@ public function testSetAndGetQualifiers() { new PropertyValueSnak( new PropertyId( 'P42' ), new StringValue( 'a' ) ) ) ); - $statement = new Statement( + $statement = new Statement( new Claim( new PropertyNoValueSnak( new PropertyId( 'P42' ) ), $qualifiers - ); + ) ); $this->assertSame( $qualifiers, $statement->getQualifiers() ); } @@ -74,17 +81,17 @@ public function testSerialize( Statement $statement ) { } public function testGuidDoesNotAffectHash() { - $statement0 = new Statement( new PropertyNoValueSnak( 42 ) ); + $statement0 = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); $statement0->setGuid( 'statement0' ); - $statement1 = new Statement( new PropertyNoValueSnak( 42 ) ); + $statement1 = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); $statement1->setGuid( 'statement1' ); $this->assertEquals( $statement0->getHash(), $statement1->getHash() ); } public function testSetInvalidGuidCausesException() { - $statement = new Statement( new PropertyNoValueSnak( 42 ) ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); $this->setExpectedException( 'InvalidArgumentException' ); $statement->setGuid( 42 ); @@ -95,7 +102,7 @@ public function instanceProvider() { $id42 = new PropertyId( 'P42' ); - $baseInstance = new Statement( new PropertyNoValueSnak( $id42 ) ); + $baseInstance = new Statement( new Claim( new PropertyNoValueSnak( $id42 ) ) ); $instances[] = $baseInstance; @@ -228,7 +235,7 @@ public function testGetAllSnaks( Statement $statement ) { } public function testGivenNonStatement_equalsReturnsFalse() { - $statement = new Statement( new PropertyNoValueSnak( 42 ) ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); $this->assertFalse( $statement->equals( null ) ); $this->assertFalse( $statement->equals( 42 ) ); @@ -237,10 +244,12 @@ public function testGivenNonStatement_equalsReturnsFalse() { public function testGivenSameStatement_equalsReturnsTrue() { $statement = new Statement( - new PropertyNoValueSnak( 42 ), - new SnakList( array( - new PropertyNoValueSnak( 1337 ), - ) ), + new Claim( + new PropertyNoValueSnak( 42 ), + new SnakList( array( + new PropertyNoValueSnak( 1337 ), + ) ) + ), new ReferenceList( array( new PropertyNoValueSnak( 1337 ), ) ) @@ -253,37 +262,37 @@ public function testGivenSameStatement_equalsReturnsTrue() { } public function testGivenStatementWithDifferentProperty_equalsReturnsFalse() { - $statement = new Statement( new PropertyNoValueSnak( 42 ) ); - $this->assertFalse( $statement->equals( new Statement( new PropertyNoValueSnak( 43 ) ) ) ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $this->assertFalse( $statement->equals( new Statement( new Claim( new PropertyNoValueSnak( 43 ) ) ) ) ); } public function testGivenStatementWithDifferentSnakType_equalsReturnsFalse() { - $statement = new Statement( new PropertyNoValueSnak( 42 ) ); - $this->assertFalse( $statement->equals( new Statement( new PropertySomeValueSnak( 42 ) ) ) ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $this->assertFalse( $statement->equals( new Statement( new Claim( new PropertySomeValueSnak( 42 ) ) ) ) ); } public function testStatementClaimWithDifferentQualifiers_equalsReturnsFalse() { - $statement = new Statement( + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ), new SnakList( array( new PropertyNoValueSnak( 1337 ), ) ) - ); + ) ); - $differentStatement = new Statement( + $differentStatement = new Statement( new Claim( new PropertyNoValueSnak( 42 ), new SnakList( array( new PropertyNoValueSnak( 32202 ), ) ) - ); + ) ); $this->assertFalse( $statement->equals( $differentStatement ) ); } public function testGivenStatementWithDifferentGuids_equalsReturnsFalse() { - $statement = new Statement( new PropertyNoValueSnak( 42 ) ); + $statement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); - $differentStatement = new Statement( new PropertyNoValueSnak( 42 ) ); + $differentStatement = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); $differentStatement->setGuid( 'kittens' ); $this->assertFalse( $statement->equals( $differentStatement ) ); @@ -291,16 +300,20 @@ public function testGivenStatementWithDifferentGuids_equalsReturnsFalse() { public function testStatementClaimWithDifferentReferences_equalsReturnsFalse() { $statement = new Statement( - new PropertyNoValueSnak( 42 ), - new SnakList( array() ), + new Claim( + new PropertyNoValueSnak( 42 ), + new SnakList( array() ) + ), new ReferenceList( array( new PropertyNoValueSnak( 1337 ), ) ) ); $differentStatement = new Statement( - new PropertyNoValueSnak( 42 ), - new SnakList( array() ), + new Claim( + new PropertyNoValueSnak( 42 ), + new SnakList( array() ) + ), new ReferenceList( array( new PropertyNoValueSnak( 32202 ), ) ) @@ -309,12 +322,30 @@ public function testStatementClaimWithDifferentReferences_equalsReturnsFalse() { $this->assertFalse( $statement->equals( $differentStatement ) ); } + /** + * @dataProvider instanceProvider + */ + public function testSetClaim( Statement $statement ) { + $mainSnak = new PropertyNoValueSnak( new PropertyId( 'P42' ) ); + $qualifiers = new SnakList( array( new PropertyNoValueSnak( 23 ) ) ); + $claim = new Claim( $mainSnak, $qualifiers ); + + $statement->setClaim( $claim ); + + $this->assertEquals( $mainSnak, $statement->getClaim()->getMainSnak() ); + $this->assertEquals( $mainSnak, $statement->getMainSnak() ); + $this->assertEquals( $qualifiers, $statement->getClaim()->getQualifiers() ); + $this->assertEquals( $qualifiers, $statement->getQualifiers() ); + } + public function testGetClaim() { $qualifiers = new SnakList( array( new PropertyNoValueSnak( 23 ) ) ); $statement = new Statement( - new PropertyNoValueSnak( 42 ), - $qualifiers, + new Claim( + new PropertyNoValueSnak( 42 ), + $qualifiers + ), new ReferenceList( array( new PropertyNoValueSnak( 1337 ), ) )