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

Reply via email to