jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/360624 )
Change subject: Serialize statements on Senses in LexemeSerializer ...................................................................... Serialize statements on Senses in LexemeSerializer Also, renamed `SenseBuilder` to `NewSense` to conform to standard Change-Id: I10560c3595d5f7680f7326ddb1cf245ed9dec9a6 --- M src/DataModel/Serialization/LexemeSerializer.php M tests/phpunit/composer/DataModel/LexemeBuilder.php A tests/phpunit/composer/DataModel/NewSense.php D tests/phpunit/composer/DataModel/SenseBuilder.php M tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php 5 files changed, 145 insertions(+), 64 deletions(-) Approvals: Aleksey Bekh-Ivanov (WMDE): Looks good to me, approved jenkins-bot: Verified diff --git a/src/DataModel/Serialization/LexemeSerializer.php b/src/DataModel/Serialization/LexemeSerializer.php index 9a57652..82cb777 100644 --- a/src/DataModel/Serialization/LexemeSerializer.php +++ b/src/DataModel/Serialization/LexemeSerializer.php @@ -178,6 +178,10 @@ $serialization['id'] = $sense->getId()->getSerialization(); $serialization['glosses'] = $this->termListSerializer->serialize( $sense->getGlosses() ); + $serialization['claims'] = $this->statementListSerializer->serialize( + $sense->getStatements() + ); + return $serialization; } diff --git a/tests/phpunit/composer/DataModel/LexemeBuilder.php b/tests/phpunit/composer/DataModel/LexemeBuilder.php index ed6fab1..1a34932 100644 --- a/tests/phpunit/composer/DataModel/LexemeBuilder.php +++ b/tests/phpunit/composer/DataModel/LexemeBuilder.php @@ -143,13 +143,13 @@ } /** - * @param Sense|SenseBuilder $sense + * @param Sense|NewSense $sense * @return self */ public function withSense( $sense ) { $result = clone $this; - if ( $sense instanceof SenseBuilder ) { + if ( $sense instanceof NewSense ) { $sense = $sense->build(); } elseif ( !$sense instanceof Sense ) { throw new \InvalidArgumentException( '$sense has incorrect type' ); diff --git a/tests/phpunit/composer/DataModel/NewSense.php b/tests/phpunit/composer/DataModel/NewSense.php new file mode 100644 index 0000000..8ff1482 --- /dev/null +++ b/tests/phpunit/composer/DataModel/NewSense.php @@ -0,0 +1,114 @@ +<?php + +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; + +/** + * Sense builder to use in tests + */ +class NewSense { + + /** + * @var SenseId + */ + private $senseId; + + /** + * @var Term[] Indexed by language + */ + private $glosses = []; + + /** + * @var Statement[] + */ + private $statements = []; + + /** + * @param SenseId|string $senseId + * @return NewSense + */ + public static function havingId( $senseId ) { + $senseBuilder = new self(); + $senseBuilder->senseId = $senseId instanceof SenseId ? $senseId : new SenseId( $senseId ); + return $senseBuilder; + } + + /** + * @param Statement|Snak|PropertyId $arg + * @return NewSense + */ + public static function havingStatement( $arg ) { + return ( new self() )->withStatement( $arg ); + } + + private function __construct() { + $this->senseId = $this->generateSenseId(); + } + + public function __clone() { + // Statements are mutable, so clone them individually + $statements = []; + foreach ( $this->statements as $statement ) { + $statements[] = clone $statement; + } + $this->statements = $statements; + } + + /** + * @param string $language + * @param string $gloss + * + * @return NewSense + */ + public function withGloss( $language, $gloss ) { + $result = clone $this; + if ( isset( $result->glosses[$language] ) ) { + throw new \LogicException( + "Gloss with language '{$language}' is already set. " + . "You're not allowed overwriting it." + ); + } + $result->glosses[$language] = new Term( $language, $gloss ); + return $result; + } + + /** + * @param Statement|Snak|PropertyId $arg + * + * @return NewSense + */ + public function withStatement( $arg ) { + $result = clone $this; + $statement = $arg; + if ( $arg instanceof PropertyId ) { + $statement = new Statement( new PropertyNoValueSnak( $arg ) ); + } + if ( $arg instanceof Snak ) { + $statement = new Statement( $arg ); + } + $result->statements[] = clone $statement; + return $result; + } + + public function build() { + return new Sense( + $this->senseId, + new TermList( $this->glosses ), + new StatementList( $this->statements ) + ); + } + + private function generateSenseId() { + return new SenseId( 'S' . mt_rand( 1, 4e9 ) ); + } + +} diff --git a/tests/phpunit/composer/DataModel/SenseBuilder.php b/tests/phpunit/composer/DataModel/SenseBuilder.php deleted file mode 100644 index ba8c10e..0000000 --- a/tests/phpunit/composer/DataModel/SenseBuilder.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -namespace Wikibase\Lexeme\Tests\DataModel; - -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; - -class SenseBuilder { - - /** - * @var SenseId - */ - private $senseId; - - /** - * @var Term[] Indexed by language - */ - private $glosses = []; - - /** - * @param SenseId|string $senseId - * @return SenseBuilder - */ - public static function havingId( $senseId ) { - $senseId = $senseId instanceof SenseId ? $senseId : new SenseId( $senseId ); - return new self( $senseId ); - } - - private function __construct( SenseId $senseId ) { - $this->senseId = $senseId; - } - - /** - * @param string $language - * @param string $gloss - * - * @return SenseBuilder - */ - public function withGloss( $language, $gloss ) { - $result = clone $this; - if ( isset( $result->glosses[$language] ) ) { - throw new \LogicException( - "Gloss with language '{$language}' is already set. " - . "You're not allowed overwriting it." - ); - } - $result->glosses[$language] = new Term( $language, $gloss ); - return $result; - } - - public function build() { - return new Sense( $this->senseId, new TermList( $this->glosses ), new StatementList( [] ) ); - } - -} diff --git a/tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php b/tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php index 0f63b88..2d3f133 100644 --- a/tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php +++ b/tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php @@ -12,6 +12,7 @@ use Wikibase\DataModel\Snak\PropertyNoValueSnak; use Wikibase\DataModel\Statement\Statement; use Wikibase\DataModel\Statement\StatementList; +use Wikibase\DataModel\Term\Term; use Wikibase\DataModel\Term\TermList; use Wikibase\Lexeme\DataModel\Lexeme; use Wikibase\Lexeme\DataModel\LexemeForm; @@ -20,7 +21,7 @@ use Wikibase\Lexeme\DataModel\SenseId; use Wikibase\Lexeme\DataModel\Serialization\LexemeSerializer; use Wikibase\Lexeme\Tests\DataModel\LexemeBuilder; -use Wikibase\Lexeme\Tests\DataModel\SenseBuilder; +use Wikibase\Lexeme\Tests\DataModel\NewSense; /** * @covers Wikibase\Lexeme\DataModel\Serialization\LexemeSerializer @@ -232,8 +233,8 @@ public function testSerializeSensesIds() { $lexeme = LexemeBuilder::create() - ->withSense( SenseBuilder::havingId( 'S1' ) ) - ->withSense( SenseBuilder::havingId( 'S2' ) ) + ->withSense( NewSense::havingId( 'S1' ) ) + ->withSense( NewSense::havingId( 'S2' ) ) ->build(); $serialization = $this->newSerializer()->serialize( $lexeme ); @@ -249,7 +250,7 @@ public function testSerializeGlossesOnSenses() { $lexeme = LexemeBuilder::create() ->withSense( - SenseBuilder::havingId( 'S1' ) + NewSense::havingId( 'S1' ) ->withGloss( 'en', 'en gloss' ) ->withGloss( 'fr', 'fr gloss' ) ) @@ -270,4 +271,24 @@ ) ); } + public function testSerializesStatementsOnSenses() { + $lexeme = LexemeBuilder::create() + ->withSense( + NewSense::havingStatement( new PropertyId( 'P2' ) ) + ) + ->build(); + + $serialization = $this->newSerializer()->serialize( $lexeme ); + + assertThat( + $serialization, + hasKeyValuePair( + 'senses', + hasItemInArray( + hasKeyValuePair( 'claims', 'P2' ) + ) + ) + ); + } + } -- To view, visit https://gerrit.wikimedia.org/r/360624 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I10560c3595d5f7680f7326ddb1cf245ed9dec9a6 Gerrit-PatchSet: 9 Gerrit-Project: mediawiki/extensions/WikibaseLexeme Gerrit-Branch: master Gerrit-Owner: WMDE-leszek <leszek.mani...@wikimedia.de> Gerrit-Reviewer: Aleksey Bekh-Ivanov (WMDE) <aleksey.bekh-iva...@wikimedia.de> Gerrit-Reviewer: WMDE-leszek <leszek.mani...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits