@@ -44,6 +44,12 @@ public function testCanConstructWithReferenceListObject() {
4444 $ this ->assertNotNull ( $ copy ->getReference ( $ reference ->getHash () ) );
4545 }
4646
47+ public function testConstructorDoesNotIgnoreCopies () {
48+ $ reference = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
49+ $ list = new ReferenceList ( array ( $ reference , clone $ reference ) );
50+ $ this ->assertCount ( 2 , $ list );
51+ }
52+
4753 /**
4854 * @dataProvider invalidConstructorArgumentsProvider
4955 * @expectedException InvalidArgumentException
@@ -188,6 +194,14 @@ public function testAddReferenceOnNonEmptyList() {
188194 $ this ->assertSameReferenceOrder ( $ expectedList , $ references );
189195 }
190196
197+ public function testAddReferenceDoesNotIgnoreCopies () {
198+ $ list = new ReferenceList ();
199+ $ reference = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
200+ $ list ->addReference ( $ reference );
201+ $ list ->addReference ( clone $ reference );
202+ $ this ->assertCount ( 2 , $ list );
203+ }
204+
191205 public function testAddReferenceAtIndexZero () {
192206 $ reference1 = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
193207 $ reference2 = new Reference ( array ( new PropertyNoValueSnak ( 2 ) ) );
@@ -390,30 +404,68 @@ public function testGivenAnArrayOfSnaks_addNewReferenceAddsThem() {
390404 $ this ->assertTrue ( $ references ->hasReference ( new Reference ( $ snaks ) ) );
391405 }
392406
407+ public function testAddNewReferenceDoesNotIgnoreIdenticalObjects () {
408+ $ list = new ReferenceList ();
409+ $ snak = new PropertyNoValueSnak ( 1 );
410+ $ list ->addNewReference ( $ snak );
411+ $ list ->addNewReference ( $ snak );
412+ $ this ->assertCount ( 2 , $ list );
413+ }
414+
415+ public function testAddNewReferenceDoesNotIgnoreCopies () {
416+ $ list = new ReferenceList ();
417+ $ snak = new PropertyNoValueSnak ( 1 );
418+ $ list ->addNewReference ( $ snak );
419+ $ list ->addNewReference ( clone $ snak );
420+ $ this ->assertCount ( 2 , $ list );
421+ }
422+
393423 public function testGivenNoneSnak_addNewReferenceThrowsException () {
394424 $ references = new ReferenceList ();
395425
396426 $ this ->setExpectedException ( 'InvalidArgumentException ' );
397427 $ references ->addNewReference ( new PropertyNoValueSnak ( 1 ), null );
398428 }
399429
430+ public function testEmptySerializationStability () {
431+ $ list = new ReferenceList ();
432+ $ this ->assertSame ( 'a:0:{} ' , $ list ->serialize () );
433+ }
434+
400435 public function testSerializationStability () {
401- $ references = new ReferenceList ();
402- $ this ->assertSame ( 'a:0:{} ' , $ references ->serialize () );
436+ $ list = new ReferenceList ();
437+ $ list ->addNewReference ( new PropertyNoValueSnak ( 1 ) );
438+ $ this ->assertSame (
439+ "a:1:{i:0;O:28: \"Wikibase \\DataModel \\Reference \":1:{s:35: \"\x00Wikibase \\DataModel \\"
440+ . "Reference \x00snaks \";C:32: \"Wikibase \\DataModel \\Snak \\SnakList \":102:{a:2:{s:4: \""
441+ . 'data";a:1:{i:0;C:43:"Wikibase \\DataModel \\Snak \\PropertyNoValueSnak":4:{i:1;}}s:5 '
442+ . ':"index";i:0;}}}} ' ,
443+ $ list ->serialize ()
444+ );
403445 }
404446
405- public function testSerializeRoundtrip () {
406- $ references = new ReferenceList ();
447+ public function testSerializeUnserializeRoundtrip () {
448+ $ original = new ReferenceList ();
449+ $ original ->addNewReference ( new PropertyNoValueSnak ( 1 ) );
407450
408- $ references ->addReference ( new Reference () );
451+ /** @var ReferenceList $clone */
452+ $ clone = unserialize ( serialize ( $ original ) );
409453
410- $ references ->addReference ( new Reference ( array (
411- new PropertyNoValueSnak ( 2 ),
412- new PropertyNoValueSnak ( 3 ),
413- ) ) );
454+ $ this ->assertTrue ( $ original ->equals ( $ clone ) );
455+ $ this ->assertSame ( $ original ->getValueHash (), $ clone ->getValueHash () );
456+ $ this ->assertSame ( $ original ->serialize (), $ clone ->serialize () );
457+ }
458+
459+ public function testUnserializeCreatesNonIdenticalClones () {
460+ $ original = new ReferenceList ();
461+ $ reference = new Reference ( array ( new PropertyNoValueSnak ( 1 ) ) );
462+ $ original ->addReference ( $ reference );
463+
464+ /** @var ReferenceList $clone */
465+ $ clone = unserialize ( serialize ( $ original ) );
466+ $ clone ->addReference ( $ reference );
414467
415- $ serialized = serialize ( $ references );
416- $ this ->assertTrue ( $ references ->equals ( unserialize ( $ serialized ) ) );
468+ $ this ->assertCount ( 2 , $ clone );
417469 }
418470
419471 public function testGivenEmptyList_isEmpty () {
0 commit comments