Skip to content

Commit 421b09c

Browse files
committed
Merge pull request #481 from wmde/setstatements
Add setStatements to StatementList
2 parents 1e085d2 + 154cc60 commit 421b09c

3 files changed

Lines changed: 49 additions & 0 deletions

File tree

RELEASE-NOTES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Other breaking changes:
4444
* Added `StatementByGuidMap`
4545
* Added `StatementList::getFirstStatementWithGuid`
4646
* Added `StatementList::removeStatementsWithGuid`
47+
* Added `StatementList::setStatements`
4748
* `ReferenceList::addNewReference` and `Statement::addNewReference` support an array of Snaks now
4849
* Added PHPMD support
4950

src/Statement/StatementList.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,22 @@ public function __construct( $statements = array() /*...*/ ) {
4545
$statements = func_get_args();
4646
}
4747

48+
$this->setStatements( $statements );
49+
}
50+
51+
/**
52+
* @since 3.0
53+
*
54+
* @param Statement[]|Traversable
55+
*
56+
* @throws InvalidArgumentException
57+
*/
58+
public function setStatements( $statements ) {
4859
if ( !is_array( $statements ) && !( $statements instanceof Traversable ) ) {
4960
throw new InvalidArgumentException( '$statements must be an array or an instance of Traversable' );
5061
}
5162

63+
$this->statements = array();
5264
foreach ( $statements as $statement ) {
5365
if ( !( $statement instanceof Statement ) ) {
5466
throw new InvalidArgumentException( 'Every element in $statements must be an instance of Statement' );

tests/unit/Statement/StatementListTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,4 +666,40 @@ public function testGivenInvalidGuid_getFirstStatementWithGuidReturnsNull() {
666666
$this->assertNull( $statements->getFirstStatementWithGuid( false ) );
667667
}
668668

669+
public function testGivenEmptyStatementList_setStatementsFillsIt() {
670+
$statement1 = $this->getStatement( 1, 'guid1' );
671+
$statement2 = $this->getStatement( 2, 'guid2' );
672+
$statement3 = $this->getStatement( 3, 'guid3' );
673+
$statement4 = $this->getStatement( 2, 'guid5' );
674+
$statements = new StatementList();
675+
676+
$statements->setStatements( array( $statement1, $statement2, $statement3, $statement4 ) );
677+
$this->assertEquals(
678+
new StatementList( $statement1, $statement2, $statement3, $statement4 ),
679+
$statements
680+
);
681+
}
682+
683+
public function testGivenFilledStatementList_setStatementsOverridesIt() {
684+
$statement1 = $this->getStatement( 1, 'guid1' );
685+
$statement2 = $this->getStatement( 2, 'guid2' );
686+
$statement3 = $this->getStatement( 3, 'guid3' );
687+
$statement4 = $this->getStatement( 2, 'guid5' );
688+
$statements = new StatementList( $statement1, $statement2, $statement3, $statement4 );
689+
690+
$statements->setStatements( array( $statement1, $statement4 ) );
691+
$this->assertEquals(
692+
new StatementList( $statement1, $statement4 ),
693+
$statements
694+
);
695+
}
696+
697+
public function testGivenNoTraversable_setStatementsThrowsException() {
698+
$statement1 = $this->getStatement( 1, 'guid1' );
699+
$statements = new StatementList();
700+
701+
$this->setExpectedException( 'InvalidArgumentException' );
702+
$statements->setStatements( $statement1 );
703+
}
704+
669705
}

0 commit comments

Comments
 (0)