Skip to content

Commit b6f4a50

Browse files
committed
Merge pull request #579 from wmde/die-evil-empty-terms-o-doom
Filter out terms with empty string value in termlist
2 parents 85134eb + e920861 commit b6f4a50

2 files changed

Lines changed: 43 additions & 2 deletions

File tree

src/Term/TermList.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function __construct( array $terms = array() ) {
3636
throw new InvalidArgumentException( 'Every element in $terms must be an instance of Term' );
3737
}
3838

39-
$this->terms[$term->getLanguageCode()] = $term;
39+
$this->setTerm( $term );
4040
}
4141
}
4242

@@ -116,7 +116,12 @@ private function assertIsLanguageCode( $languageCode ) {
116116
}
117117

118118
public function setTerm( Term $term ) {
119-
$this->terms[$term->getLanguageCode()] = $term;
119+
if ( $term->getText() === '' ) {
120+
unset( $this->terms[$term->getLanguageCode()] );
121+
}
122+
else {
123+
$this->terms[$term->getLanguageCode()] = $term;
124+
}
120125
}
121126

122127
/**

tests/unit/Term/TermListTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,4 +362,40 @@ public function testGivenSomeLanguages_getWithLanguagesReturnsPartialList() {
362362
$this->assertEquals( $expectedList, $list->getWithLanguages( array( 'en', 'nl' ) ) );
363363
}
364364

365+
public function testGivenEmptyTerms_constructorOnlyAddsNonEmptyTerms() {
366+
$list = new TermList( array(
367+
new Term( 'en', 'foo' ),
368+
new Term( 'de', '' ),
369+
new Term( 'nl', 'baz' ),
370+
new Term( 'fr', '' ),
371+
) );
372+
373+
$this->assertEquals(
374+
array(
375+
'en' => new Term( 'en', 'foo' ),
376+
'nl' => new Term( 'nl', 'baz' ),
377+
),
378+
iterator_to_array( $list )
379+
);
380+
}
381+
382+
public function testGivenEmptyTerm_setTermDoesNotAddIt() {
383+
$list = new TermList();
384+
$list->setTerm( new Term( 'en', '' ) );
385+
386+
$this->assertEquals( new TermList(), $list );
387+
}
388+
389+
public function testGivenEmptyTerm_setTermRemovesExistingOne() {
390+
$list = new TermList();
391+
$list->setTerm( new Term( 'en', 'foo' ) );
392+
$list->setTerm( new Term( 'de', 'bar' ) );
393+
$list->setTerm( new Term( 'en', '' ) );
394+
395+
$this->assertEquals(
396+
new TermList( array( new Term( 'de', 'bar' ) ) ),
397+
$list
398+
);
399+
}
400+
365401
}

0 commit comments

Comments
 (0)