Skip to content

Commit 5114c1d

Browse files
JeroenDeDauwaddshore
authored andcommitted
Add TermList::add
So TermListMerger in WikibaseLexeme can be removed Note that TermListMerger does a not needed hasTerm check which has been omitted here
1 parent 83334a1 commit 5114c1d

2 files changed

Lines changed: 60 additions & 0 deletions

File tree

src/Term/TermList.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,15 @@ public function clear() {
195195
$this->terms = [];
196196
}
197197

198+
/**
199+
* @since 8.1
200+
*
201+
* @param iterable|Term[] $terms
202+
*/
203+
public function add( /* iterable */ $terms ) {
204+
foreach ( $terms as $term ) {
205+
$this->setTerm( $term );
206+
}
207+
}
208+
198209
}

tests/unit/Term/TermListTest.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,4 +408,53 @@ public function testClear() {
408408
$this->assertEquals( new TermList(), $list );
409409
}
410410

411+
public function testWhenAddingTermsToAListThatDoesNotContainThem_theyGetAdded() {
412+
$enTerm = new Term( 'en', 'foo' );
413+
$deTerm = new Term( 'de', 'bar' );
414+
415+
$terms = new TermList();
416+
$terms->add( [ $enTerm, $deTerm ] );
417+
418+
$this->assertEquals( $enTerm, $terms->getByLanguage( 'en' ) );
419+
$this->assertEquals( $deTerm, $terms->getByLanguage( 'de' ) );
420+
}
421+
422+
public function testWhenAddingTermsToAListThatDoesContainThem_theyOverrideTheExistingOnes() {
423+
$enTerm = new Term( 'en', 'foo' );
424+
425+
$newEnTerm = new Term( 'en', 'NEW' );
426+
427+
$terms = new TermList( [ $enTerm ] );
428+
$terms->add( [ $newEnTerm ] );
429+
430+
$this->assertEquals( $newEnTerm, $terms->getByLanguage( 'en' ) );
431+
}
432+
433+
public function testWhenAddingTerms_existingOnesAreNotLost() {
434+
$enTerm = new Term( 'en', 'foo' );
435+
$deTerm = new Term( 'de', 'bar' );
436+
437+
$terms = new TermList( [ $enTerm ] );
438+
$terms->add( [ $deTerm ] );
439+
440+
$this->assertEquals( $enTerm, $terms->getByLanguage( 'en' ) );
441+
}
442+
443+
public function testCanAddTermIterables() {
444+
$enTerm = new Term( 'en', 'foo' );
445+
446+
$terms = new TermList();
447+
$terms->add( new TermList( [ $enTerm ] ) );
448+
449+
$this->assertEquals( $enTerm, $terms->getByLanguage( 'en' ) );
450+
}
451+
452+
public function testWhenAddingEmptyTerms_theyRemoveExistingOnes() {
453+
$terms = new TermList( [ new Term( 'en', 'not-empty' ) ] );
454+
455+
$terms->add( [ new Term( 'en', '' ) ] );
456+
457+
$this->assertEquals( new TermList(), $terms );
458+
}
459+
411460
}

0 commit comments

Comments
 (0)