|
8 | 8 | use Wikibase\DataModel\Reference; |
9 | 9 | use Wikibase\DataModel\ReferenceList; |
10 | 10 | use Wikibase\DataModel\Snak\PropertyNoValueSnak; |
| 11 | +use Wikibase\DataModel\Snak\PropertyValueSnak; |
11 | 12 | use Wikibase\DataModel\Snak\SnakList; |
12 | 13 |
|
13 | 14 | /** |
@@ -141,41 +142,73 @@ public function testRemoveReference( ReferenceList $array ) { |
141 | 142 | $this->assertTrue( true ); |
142 | 143 | } |
143 | 144 |
|
144 | | - /** |
145 | | - * @dataProvider instanceProvider |
146 | | - * |
147 | | - * @param ReferenceList $array |
148 | | - */ |
149 | | - public function testAddReference( ReferenceList $array ) { |
150 | | - // Append object to the end: |
151 | | - $elementCount = count( $array ); |
| 145 | + public function testAddReferenceOnEmptyList() { |
| 146 | + $reference = new Reference( array( new PropertyNoValueSnak( 1 ) ) ); |
152 | 147 |
|
153 | | - $elements = $this->getElementInstances(); |
154 | | - $element = array_shift( $elements ); |
155 | | - $array->addReference( $element ); |
| 148 | + $references = new ReferenceList(); |
| 149 | + $references->addReference( $reference ); |
156 | 150 |
|
157 | | - $this->assertEquals( ++$elementCount, count( $array ) ); |
| 151 | + $this->assertCount( 1, $references ); |
158 | 152 |
|
159 | | - // Insert object at the beginning: |
160 | | - $elements = $this->getElementInstances(); |
161 | | - $element = array_shift( $elements ); |
162 | | - $array->addReference( $element, 0 ); |
| 153 | + $expectedList = new ReferenceList( array( $reference ) ); |
| 154 | + $this->assertSameReferenceOrder( $expectedList, $references ); |
| 155 | + } |
| 156 | + |
| 157 | + private function assertSameReferenceOrder( ReferenceList $expectedList, ReferenceList $references ) { |
| 158 | + $this->assertEquals( |
| 159 | + iterator_to_array( $expectedList ), |
| 160 | + iterator_to_array( $references ) |
| 161 | + ); |
| 162 | + } |
163 | 163 |
|
164 | | - $array->rewind(); |
| 164 | + public function testAddReferenceOnNonEmptyList() { |
| 165 | + $reference1 = new Reference( array( new PropertyNoValueSnak( 1 ) ) ); |
| 166 | + $reference2 = new Reference( array( new PropertyNoValueSnak( 2 ) ) ); |
| 167 | + $reference3 = new Reference( array( new PropertyNoValueSnak( 3 ) ) ); |
165 | 168 |
|
166 | | - $this->assertEquals( ++$elementCount, count( $array ) ); |
167 | | - $this->assertEquals( $array->current(), $element, 'Inserted object at the beginning' ); |
| 169 | + $references = new ReferenceList( array( $reference1, $reference2 ) ); |
| 170 | + $references->addReference( $reference3 ); |
168 | 171 |
|
169 | | - // Insert object at another index: |
170 | | - $elements = $this->getElementInstances(); |
171 | | - $element = array_shift( $elements ); |
172 | | - $array->addReference( $element, 1 ); |
| 172 | + $this->assertCount( 3, $references ); |
| 173 | + |
| 174 | + $expectedList = new ReferenceList( array( $reference1, $reference2, $reference3 ) ); |
| 175 | + $this->assertSameReferenceOrder( $expectedList, $references ); |
| 176 | + } |
| 177 | + |
| 178 | + public function testAddReferenceAtIndexZero() { |
| 179 | + $reference1 = new Reference( array( new PropertyNoValueSnak( 1 ) ) ); |
| 180 | + $reference2 = new Reference( array( new PropertyNoValueSnak( 2 ) ) ); |
| 181 | + $reference3 = new Reference( array( new PropertyNoValueSnak( 3 ) ) ); |
| 182 | + |
| 183 | + $references = new ReferenceList( array( $reference1, $reference2 ) ); |
| 184 | + $references->addReference( $reference3, 0 ); |
| 185 | + |
| 186 | + $expectedList = new ReferenceList( array( $reference3, $reference1, $reference2 ) ); |
| 187 | + $this->assertSameReferenceOrder( $expectedList, $references ); |
| 188 | + } |
| 189 | + |
| 190 | + public function testGivenEmptyReference_addReferenceDoesNotAdd() { |
| 191 | + $reference1 = new Reference( array( new PropertyNoValueSnak( 1 ) ) ); |
| 192 | + $reference2 = new Reference( array( new PropertyNoValueSnak( 2 ) ) ); |
| 193 | + $emptyReference = new Reference( array() ); |
| 194 | + |
| 195 | + $references = new ReferenceList( array( $reference1, $reference2 ) ); |
| 196 | + $references->addReference( $emptyReference ); |
| 197 | + |
| 198 | + $expectedList = new ReferenceList( array( $reference1, $reference2 ) ); |
| 199 | + $this->assertSameReferenceOrder( $expectedList, $references ); |
| 200 | + } |
| 201 | + |
| 202 | + public function testGivenEmptyReferenceAndIndex_addReferenceDoesNotAdd() { |
| 203 | + $reference1 = new Reference( array( new PropertyNoValueSnak( 1 ) ) ); |
| 204 | + $reference2 = new Reference( array( new PropertyNoValueSnak( 2 ) ) ); |
| 205 | + $emptyReference = new Reference( array() ); |
173 | 206 |
|
174 | | - $array->rewind(); |
175 | | - $array->next(); |
| 207 | + $references = new ReferenceList( array( $reference1, $reference2 ) ); |
| 208 | + $references->addReference( $emptyReference, 0 ); |
176 | 209 |
|
177 | | - $this->assertEquals( ++$elementCount, count( $array ) ); |
178 | | - $this->assertEquals( $array->current(), $element, 'Inserted object at index 1' ); |
| 210 | + $expectedList = new ReferenceList( array( $reference1, $reference2 ) ); |
| 211 | + $this->assertSameReferenceOrder( $expectedList, $references ); |
179 | 212 | } |
180 | 213 |
|
181 | 214 | /** |
|
0 commit comments