|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace Wikibase\DataModel\Tests; |
|
4
|
|
|
|
|
5
|
|
|
use Wikibase\DataModel\Fixtures\HashableObject; |
|
6
|
|
|
use Wikibase\DataModel\HashableObjectStorage; |
|
7
|
|
|
|
|
8
|
|
|
/** |
|
9
|
|
|
* @covers Wikibase\DataModel\HashableObjectStorage |
|
10
|
|
|
* |
|
11
|
|
|
* @group Wikibase |
|
12
|
|
|
* @group WikibaseDataModel |
|
13
|
|
|
* @group HashableObjectStorageTest |
|
14
|
|
|
* |
|
15
|
|
|
* @licence GNU GPL v2+ |
|
16
|
|
|
* @author Jeroen De Dauw < [email protected] > |
|
17
|
|
|
*/ |
|
18
|
|
|
class HashableObjectStorageTest extends \PHPUnit_Framework_TestCase { |
|
19
|
|
|
|
|
20
|
|
|
public function testRemoveDuplicates() { |
|
21
|
|
|
$list = new HashableObjectStorage(); |
|
|
|
|
|
|
22
|
|
|
|
|
23
|
|
|
$list->attach( new HashableObject( 1 ) ); |
|
|
|
|
|
|
24
|
|
|
$list->attach( new HashableObject( 2 ) ); |
|
|
|
|
|
|
25
|
|
|
$list->attach( new HashableObject( 3 ) ); |
|
|
|
|
|
|
26
|
|
|
|
|
27
|
|
|
$this->assertEquals( |
|
28
|
|
|
3, |
|
29
|
|
|
count( $list ), |
|
30
|
|
|
'Adding 3 elements should result in a size of 3' |
|
31
|
|
|
); |
|
32
|
|
|
|
|
33
|
|
|
$list->removeDuplicates(); |
|
34
|
|
|
|
|
35
|
|
|
$this->assertEquals( |
|
36
|
|
|
3, |
|
37
|
|
|
count( $list ), |
|
38
|
|
|
'Removing duplicates from a HashableObjectStorage without duplicates should not alter its size' |
|
39
|
|
|
); |
|
40
|
|
|
|
|
41
|
|
|
$list->attach( new HashableObject( 1 ) ); |
|
|
|
|
|
|
42
|
|
|
$list->attach( new HashableObject( 2 ) ); |
|
|
|
|
|
|
43
|
|
|
$list->attach( new HashableObject( 4 ) ); |
|
|
|
|
|
|
44
|
|
|
|
|
45
|
|
|
$this->assertEquals( |
|
46
|
|
|
6, |
|
47
|
|
|
count( $list ), |
|
48
|
|
|
'Adding duplicates to HashableObjectStorage should increase its size' |
|
49
|
|
|
); |
|
50
|
|
|
|
|
51
|
|
|
$list->removeDuplicates(); |
|
52
|
|
|
|
|
53
|
|
|
$this->assertEquals( |
|
54
|
|
|
4, |
|
55
|
|
|
count( $list ), |
|
56
|
|
|
'Removing duplicates from a HashableObjectStorage with duplicates should decrease its size' |
|
57
|
|
|
); |
|
58
|
|
|
} |
|
59
|
|
|
|
|
60
|
|
|
public function testGetValueHash() { |
|
61
|
|
|
$list = new HashableObjectStorage(); |
|
|
|
|
|
|
62
|
|
|
$originalList = clone $list; |
|
63
|
|
|
|
|
64
|
|
|
$hash = $list->getValueHash(); |
|
65
|
|
|
$this->assertInternalType( 'string', $hash ); |
|
66
|
|
|
|
|
67
|
|
|
$one = new HashableObject( 1 ); |
|
|
|
|
|
|
68
|
|
|
$two = new HashableObject( 1 ); |
|
|
|
|
|
|
69
|
|
|
|
|
70
|
|
|
$list->attach( $one ); |
|
71
|
|
|
$list->attach( $two ); |
|
72
|
|
|
|
|
73
|
|
|
$newHash = $list->getValueHash(); |
|
74
|
|
|
|
|
75
|
|
|
$this->assertNotEquals( |
|
76
|
|
|
$hash, |
|
77
|
|
|
$newHash, |
|
78
|
|
|
'The hash of HashableObjectStorage with different content should be different' |
|
79
|
|
|
); |
|
80
|
|
|
|
|
81
|
|
|
$this->assertFalse( $list->equals( $originalList ) ); |
|
82
|
|
|
|
|
83
|
|
|
$originalList = clone $list; |
|
84
|
|
|
|
|
85
|
|
|
$list->detach( $one ); |
|
86
|
|
|
$list->detach( $two ); |
|
87
|
|
|
|
|
88
|
|
|
$list->attach( $two ); |
|
89
|
|
|
$list->attach( $one ); |
|
90
|
|
|
|
|
91
|
|
|
$this->assertEquals( |
|
92
|
|
|
$newHash, |
|
93
|
|
|
$list->getValueHash(), |
|
94
|
|
|
'The hash of HashableObjectStorage with the same elements in different order should be the same' |
|
95
|
|
|
); |
|
96
|
|
|
|
|
97
|
|
|
$this->assertTrue( $list->equals( $originalList ) ); |
|
98
|
|
|
|
|
99
|
|
|
$list->detach( $one ); |
|
100
|
|
|
$list->detach( $two ); |
|
101
|
|
|
|
|
102
|
|
|
$list->attach( new HashableObject( 1 ) ); |
|
|
|
|
|
|
103
|
|
|
$list->attach( new HashableObject( 1 ) ); |
|
|
|
|
|
|
104
|
|
|
|
|
105
|
|
|
$this->assertEquals( |
|
106
|
|
|
$newHash, |
|
107
|
|
|
$list->getValueHash(), |
|
108
|
|
|
'The hash of HashableObjectStorage with different instances of the same elemnets should be the same' |
|
109
|
|
|
); |
|
110
|
|
|
|
|
111
|
|
|
$this->assertTrue( $list->equals( $originalList ) ); |
|
112
|
|
|
} |
|
113
|
|
|
|
|
114
|
|
|
public function testEquals() { |
|
115
|
|
|
$list = new HashableObjectStorage(); |
|
|
|
|
|
|
116
|
|
|
|
|
117
|
|
|
$this->assertTrue( $list->equals( $list ), 'Empty list should be equal to itself' ); |
|
118
|
|
|
|
|
119
|
|
|
$newList = clone $list; |
|
120
|
|
|
|
|
121
|
|
|
$this->assertTrue( $list->equals( $newList ), 'Empty list should be equal to a clone of itself' ); |
|
122
|
|
|
|
|
123
|
|
|
$newList->attach( new HashableObject( 1 ) ); |
|
|
|
|
|
|
124
|
|
|
|
|
125
|
|
|
$this->assertFalse( $list->equals( $newList ), 'Empty list should not be equal to a list with an element' ); |
|
126
|
|
|
|
|
127
|
|
|
$list->attach( new HashableObject( 1 ) ); |
|
|
|
|
|
|
128
|
|
|
|
|
129
|
|
|
$this->assertTrue( $list->equals( $newList ), 'Two lists with the same element should be equal' ); |
|
130
|
|
|
} |
|
131
|
|
|
|
|
132
|
|
|
} |
|
133
|
|
|
|
This class, trait or interface has been deprecated. The supplier of the file has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the type will be removed from the class and what other constant to use instead.