Skip to content

Commit 50ca6fc

Browse files
committed
Merge pull request #640 from wmde/moreRefTests
Add more regression tests for 4.x vs. 5.x compatibility
2 parents d30e2bf + 5b1bf3c commit 50ca6fc

1 file changed

Lines changed: 63 additions & 11 deletions

File tree

tests/unit/ReferenceListTest.php

Lines changed: 63 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)