Thiemo Mättig (WMDE) has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/392435 )
Change subject: Introduce local NewStatement instead of reusing the WikibaseRepo one ...................................................................... Introduce local NewStatement instead of reusing the WikibaseRepo one This also reduces the duplication in NewForm and NewSense that was already growing. The NewStatement class introduced here is *not* a copy from WikibaseRepo, but rewritten in the most minimal way possible. Only code that is actually called and needed is in there. Change-Id: I53cd1f571d0100f9b8d976022c990b126615e72b --- M src/DemoData/AskOut2Populator.php M src/DemoData/HardLexemePopulator.php M src/DemoData/LeiterLexemePopulator.php M tests/phpunit/composer/DataModel/FormTest.php M tests/phpunit/composer/DataModel/NewForm.php M tests/phpunit/composer/DataModel/NewSense.php A tests/phpunit/composer/DataModel/NewStatement.php M tests/phpunit/composer/DataModel/Serialization/ExternalLexemeSerializerTest.php M tests/phpunit/composer/DataModel/Serialization/StorageLexemeSerializerTest.php M tests/phpunit/composer/DataModel/Services/Diff/FormDifferPatcherTest.php 10 files changed, 176 insertions(+), 53 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseLexeme refs/changes/35/392435/1 diff --git a/src/DemoData/AskOut2Populator.php b/src/DemoData/AskOut2Populator.php index bc551f7..fb43c76 100644 --- a/src/DemoData/AskOut2Populator.php +++ b/src/DemoData/AskOut2Populator.php @@ -4,7 +4,7 @@ use Wikibase\Lexeme\DataModel\Lexeme; use Wikibase\Lexeme\Tests\DataModel\NewSense; -use Wikibase\Repo\Tests\NewStatement; +use Wikibase\Lexeme\Tests\DataModel\NewStatement; /** * @license GPL-2.0+ diff --git a/src/DemoData/HardLexemePopulator.php b/src/DemoData/HardLexemePopulator.php index 923172c..966bcea 100644 --- a/src/DemoData/HardLexemePopulator.php +++ b/src/DemoData/HardLexemePopulator.php @@ -6,7 +6,7 @@ use Wikibase\Lexeme\DataModel\Lexeme; use Wikibase\Lexeme\Tests\DataModel\NewForm; use Wikibase\Lexeme\Tests\DataModel\NewSense; -use Wikibase\Repo\Tests\NewStatement; +use Wikibase\Lexeme\Tests\DataModel\NewStatement; /** * @license GPL-2.0+ diff --git a/src/DemoData/LeiterLexemePopulator.php b/src/DemoData/LeiterLexemePopulator.php index 012241b..aa55020 100644 --- a/src/DemoData/LeiterLexemePopulator.php +++ b/src/DemoData/LeiterLexemePopulator.php @@ -6,7 +6,7 @@ use Wikibase\Lexeme\DataModel\Lexeme; use Wikibase\Lexeme\Tests\DataModel\NewForm; use Wikibase\Lexeme\Tests\DataModel\NewSense; -use Wikibase\Repo\Tests\NewStatement; +use Wikibase\Lexeme\Tests\DataModel\NewStatement; /** * @license GPL-2.0+ diff --git a/tests/phpunit/composer/DataModel/FormTest.php b/tests/phpunit/composer/DataModel/FormTest.php index 615ed57..acedf82 100644 --- a/tests/phpunit/composer/DataModel/FormTest.php +++ b/tests/phpunit/composer/DataModel/FormTest.php @@ -10,7 +10,6 @@ use Wikibase\DataModel\Term\TermList; use Wikibase\Lexeme\DataModel\Form; use Wikibase\Lexeme\DataModel\FormId; -use Wikibase\Repo\Tests\NewStatement; /** * @covers \Wikibase\Lexeme\DataModel\Form @@ -93,7 +92,7 @@ ->build() ], '1 statement' => [ - NewForm::havingStatement( NewStatement::noValueFor( 'P1' ) ) + NewForm::havingStatement( NewStatement::forProperty( 'P1' ) ) ->build() ], ]; @@ -109,7 +108,7 @@ public function provideEqualForms() { $minimal = NewForm::havingRepresentation( 'en', 'minimal' ); $nonEmpty = $minimal->andGrammaticalFeature( 'Q1' ) - ->andStatement( NewStatement::noValueFor( 'P1' ) ); + ->andStatement( NewStatement::forProperty( 'P1' ) ); $minimalInstance = $minimal->build(); @@ -158,7 +157,7 @@ ], '+1 statement' => [ $form->build(), - $form->andStatement( NewStatement::noValueFor( 'P1' ) )->build() + $form->andStatement( NewStatement::forProperty( 'P1' ) )->build() ], // FIXME: What kind of equality do we want for lists of ItemIds? 'grammatical feature in different order' => [ @@ -182,7 +181,7 @@ // Edit all mutable fields on the original $original->getRepresentations()->setTextForLanguage( 'en', 'added' ); $original->setGrammaticalFeatures( [ new ItemId( 'Q2' ) ] ); - $original->getStatements()->addStatement( NewStatement::noValueFor( 'P1' )->build() ); + $original->getStatements()->addStatement( NewStatement::forProperty( 'P1' )->build() ); // Make sure the original changed $this->assertTrue( $original->getRepresentations()->hasTermForLanguage( 'en' ) ); diff --git a/tests/phpunit/composer/DataModel/NewForm.php b/tests/phpunit/composer/DataModel/NewForm.php index 941da9e..28a0d26 100644 --- a/tests/phpunit/composer/DataModel/NewForm.php +++ b/tests/phpunit/composer/DataModel/NewForm.php @@ -3,7 +3,6 @@ namespace Wikibase\Lexeme\Tests\DataModel; use Wikibase\DataModel\Entity\ItemId; -use Wikibase\DataModel\Snak\Snak; use Wikibase\DataModel\Statement\Statement; use Wikibase\DataModel\Statement\StatementList; use Wikibase\DataModel\Term\Term; @@ -12,13 +11,12 @@ use Wikibase\Lexeme\DataModel\FormId; use Wikibase\Lexeme\DataModel\Lexeme; use Wikibase\Lexeme\DataModel\LexemeId; -use Wikibase\Repo\Tests\NewStatement; /** * @method static NewForm havingRepresentation (string $language, string $representation) * @method static NewForm havingLexeme (Lexeme | LexemeId | string $lexeme) * @method static NewForm havingId (FormId | string $formId) - * @method static NewForm havingStatement (Statement | Snak | NewStatement $statement) + * @method static NewForm havingStatement (NewStatement $statement) * @method static NewForm havingGrammaticalFeature (ItemId | string $itemId) */ class NewForm { @@ -133,19 +131,13 @@ } /** - * @param Statement|Snak|NewStatement $statement + * @param NewStatement $statement * * @return self */ public function andStatement( $statement ) { $result = clone $this; - if ( $statement instanceof NewStatement ) { - $statement = $statement->build(); - } elseif ( $statement instanceof Snak ) { - $statement = new Statement( $statement ); - } - $result->statements[] = $statement; - + $result->statements[] = $statement->build(); return $result; } diff --git a/tests/phpunit/composer/DataModel/NewSense.php b/tests/phpunit/composer/DataModel/NewSense.php index f4c359d..34b0a9d 100644 --- a/tests/phpunit/composer/DataModel/NewSense.php +++ b/tests/phpunit/composer/DataModel/NewSense.php @@ -2,16 +2,12 @@ namespace Wikibase\Lexeme\Tests\DataModel; -use Wikibase\DataModel\Entity\PropertyId; -use Wikibase\DataModel\Snak\PropertyNoValueSnak; -use Wikibase\DataModel\Snak\Snak; use Wikibase\DataModel\Statement\Statement; use Wikibase\DataModel\Statement\StatementList; use Wikibase\DataModel\Term\Term; use Wikibase\DataModel\Term\TermList; use Wikibase\Lexeme\DataModel\Sense; use Wikibase\Lexeme\DataModel\SenseId; -use Wikibase\Repo\Tests\NewStatement; /** * Sense builder to use in tests @@ -45,7 +41,7 @@ } /** - * @param Statement|Snak|PropertyId $arg + * @param NewStatement $arg * * @return self */ @@ -81,21 +77,13 @@ } /** - * @param Statement|Snak|PropertyId|NewStatement $arg + * @param NewStatement $arg * * @return self */ public function withStatement( $arg ) { $result = clone $this; - $statement = $arg; - if ( $arg instanceof NewStatement ) { - $statement = $arg->build(); - } elseif ( $arg instanceof PropertyId ) { - $statement = new Statement( new PropertyNoValueSnak( $arg ) ); - } elseif ( $arg instanceof Snak ) { - $statement = new Statement( $arg ); - } - $result->statements[] = clone $statement; + $result->statements[] = $arg->build(); return $result; } diff --git a/tests/phpunit/composer/DataModel/NewStatement.php b/tests/phpunit/composer/DataModel/NewStatement.php new file mode 100644 index 0000000..ba58f33 --- /dev/null +++ b/tests/phpunit/composer/DataModel/NewStatement.php @@ -0,0 +1,149 @@ +<?php + +namespace Wikibase\Lexeme\Tests\DataModel; + +use DataValues\DataValue; +use DataValues\StringValue; +use Wikibase\DataModel\Entity\EntityId; +use Wikibase\DataModel\Entity\EntityIdValue; +use Wikibase\DataModel\Entity\PropertyId; +use Wikibase\DataModel\Snak\PropertyNoValueSnak; +use Wikibase\DataModel\Snak\PropertySomeValueSnak; +use Wikibase\DataModel\Snak\PropertyValueSnak; +use Wikibase\DataModel\Snak\Snak; +use Wikibase\DataModel\Statement\Statement; + +/** + * @license GPL-2.0+ + */ +class NewStatement { + + /** + * @var PropertyId + */ + private $propertyId; + + /** + * @var DataValue|string|null + */ + private $dataValue; + + /** + * @var Snak[] + */ + private $qualifiers = []; + + /** + * @var bool + */ + private $guid; + + /** + * @param string $propertyId + * @return self + */ + public static function forProperty( $propertyId ) { + $result = new self(); + $result->propertyId = new PropertyId( $propertyId ); + return $result; + } + + /** + * @param string $propertyId + * @return self + */ + public static function someValueFor( $propertyId ) { + $result = self::forProperty( $propertyId ); + $result->dataValue = PropertySomeValueSnak::class; + return $result; + } + + private function __construct() { + } + + /** + * @param EntityId|string $value + * @return self + */ + public function withValue( $value ) { + $result = clone $this; + if ( $value instanceof EntityId ) { + $result->dataValue = new EntityIdValue( $value ); + } else { + $result->dataValue = new StringValue( $value ); + } + return $result; + } + + /** + * @param string $propertyId + * @param EntityId $value + * @return self + */ + public function withQualifier( $propertyId, $value ) { + $result = clone $this; + $result->qualifiers[] = new PropertyValueSnak( + new PropertyId( $propertyId ), + new EntityIdValue( $value ) + ); + return $result; + } + + /** + * @param string $guid + * @return self + */ + public function withGuid( $guid ) { + $result = clone $this; + $result->guid = $guid; + return $result; + } + + /** + * @return self + */ + public function withSomeGuid() { + $result = clone $this; + $result->guid = true; + return $result; + } + + public function build() { + if ( $this->dataValue === PropertySomeValueSnak::class ) { + $snak = new PropertySomeValueSnak( $this->propertyId ); + } elseif ( $this->dataValue ) { + $snak = new PropertyValueSnak( $this->propertyId, $this->dataValue ); + } else { + $snak = new PropertyNoValueSnak( $this->propertyId ); + } + + $statement = new Statement( $snak ); + + if ( $this->guid === true ) { + $statement->setGuid( $this->propertyId->getSerialization() . '$' . $this->newGuid() ); + } elseif ( $this->guid ) { + $statement->setGuid( $this->guid ); + } + + foreach ( $this->qualifiers as $qualifier ) { + $statement->getQualifiers()->addSnak( $qualifier ); + } + + return $statement; + } + + private function newGuid() { + return sprintf( + '%04X%04X-%04X-%04X-%04X-%04X%04X%04X', + mt_rand( 0, 0xffff ), + mt_rand( 0, 0xffff ), + mt_rand( 0, 0xffff ), + mt_rand( 0, 0x0fff ) | 0x4000, + mt_rand( 0, 0x3fff ) | 0x8000, + mt_rand( 0, 0xffff ), + mt_rand( 0, 0xffff ), + mt_rand( 0, 0xffff ) + ); + } + +} diff --git a/tests/phpunit/composer/DataModel/Serialization/ExternalLexemeSerializerTest.php b/tests/phpunit/composer/DataModel/Serialization/ExternalLexemeSerializerTest.php index e4d849d..6cf04b5 100644 --- a/tests/phpunit/composer/DataModel/Serialization/ExternalLexemeSerializerTest.php +++ b/tests/phpunit/composer/DataModel/Serialization/ExternalLexemeSerializerTest.php @@ -17,6 +17,7 @@ use Wikibase\Lexeme\Tests\DataModel\NewForm; use Wikibase\Lexeme\Tests\DataModel\NewLexeme; use Wikibase\Lexeme\Tests\DataModel\NewSense; +use Wikibase\Lexeme\Tests\DataModel\NewStatement; /** * @covers \Wikibase\Lexeme\DataModel\Serialization\ExternalLexemeSerializer @@ -182,7 +183,7 @@ public function testSerializesStatementsOnForms() { $lexeme = NewLexeme::havingForm( - NewForm::havingStatement( new PropertyNoValueSnak( new PropertyId( 'P2' ) ) ) + NewForm::havingStatement( NewStatement::forProperty( 'P2' ) ) )->build(); $serialization = $this->newSerializer()->serialize( $lexeme ); @@ -249,7 +250,7 @@ public function testSerializesStatementsOnSenses() { $lexeme = NewLexeme::create() ->withSense( - NewSense::havingStatement( new PropertyId( 'P2' ) ) + NewSense::havingStatement( NewStatement::forProperty( 'P2' ) ) ) ->build(); diff --git a/tests/phpunit/composer/DataModel/Serialization/StorageLexemeSerializerTest.php b/tests/phpunit/composer/DataModel/Serialization/StorageLexemeSerializerTest.php index a717ca1..ff7ee8a 100644 --- a/tests/phpunit/composer/DataModel/Serialization/StorageLexemeSerializerTest.php +++ b/tests/phpunit/composer/DataModel/Serialization/StorageLexemeSerializerTest.php @@ -17,7 +17,6 @@ use Wikibase\DataModel\Serializers\TermSerializer; use Wikibase\DataModel\Snak\PropertyNoValueSnak; use Wikibase\DataModel\Snak\PropertySomeValueSnak; -use Wikibase\DataModel\Snak\PropertyValueSnak; use Wikibase\Lexeme\DataModel\Lexeme; use Wikibase\Lexeme\DataModel\LexemeId; use Wikibase\Lexeme\DataModel\Serialization\LexemeDeserializer; @@ -25,6 +24,7 @@ use Wikibase\Lexeme\Tests\DataModel\NewForm; use Wikibase\Lexeme\Tests\DataModel\NewLexeme; use Wikibase\Lexeme\Tests\DataModel\NewSense; +use Wikibase\Lexeme\Tests\DataModel\NewStatement; use Wikibase\Lexeme\Tests\ErisGenerators\ErisTest; use Wikibase\Lexeme\Tests\ErisGenerators\WikibaseLexemeGenerators; @@ -91,23 +91,20 @@ ->andRepresentation( 'en', 'color' ) ->andRepresentation( 'en_gb', 'colour' ) ->andGrammaticalFeature( 'Q3' ) - ->andStatement( new PropertyNoValueSnak( new PropertyId( 'P1' ) ) ) + ->andStatement( NewStatement::forProperty( 'P1' ) ) )->withForm( NewForm::havingId( 'F2' ) ->andRepresentation( 'en', 'colors' ) ->andRepresentation( 'en_gb', 'colours' ) ->andGrammaticalFeature( 'Q4' ) - ->andStatement( new PropertySomeValueSnak( new PropertyId( 'P2' ) ) ) + ->andStatement( NewStatement::someValueFor( 'P2' ) ) )->withSense( NewSense::havingId( 'S1' ) ->withGloss( 'en', 'the property of an object of producing different sensations on the eye' - )->withStatement( - new PropertyValueSnak( - new PropertyId( 'P3' ), - new EntityIdValue( new ItemId( 'Q5' ) ) - ) + )->withStatement( NewStatement::forProperty( 'P3' ) + ->withValue( new ItemId( 'Q5' ) ) ) )->withStatement( new PropertySomeValueSnak( new PropertyId( 'P4' ) ) ) ->withStatement( new PropertyNoValueSnak( new PropertyId( 'P5' ) ) ) diff --git a/tests/phpunit/composer/DataModel/Services/Diff/FormDifferPatcherTest.php b/tests/phpunit/composer/DataModel/Services/Diff/FormDifferPatcherTest.php index a6aba3c..1c6b8da 100644 --- a/tests/phpunit/composer/DataModel/Services/Diff/FormDifferPatcherTest.php +++ b/tests/phpunit/composer/DataModel/Services/Diff/FormDifferPatcherTest.php @@ -3,14 +3,12 @@ namespace Wikibase\Lexeme\Tests\DataModel\Services\Diff; use Wikibase\DataModel\Entity\ItemId; -use Wikibase\DataModel\Entity\PropertyId; -use Wikibase\DataModel\Snak\PropertySomeValueSnak; -use Wikibase\DataModel\Statement\Statement; use Wikibase\Lexeme\DataModel\Form; use Wikibase\Lexeme\DataModel\FormId; use Wikibase\Lexeme\DataModel\Services\Diff\FormDiffer; use Wikibase\Lexeme\DataModel\Services\Diff\FormPatcher; use Wikibase\Lexeme\Tests\DataModel\NewForm; +use Wikibase\Lexeme\Tests\DataModel\NewStatement; use Wikibase\Lexeme\Tests\ErisGenerators\ErisTest; use Wikibase\Lexeme\Tests\ErisGenerators\WikibaseLexemeGenerators; @@ -194,14 +192,13 @@ } /** - * @return mixed + * @param string $propertyId + * @param string $guid + * + * @return NewStatement */ private function someStatement( $propertyId, $guid ) { - $statement = new Statement( - new PropertySomeValueSnak( new PropertyId( $propertyId ) ) - ); - $statement->setGuid( $guid ); - return $statement; + return NewStatement::someValueFor( $propertyId )->withGuid( $guid ); } } -- To view, visit https://gerrit.wikimedia.org/r/392435 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I53cd1f571d0100f9b8d976022c990b126615e72b Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikibaseLexeme Gerrit-Branch: master Gerrit-Owner: Thiemo Mättig (WMDE) <thiemo.kr...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits