@@ -157,6 +157,26 @@ public function testRemoveReference( ReferenceList $array ) {
157157 $ this ->assertTrue ( true );
158158 }
159159
160+ public function testRemoveReferenceRemovesIdenticalObjects () {
161+ $ reference = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
162+ $ references = new ReferenceList ( array ( $ reference , $ reference ) );
163+
164+ $ references ->removeReference ( $ reference );
165+
166+ $ this ->assertTrue ( $ references ->isEmpty () );
167+ }
168+
169+ public function testRemoveReferenceDoesNotRemoveCopies () {
170+ $ reference = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
171+ $ references = new ReferenceList ( array ( $ reference , clone $ reference ) );
172+
173+ $ references ->removeReference ( $ reference );
174+
175+ $ this ->assertFalse ( $ references ->isEmpty () );
176+ $ this ->assertTrue ( $ references ->hasReference ( $ reference ) );
177+ $ this ->assertNotSame ( $ reference , $ references ->getReference ( $ reference ->getHash () ) );
178+ }
179+
160180 public function testAddReferenceOnEmptyList () {
161181 $ reference = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
162182
@@ -330,6 +350,36 @@ public function testRemoveReferenceHash( ReferenceList $references ) {
330350 $ this ->assertEquals ( 0 , count ( $ references ) );
331351 }
332352
353+ public function testRemoveReferenceHashRemovesIdenticalObjects () {
354+ $ reference = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
355+ $ references = new ReferenceList ( array ( $ reference , $ reference ) );
356+
357+ $ references ->removeReferenceHash ( $ reference ->getHash () );
358+
359+ $ this ->assertTrue ( $ references ->isEmpty () );
360+ }
361+
362+ public function testRemoveReferenceHashDoesNotRemoveCopies () {
363+ $ reference = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
364+ $ references = new ReferenceList ( array ( $ reference , clone $ reference ) );
365+
366+ $ references ->removeReferenceHash ( $ reference ->getHash () );
367+
368+ $ this ->assertFalse ( $ references ->isEmpty () );
369+ $ this ->assertTrue ( $ references ->hasReference ( $ reference ) );
370+ $ this ->assertNotSame ( $ reference , $ references ->getReference ( $ reference ->getHash () ) );
371+ }
372+
373+ public function testRemoveReferenceHashUpdatesIndexes () {
374+ $ reference1 = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
375+ $ reference2 = new Reference ( array ( new PropertyNoValueSnak ( 2 ) ) );
376+ $ references = new ReferenceList ( array ( $ reference1 , $ reference2 ) );
377+
378+ $ references ->removeReferenceHash ( $ reference1 ->getHash () );
379+
380+ $ this ->assertSame ( 0 , $ references ->indexOf ( $ reference2 ) );
381+ }
382+
333383 public function testGivenOneSnak_addNewReferenceAddsSnak () {
334384 $ references = new ReferenceList ();
335385 $ snak = new PropertyNoValueSnak ( 1 );
0 commit comments