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

Reply via email to