Henning Snater has uploaded a new change for review. https://gerrit.wikimedia.org/r/89010
Change subject: Implemented indexOf method in ReferenceList ...................................................................... Implemented indexOf method in ReferenceList Change-Id: I28610f2f052ff1e56630673438913832d8920b9c --- M DataModel/ReferenceList.php M DataModel/References.php M tests/phpunit/ReferenceListTest.php 3 files changed, 70 insertions(+), 6 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseDataModel refs/changes/10/89010/1 diff --git a/DataModel/ReferenceList.php b/DataModel/ReferenceList.php index f1ef372..0a60b6e 100644 --- a/DataModel/ReferenceList.php +++ b/DataModel/ReferenceList.php @@ -21,6 +21,7 @@ * * @licence GNU GPL v2+ * @author Jeroen De Dauw < [email protected] > + * @author H. Snater < [email protected] > */ class ReferenceList extends HashableObjectStorage implements References { @@ -82,6 +83,28 @@ } /** + * @see References::indexOf + * + * @since 0.1 + * + * @param Reference $reference + * + * @return int|boolean + */ + public function indexOf( Reference $reference ) { + $index = 0; + + foreach( $this as $object ) { + if( $object === $reference ) { + return $index; + } + $index++; + } + + return false; + } + + /** * @see References::removeReference * * @since 0.1 diff --git a/DataModel/References.php b/DataModel/References.php index 3ca2e67..c7c0ac8 100644 --- a/DataModel/References.php +++ b/DataModel/References.php @@ -37,6 +37,17 @@ public function hasReference( Reference $reference ); /** + * Returns the index of a reference or false if the reference could not be found. + * + * @since 0.1 + * + * @param Reference $reference + * + * @return int|boolean + */ + public function indexOf( Reference $reference ); + + /** * Removes the reference with the same hash as the provided reference if such a reference exists in the list. * * @since 0.1 diff --git a/tests/phpunit/ReferenceListTest.php b/tests/phpunit/ReferenceListTest.php index a265463..607d2fd 100644 --- a/tests/phpunit/ReferenceListTest.php +++ b/tests/phpunit/ReferenceListTest.php @@ -3,8 +3,10 @@ namespace Wikibase\Test; use Hashable; +use Wikibase\PropertyNoValueSnak; use Wikibase\Reference; use Wikibase\ReferenceList; +use Wikibase\SnakList; /** * @covers Wikibase\ReferenceList @@ -41,11 +43,11 @@ } public function getElementInstances() { - $instances = array(); - - $instances[] = new Reference(); - - return $instances; + return array( + new Reference(), + new Reference( new SnakList( array( new PropertyNoValueSnak( 2 ) ) ) ), + new Reference( new SnakList( array( new PropertyNoValueSnak( 3 ) ) ) ), + ); } public function getConstructorArg() { @@ -53,6 +55,14 @@ null, array(), $this->getElementInstances(), + ); + } + + public function referenceListProvider() { + $class = $this->getInstanceClass(); + + return array( + array( new $class( $this->getElementInstances() ) ) ); } @@ -155,6 +165,20 @@ } /** + * @dataProvider referenceListProvider + * + * @param ReferenceList $array + */ + public function testIndexOf( ReferenceList $array ) { + $this->assertFalse( $array->indexOf( new Reference() ) ); + + $i = 0; + foreach( $array as $reference ) { + $this->assertEquals( $i++, $array->indexOf( $reference ) ); + } + } + + /** * @dataProvider instanceProvider * @param ReferenceList $references */ @@ -232,11 +256,17 @@ public function testRemoveReferenceHash( ReferenceList $references ) { $references->removeReferenceHash( '~=[,,_,,]:3' ); + $hashes = array(); + /** * @var Reference $reference */ foreach ( $references as $reference ) { - $references->removeReferenceHash( $reference->getHash() ); + $hashes[] = $reference->getHash(); + } + + foreach( $hashes as $hash ) { + $references->removeReferenceHash( $hash ); } $this->assertEquals( 0, count( $references ) ); -- To view, visit https://gerrit.wikimedia.org/r/89010 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I28610f2f052ff1e56630673438913832d8920b9c Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikibaseDataModel Gerrit-Branch: master Gerrit-Owner: Henning Snater <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
