Aleksey Bekh-Ivanov (WMDE) has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/376758 )

Change subject: Take Lexeme's `nextFormId` into account when compare for 
equality
......................................................................

Take Lexeme's `nextFormId` into account when compare for equality

Change-Id: I3b3e01b98dd96fa0282e6ed1d901ec65a76909cc
---
M src/DataModel/FormSet.php
M src/DataModel/Lexeme.php
M tests/phpunit/composer/DataModel/FormSetTest.php
M tests/phpunit/composer/DataModel/LexemeTest.php
4 files changed, 37 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseLexeme 
refs/changes/58/376758/1

diff --git a/src/DataModel/FormSet.php b/src/DataModel/FormSet.php
index 93018d4..6933dbc 100644
--- a/src/DataModel/FormSet.php
+++ b/src/DataModel/FormSet.php
@@ -64,4 +64,8 @@
                $this->forms[$formId] = $form;
        }
 
+       public function remove( FormId $formId ) {
+               unset( $this->forms[$formId->getSerialization()] );
+       }
+
 }
diff --git a/src/DataModel/Lexeme.php b/src/DataModel/Lexeme.php
index 7f8a4ab..81aa582 100644
--- a/src/DataModel/Lexeme.php
+++ b/src/DataModel/Lexeme.php
@@ -167,11 +167,13 @@
                        || ( $this->language !== null
                                && $this->language->equals( $target->language ) 
);
 
+               $sameFormIdCounter = $this->nextFormId === $target->nextFormId;
                $sameForms = $this->forms == $target->forms;
 
                return $this->lemmas->equals( $target->lemmas )
                        && $sameLexicalCategory
                        && $sameLanguage
+                       && $sameFormIdCounter
                        && $sameForms
                        && $this->statements->equals( $target->statements );
        }
@@ -307,6 +309,10 @@
                return $form;
        }
 
+       public function removeForm( FormId $formId ) {
+               $this->forms->remove( $formId );
+       }
+
        /**
         * @param mixed $nextFormId
         * @param Form[] $forms
diff --git a/tests/phpunit/composer/DataModel/FormSetTest.php 
b/tests/phpunit/composer/DataModel/FormSetTest.php
index b542844..d6e0134 100644
--- a/tests/phpunit/composer/DataModel/FormSetTest.php
+++ b/tests/phpunit/composer/DataModel/FormSetTest.php
@@ -2,6 +2,7 @@
 
 namespace Wikibase\Lexeme\Tests\DataModel;
 
+use Wikibase\Lexeme\DataModel\FormId;
 use Wikibase\Lexeme\DataModel\FormSet;
 
 class FormSetTest extends \PHPUnit_Framework_TestCase {
@@ -72,4 +73,12 @@
                $formSet->add( NewForm::havingId( 'F1' )->build() );
        }
 
+       public function testRemove_CanRemoveAForm() {
+               $formSet = new FormSet( [ NewForm::havingId( 'F1' )->build() ] 
);
+
+               $formSet->remove( new FormId( 'F1' ) );
+
+               $this->assertCount( 0, $formSet->toArray() );
+       }
+
 }
diff --git a/tests/phpunit/composer/DataModel/LexemeTest.php 
b/tests/phpunit/composer/DataModel/LexemeTest.php
index e290ce4..711bd19 100644
--- a/tests/phpunit/composer/DataModel/LexemeTest.php
+++ b/tests/phpunit/composer/DataModel/LexemeTest.php
@@ -275,6 +275,12 @@
 
                $language1 = new ItemId( 'Q3' );
                $language2 = new ItemId( 'Q5' );
+
+               $newLexeme = NewLexeme::create();
+               $lexemeWithInitialFormCounter = $newLexeme->build();
+               $lexemeWithChangedFormCounter = $newLexeme->withForm( 
NewForm::havingId( 'F1' ) )->build();
+               $lexemeWithChangedFormCounter->removeForm( new FormId( 'F1' ) );
+
                return [
                        'null' => [
                                new Lexeme(),
@@ -307,6 +313,10 @@
                                new Lexeme(
                                        new LexemeId( 'L1' ), null, null, null, 
null, 2, [ NewForm::havingId( 'F1' )->build() ]
                                ),
+                       ],
+                       'different internal form index counter state' => [
+                               $lexemeWithInitialFormCounter,
+                               $lexemeWithChangedFormCounter,
                        ]
                ];
        }
@@ -446,4 +456,12 @@
                $this->assertEquals( new FormId( 'F2' ), $newForm2->getId() );
        }
 
+       public function testRemoveAForm() {
+               $lexeme = NewLexeme::havingForm( NewForm::havingId( 'F1' ) 
)->build();
+
+               $lexeme->removeForm( new FormId( 'F1' ) );
+
+               $this->assertEquals( [], $lexeme->getForms() );
+       }
+
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/376758
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3b3e01b98dd96fa0282e6ed1d901ec65a76909cc
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseLexeme
Gerrit-Branch: master
Gerrit-Owner: Aleksey Bekh-Ivanov (WMDE) <aleksey.bekh-iva...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to