Passed
Push — clear ( 11b8fa )
by Bene
03:57
created

testGivenNullGuid_allStatementsWithNoGuidAreRemoved()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 10
rs 9.4285
cc 1
eloc 7
nc 1
nop 0
1
<?php
2
3
namespace Wikibase\DataModel\Tests\Statement;
4
5
use ArrayObject;
6
use DataValues\StringValue;
7
use Wikibase\DataModel\Entity\PropertyId;
8
use Wikibase\DataModel\Reference;
9
use Wikibase\DataModel\ReferenceList;
10
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
11
use Wikibase\DataModel\Snak\PropertySomeValueSnak;
12
use Wikibase\DataModel\Snak\PropertyValueSnak;
13
use Wikibase\DataModel\Snak\SnakList;
14
use Wikibase\DataModel\Statement\ReferencedStatementFilter;
15
use Wikibase\DataModel\Statement\Statement;
16
use Wikibase\DataModel\Statement\StatementList;
17
18
/**
19
 * @covers Wikibase\DataModel\Statement\StatementList
20
 *
21
 * @licence GNU GPL v2+
22
 * @author Jeroen De Dauw < [email protected] >
23
 * @author Thiemo Mättig
24
 */
25
class StatementListTest extends \PHPUnit_Framework_TestCase {
26
27
	/**
28
	 * @param int $propertyId
29
	 * @param string|null $guid
30
	 * @param int $rank
31
	 *
32
	 * @return Statement
33
	 */
34
	private function getStatement( $propertyId, $guid, $rank = Statement::RANK_NORMAL ) {
35
		$statement = $this->getMockBuilder( 'Wikibase\DataModel\Statement\Statement' )
36
			->disableOriginalConstructor()
37
			->getMock();
38
39
		$statement->expects( $this->any() )
40
			->method( 'getGuid' )
41
			->will( $this->returnValue( $guid ) );
42
43
		$statement->expects( $this->any() )
44
			->method( 'getPropertyId' )
45
			->will( $this->returnValue( PropertyId::newFromNumber( $propertyId ) ) );
46
47
		$statement->expects( $this->any() )
48
			->method( 'getRank' )
49
			->will( $this->returnValue( $rank ) );
50
51
		return $statement;
52
	}
53
54
	private function getStatementWithSnak( $propertyId, $stringValue ) {
55
		$snak = $this->newSnak( $propertyId, $stringValue );
56
		$statement = new Statement( $snak );
57
		$statement->setGuid( sha1( $snak->getHash() ) );
58
		return $statement;
59
	}
60
61
	private function newSnak( $propertyId, $stringValue ) {
62
		return new PropertyValueSnak( $propertyId, new StringValue( $stringValue ) );
63
	}
64
65
	public function testConstructorAcceptsDuplicatesWithNoGuid() {
66
		$list = new StatementList(
67
			$this->getStatement( 1, null ),
68
			$this->getStatement( 1, null )
69
		);
70
71
		$this->assertSame( 2, $list->count() );
72
	}
73
74
	public function testConstructorAcceptsDuplicatesWithSameGuid() {
75
		$list = new StatementList(
76
			$this->getStatement( 1, 'duplicate' ),
77
			$this->getStatement( 1, 'duplicate' )
78
		);
79
80
		$this->assertSame( 2, $list->count() );
81
	}
82
83
	public function testGivenNoStatements_getPropertyIdsReturnsEmptyArray() {
84
		$list = new StatementList();
85
		$this->assertSame( array(), $list->getPropertyIds() );
86
	}
87
88
	public function testGivenStatements_getPropertyIdsReturnsArrayWithoutDuplicates() {
89
		$list = new StatementList(
90
			$this->getStatement( 1, 'kittens' ),
91
			$this->getStatement( 3, 'foo' ),
92
			$this->getStatement( 2, 'bar' ),
93
			$this->getStatement( 2, 'baz' ),
94
			$this->getStatement( 1, 'bah' )
95
		);
96
97
		$this->assertEquals(
98
			array(
99
				'P1' => new PropertyId( 'P1' ),
100
				'P3' => new PropertyId( 'P3' ),
101
				'P2' => new PropertyId( 'P2' ),
102
			),
103
			$list->getPropertyIds()
104
		);
105
	}
106
107
	public function testGivenStatementsWithArrayKeys_toArrayReturnsReindexedArray() {
108
		$statement = $this->getStatement( 1, 'guid' );
109
		$list = new StatementList( array( 'ignore-me' => $statement ) );
110
111
		$this->assertSame( array( 0 => $statement ), $list->toArray() );
112
	}
113
114
	public function testGivenSparseArray_toArrayReturnsReindexedArray() {
115
		$statement = $this->getStatement( 1, 'guid' );
116
		$list = new StatementList( array( 1 => $statement ) );
117
118
		$this->assertSame( array( 0 => $statement ), $list->toArray() );
119
	}
120
121
	public function testCanIterate() {
122
		$statement = $this->getStatement( 1, 'kittens' );
123
		$list = new StatementList( $statement );
124
125
		foreach ( $list as $statementFormList ) {
126
			$this->assertEquals( $statement, $statementFormList );
127
		}
128
	}
129
130
	public function testGetUniqueMainSnaksReturnsListWithoutDuplicates() {
131
		$list = new StatementList(
132
			$this->getStatementWithSnak( 1, 'foo' ),
133
			$this->getStatementWithSnak( 2, 'foo' ),
134
			$this->getStatementWithSnak( 1, 'foo' ),
135
			$this->getStatementWithSnak( 2, 'bar' ),
136
			$this->getStatementWithSnak( 1, 'bar' )
137
		);
138
139
		$this->assertEquals(
140
			array(
141
				$this->getStatementWithSnak( 1, 'foo' ),
142
				$this->getStatementWithSnak( 2, 'foo' ),
143
				$this->getStatementWithSnak( 2, 'bar' ),
144
				$this->getStatementWithSnak( 1, 'bar' ),
145
			),
146
			array_values( $list->getWithUniqueMainSnaks()->toArray() )
147
		);
148
	}
149
150
	public function testGetAllSnaksReturnsAllSnaks() {
151
		$list = new StatementList(
152
			$this->getStatementWithSnak( 1, 'foo' ),
153
			$this->getStatementWithSnak( 2, 'foo' ),
154
			$this->getStatementWithSnak( 1, 'foo' ),
155
			$this->getStatementWithSnak( 2, 'bar' ),
156
			$this->getStatementWithSnak( 1, 'bar' )
157
		);
158
159
		$this->assertEquals(
160
			array(
161
				$this->newSnak( 1, 'foo' ),
162
				$this->newSnak( 2, 'foo' ),
163
				$this->newSnak( 1, 'foo' ),
164
				$this->newSnak( 2, 'bar' ),
165
				$this->newSnak( 1, 'bar' ),
166
			),
167
			$list->getAllSnaks()
168
		);
169
	}
170
171
	public function testAddStatementWithOnlyMainSnak() {
172
		$list = new StatementList();
173
174
		$list->addNewStatement( $this->newSnak( 42, 'foo' ) );
175
176
		$this->assertEquals(
177
			new StatementList( new Statement( $this->newSnak( 42, 'foo' ) ) ),
178
			$list
179
		);
180
	}
181
182
	public function testAddStatementWithQualifiersAsSnakArray() {
183
		$list = new StatementList();
184
185
		$list->addNewStatement(
186
			$this->newSnak( 42, 'foo' ),
187
			array(
188
				$this->newSnak( 1, 'bar' )
189
			)
190
		);
191
192
		$this->assertEquals(
193
			new StatementList(
194
				new Statement(
195
					$this->newSnak( 42, 'foo' ),
196
					new SnakList( array(
197
						$this->newSnak( 1, 'bar' )
198
					) )
199
				)
200
			),
201
			$list
202
		);
203
	}
204
205
	public function testAddStatementWithQualifiersAsSnakList() {
206
		$list = new StatementList();
207
		$snakList = new SnakList( array(
208
			$this->newSnak( 1, 'bar' )
209
		) );
210
211
		$list->addNewStatement(
212
			$this->newSnak( 42, 'foo' ),
213
			$snakList
214
		);
215
216
		$this->assertEquals(
217
			new StatementList( new Statement( $this->newSnak( 42, 'foo' ), $snakList ) ),
218
			$list
219
		);
220
	}
221
222
	public function testAddStatementWithGuid() {
223
		$list = new StatementList();
224
225
		$list->addNewStatement(
226
			$this->newSnak( 42, 'foo' ),
227
			null,
228
			null,
229
			'kittens'
230
		);
231
232
		$statement = new Statement( $this->newSnak( 42, 'foo' ) );
233
234
		$statement->setGuid( 'kittens' );
235
236
		$this->assertEquals( new StatementList( $statement ), $list );
237
	}
238
239
	public function testGivenGuidOfPresentStatement_statementIsRemoved() {
240
		$statement1 = new Statement( $this->newSnak( 24, 'foo' ), null, null, 'foo' );
241
		$statement2 = new Statement( $this->newSnak( 32, 'bar' ), null, null, 'bar' );
242
		$statement3 = new Statement( $this->newSnak( 32, 'bar' ), null, null, 'bar' );
243
244
		$list = new StatementList( array( $statement1, $statement2, $statement3 ) );
245
		$list->removeStatementsWithGuid( 'foo' );
246
247
		$this->assertEquals( new StatementList( $statement2, $statement3 ), $list );
248
	}
249
250
	public function testGivenGuidOfMultipleStatements_multipleStatementsAreRemoved() {
251
		$statement1 = new Statement( $this->newSnak( 24, 'foo' ), null, null, 'foo' );
252
		$statement2 = new Statement( $this->newSnak( 32, 'bar' ), null, null, 'bar' );
253
		$statement3 = new Statement( $this->newSnak( 32, 'bar' ), null, null, 'bar' );
254
255
		$list = new StatementList( array( $statement1, $statement2, $statement3 ) );
256
		$list->removeStatementsWithGuid( 'bar' );
257
258
		$this->assertEquals( new StatementList( $statement1 ), $list );
259
	}
260
261
	public function testGivenNotPresentGuid_listIsNotModified() {
262
		$statement1 = new Statement( $this->newSnak( 24, 'foo' ), null, null, 'foo' );
263
		$statement2 = new Statement( $this->newSnak( 32, 'bar' ), null, null, 'bar' );
264
		$statement3 = new Statement( $this->newSnak( 32, 'bar' ), null, null, 'bar' );
265
266
		$list = new StatementList( array( $statement1, $statement2, $statement3 ) );
267
		$list->removeStatementsWithGuid( 'baz' );
268
269
		$this->assertEquals( new StatementList( $statement1, $statement2, $statement3 ), $list );
270
	}
271
272
	public function testGivenNullGuid_allStatementsWithNoGuidAreRemoved() {
273
		$statement1 = new Statement( $this->newSnak( 24, 'foo' ), null, null, 'foo' );
274
		$statement2 = new Statement( $this->newSnak( 32, 'bar' ) );
275
		$statement3 = new Statement( $this->newSnak( 32, 'bar' ) );
276
277
		$list = new StatementList( array( $statement1, $statement2, $statement3 ) );
278
		$list->removeStatementsWithGuid( null );
279
280
		$this->assertEquals( new StatementList( $statement1 ), $list );
281
	}
282
283
	public function testCanConstructWithTraversableContainingOnlyStatements() {
284
		$statementArray = array(
285
			$this->getStatementWithSnak( 1, 'foo' ),
286
			$this->getStatementWithSnak( 2, 'bar' ),
287
		);
288
289
		$object = new ArrayObject( $statementArray );
290
		$list = new StatementList( $object );
291
292
		$this->assertEquals(
293
			$statementArray,
294
			array_values( $list->toArray() )
295
		);
296
	}
297
298
	public function testGivenTraversableWithNonStatements_constructorThrowsException() {
299
		$traversable = new ArrayObject( array(
300
			$this->getStatementWithSnak( 1, 'foo' ),
301
			new \stdClass(),
302
			$this->getStatementWithSnak( 2, 'bar' ),
303
		) );
304
305
		$this->setExpectedException( 'InvalidArgumentException' );
0 ignored issues
show
Deprecated Code introduced by
The method PHPUnit_Framework_TestCase::setExpectedException() has been deprecated with message: Method deprecated since Release 5.2.0

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
306
		new StatementList( $traversable );
307
	}
308
309
	public function testGivenNonTraversableOrArgList_constructorThrowsException() {
310
		$this->setExpectedException( 'InvalidArgumentException' );
0 ignored issues
show
Deprecated Code introduced by
The method PHPUnit_Framework_TestCase::setExpectedException() has been deprecated with message: Method deprecated since Release 5.2.0

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
311
		new StatementList( null );
312
	}
313
314
	public function testCanConstructWithStatement() {
315
		$statement = new Statement( $this->newSnak( 42, 'foo' ) );
316
317
		$this->assertEquals(
318
			new StatementList( array( $statement ) ),
319
			new StatementList( $statement )
320
		);
321
	}
322
323
	public function testCanConstructWithStatementArgumentList() {
324
		$statement0 = new Statement( $this->newSnak( 42, 'foo' ) );
325
		$statement1 = new Statement( $this->newSnak( 42, 'bar' ) );
326
		$statement2 = new Statement( $this->newSnak( 42, 'baz' ) );
327
328
		$this->assertEquals(
329
			new StatementList( array( $statement0, $statement1, $statement2 ) ),
330
			new StatementList( $statement0, $statement1, $statement2 )
331
		);
332
	}
333
334
	public function testGivenArgumentListWithNonStatement_constructorThrowsException() {
335
		$statement0 = new Statement( $this->newSnak( 42, 'foo' ) );
336
		$statement1 = new Statement( $this->newSnak( 42, 'bar' ) );
337
		$statement2 = new Statement( $this->newSnak( 42, 'baz' ) );
338
339
		$this->setExpectedException( 'InvalidArgumentException' );
0 ignored issues
show
Deprecated Code introduced by
The method PHPUnit_Framework_TestCase::setExpectedException() has been deprecated with message: Method deprecated since Release 5.2.0

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
340
		new StatementList( $statement0, $statement1, array(), $statement2 );
341
	}
342
343
	public function testCountForEmptyList() {
344
		$list = new StatementList();
345
		$this->assertSame( 0, count( $list ) );
346
		$this->assertSame( 0, $list->count() );
347
	}
348
349
	public function testCountForNonEmptyList() {
350
		$list = new StatementList(
351
			$this->getStatementWithSnak( 1, 'foo' ),
352
			$this->getStatementWithSnak( 2, 'bar' )
353
		);
354
355
		$this->assertSame( 2, $list->count() );
356
	}
357
358
	/**
359
	 * @dataProvider statementArrayProvider
360
	 */
361
	public function testGivenIdenticalLists_equalsReturnsTrue( array $statements ) {
362
		$firstStatements = new StatementList( $statements );
363
		$secondStatements = new StatementList( $statements );
364
365
		$this->assertTrue( $firstStatements->equals( $secondStatements ) );
366
	}
367
368
	public function statementArrayProvider() {
369
		return array(
370
			array( array(
371
				$this->getStatementWithSnak( 1, 'foo' ),
372
				$this->getStatementWithSnak( 2, 'bar' ),
373
			) ),
374
			array( array(
375
				$this->getStatementWithSnak( 1, 'foo' ),
376
			) ),
377
			array( array(
378
			) ),
379
		);
380
	}
381
382
	public function testGivenDifferentLists_equalsReturnsFalse() {
383
		$firstStatements = new StatementList(
384
			$this->getStatementWithSnak( 1, 'foo' ),
385
			$this->getStatementWithSnak( 2, 'bar' )
386
		);
387
388
		$secondStatements = new StatementList(
389
			$this->getStatementWithSnak( 1, 'foo' ),
390
			$this->getStatementWithSnak( 2, 'SPAM' )
391
		);
392
393
		$this->assertFalse( $firstStatements->equals( $secondStatements ) );
394
	}
395
396
	public function testGivenListsWithDifferentDuplicates_equalsReturnsFalse() {
397
		$firstStatements = new StatementList(
398
			$this->getStatementWithSnak( 1, 'foo' ),
399
			$this->getStatementWithSnak( 1, 'foo' ),
400
			$this->getStatementWithSnak( 2, 'bar' )
401
		);
402
403
		$secondStatements = new StatementList(
404
			$this->getStatementWithSnak( 1, 'foo' ),
405
			$this->getStatementWithSnak( 2, 'bar' ),
406
			$this->getStatementWithSnak( 2, 'bar' )
407
		);
408
409
		$this->assertFalse( $firstStatements->equals( $secondStatements ) );
410
	}
411
412
	public function testGivenListsWithDifferentOrder_equalsReturnsFalse() {
413
		$firstStatements = new StatementList(
414
			$this->getStatementWithSnak( 1, 'foo' ),
415
			$this->getStatementWithSnak( 2, 'bar' ),
416
			$this->getStatementWithSnak( 3, 'baz' )
417
		);
418
419
		$secondStatements = new StatementList(
420
			$this->getStatementWithSnak( 1, 'foo' ),
421
			$this->getStatementWithSnak( 3, 'baz' ),
422
			$this->getStatementWithSnak( 2, 'bar' )
423
		);
424
425
		$this->assertFalse( $firstStatements->equals( $secondStatements ) );
426
	}
427
428
	public function testEmptyListDoesNotEqualNonEmptyList() {
429
		$firstStatements = new StatementList();
430
431
		$secondStatements = new StatementList(
432
			$this->getStatementWithSnak( 1, 'foo' ),
433
			$this->getStatementWithSnak( 3, 'baz' ),
434
			$this->getStatementWithSnak( 2, 'bar' )
435
		);
436
437
		$this->assertFalse( $firstStatements->equals( $secondStatements ) );
438
	}
439
440
	public function testNonEmptyListDoesNotEqualEmptyList() {
441
		$firstStatements = new StatementList(
442
			$this->getStatementWithSnak( 1, 'foo' ),
443
			$this->getStatementWithSnak( 3, 'baz' ),
444
			$this->getStatementWithSnak( 2, 'bar' )
445
		);
446
447
		$secondStatements = new StatementList();
448
449
		$this->assertFalse( $firstStatements->equals( $secondStatements ) );
450
	}
451
452
	public function testEmptyListIsEmpty() {
453
		$list = new StatementList();
454
455
		$this->assertTrue( $list->isEmpty() );
456
	}
457
458
	public function testNonEmptyListIsNotEmpty() {
459
		$list = new StatementList( $this->getStatementWithSnak( 1, 'foo' ) );
460
461
		$this->assertFalse( $list->isEmpty() );
462
	}
463
464
	public function testGetMainSnaks() {
465
		$list = new StatementList();
466
467
		$list->addNewStatement( new PropertyNoValueSnak( 42 ) );
468
		$list->addNewStatement( new PropertyNoValueSnak( 1337 ), array( new PropertyNoValueSnak( 32202 ) ) );
469
		$list->addNewStatement( new PropertyNoValueSnak( 9001 ) );
470
471
		$this->assertEquals(
472
			array(
473
				new PropertyNoValueSnak( 42 ),
474
				new PropertyNoValueSnak( 1337 ),
475
				new PropertyNoValueSnak( 9001 ),
476
			),
477
			$list->getMainSnaks()
478
		);
479
	}
480
481
	public function testGivenNotKnownPropertyId_getByPropertyIdReturnsEmptyList() {
482
		$list = new StatementList();
483
		$list->addNewStatement( new PropertyNoValueSnak( 42 ) );
484
485
		$this->assertEquals(
486
			new StatementList(),
487
			$list->getByPropertyId( new PropertyId( 'P2' ) )
488
		);
489
	}
490
491
	public function testGivenKnownPropertyId_getByPropertyIdReturnsListWithOnlyMatchingStatements() {
492
		$list = new StatementList();
493
		$list->addNewStatement( new PropertyNoValueSnak( 42 ) );
494
		$list->addNewStatement( new PropertyNoValueSnak( 9001 ) );
495
		$list->addNewStatement( new PropertySomeValueSnak( 42 ) );
496
		$list->addNewStatement( new PropertySomeValueSnak( 9001 ) );
497
498
		$expected = new StatementList();
499
		$expected->addNewStatement( new PropertyNoValueSnak( 42 ) );
500
		$expected->addNewStatement( new PropertySomeValueSnak( 42 ) );
501
502
		$this->assertEquals(
503
			$expected,
504
			$list->getByPropertyId( new PropertyId( 'P42' ) )
505
		);
506
	}
507
508
	public function testGivenInvalidRank_getByRankReturnsEmptyList() {
509
		$list = new StatementList();
510
		$this->assertEquals( new StatementList(), $list->getByRank( 42 ) );
511
	}
512
513
	public function testGivenValidRank_getByRankReturnsOnlyMatchingStatements() {
514
		$statement = new Statement( new PropertyNoValueSnak( 42 ) );
515
		$statement->setRank( Statement::RANK_PREFERRED );
516
517
		$secondStatement = new Statement( new PropertyNoValueSnak( 1337 ) );
518
		$secondStatement->setRank( Statement::RANK_NORMAL );
519
520
		$thirdStatement = new Statement( new PropertyNoValueSnak( 9001 ) );
521
		$thirdStatement->setRank( Statement::RANK_DEPRECATED );
522
523
		$list = new StatementList( $statement, $secondStatement, $thirdStatement );
524
525
		$this->assertEquals(
526
			new StatementList( $statement ),
527
			$list->getByRank( Statement::RANK_PREFERRED )
528
		);
529
530
		$this->assertEquals(
531
			new StatementList( $secondStatement, $thirdStatement ),
532
			$list->getByRank( array( Statement::RANK_NORMAL, Statement::RANK_DEPRECATED ) )
533
		);
534
	}
535
536
	public function testWhenListIsEmpty_getBestStatementsReturnsEmptyList() {
537
		$list = new StatementList();
538
		$this->assertEquals( new StatementList(), $list->getBestStatements() );
539
	}
540
541
	public function testWhenOnlyDeprecatedStatements_getBestStatementsReturnsEmptyList() {
542
		$statement = new Statement( new PropertyNoValueSnak( 42 ) );
543
		$statement->setRank( Statement::RANK_DEPRECATED );
544
545
		$secondStatement = new Statement( new PropertyNoValueSnak( 9001 ) );
546
		$secondStatement->setRank( Statement::RANK_DEPRECATED );
547
548
		$list = new StatementList( $statement, $secondStatement );
549
		$this->assertEquals( new StatementList(), $list->getBestStatements() );
550
	}
551
552
	public function testWhenPreferredStatements_getBestStatementsReturnsOnlyThose() {
553
		$statement = new Statement( new PropertyNoValueSnak( 42 ) );
554
		$statement->setRank( Statement::RANK_PREFERRED );
555
556
		$secondStatement = new Statement( new PropertyNoValueSnak( 1337 ) );
557
		$secondStatement->setRank( Statement::RANK_NORMAL );
558
559
		$thirdStatement = new Statement( new PropertyNoValueSnak( 9001 ) );
560
		$thirdStatement->setRank( Statement::RANK_DEPRECATED );
561
562
		$fourthStatement = new Statement( new PropertyNoValueSnak( 23 ) );
563
		$fourthStatement->setRank( Statement::RANK_PREFERRED );
564
565
		$list = new StatementList( $statement, $secondStatement, $thirdStatement, $fourthStatement );
566
		$this->assertEquals(
567
			new StatementList( $statement, $fourthStatement ),
568
			$list->getBestStatements()
569
		);
570
	}
571
572
	public function testWhenNoPreferredStatements_getBestStatementsReturnsOnlyNormalOnes() {
573
		$statement = new Statement( new PropertyNoValueSnak( 42 ) );
574
		$statement->setRank( Statement::RANK_NORMAL );
575
576
		$secondStatement = new Statement( new PropertyNoValueSnak( 1337 ) );
577
		$secondStatement->setRank( Statement::RANK_NORMAL );
578
579
		$thirdStatement = new Statement( new PropertyNoValueSnak( 9001 ) );
580
		$thirdStatement->setRank( Statement::RANK_DEPRECATED );
581
582
		$list = new StatementList( $statement, $secondStatement, $thirdStatement );
583
		$this->assertEquals(
584
			new StatementList( $statement, $secondStatement ),
585
			$list->getBestStatements()
586
		);
587
	}
588
589
	public function testGivenNotPresentStatement_getFirstStatementWithGuidReturnsNull() {
590
		$statements = new StatementList();
591
592
		$this->assertNull( $statements->getFirstStatementWithGuid( 'kittens' ) );
593
	}
594
595
	public function testGivenPresentStatement_getFirstStatementWithGuidReturnsStatement() {
596
		$statement1 = $this->getStatement( 1, 'guid1' );
597
		$statement2 = $this->getStatement( 2, 'guid2' );
598
		$statement3 = $this->getStatement( 3, 'guid3' );
599
		$statements = new StatementList( $statement1, $statement2, $statement3 );
600
601
		$actual = $statements->getFirstStatementWithGuid( 'guid2' );
602
		$this->assertSame( $statement2, $actual );
603
	}
604
605
	public function testGivenDoublyPresentStatement_getFirstStatementWithGuidReturnsFirstMatch() {
606
		$statement1 = $this->getStatement( 1, 'guid1' );
607
		$statement2 = $this->getStatement( 2, 'guid2' );
608
		$statement3 = $this->getStatement( 3, 'guid3' );
609
		$statement4 = $this->getStatement( 2, 'guid2' );
610
		$statements = new StatementList( $statement1, $statement2, $statement3, $statement4 );
611
612
		$actual = $statements->getFirstStatementWithGuid( 'guid2' );
613
		$this->assertSame( $statement2, $actual );
614
	}
615
616
	public function testGivenStatementsWithNoGuid_getFirstStatementWithGuidReturnsFirstMatch() {
617
		$statement1 = $this->getStatement( 1, null );
618
		$statement2 = $this->getStatement( 2, null );
619
		$statements = new StatementList( $statement1, $statement2 );
620
621
		$actual = $statements->getFirstStatementWithGuid( null );
622
		$this->assertSame( $statement1, $actual );
623
	}
624
625
	public function testGivenInvalidGuid_getFirstStatementWithGuidReturnsNull() {
626
		$statements = new StatementList();
627
628
		$this->assertNull( $statements->getFirstStatementWithGuid( false ) );
0 ignored issues
show
Documentation introduced by
false is of type boolean, but the function expects a string|null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
629
	}
630
631
	public function testFilter() {
632
		$statement1 = new Statement( new PropertyNoValueSnak( 1 ) );
633
		$statement2 = new Statement( new PropertyNoValueSnak( 2 ) );
634
		$statement3 = new Statement( new PropertyNoValueSnak( 3 ) );
635
		$statement4 = new Statement( new PropertyNoValueSnak( 4 ) );
636
637
		$statement2->setReferences( new ReferenceList( array(
638
			new Reference( array( new PropertyNoValueSnak( 20 ) ) )
639
		) ) );
640
641
		$statement3->setReferences( new ReferenceList( array(
642
			new Reference( array( new PropertyNoValueSnak( 30 ) ) )
643
		) ) );
644
645
		$statements = new StatementList( $statement1, $statement2, $statement3, $statement4 );
646
647
		$this->assertEquals(
648
			new StatementList( $statement2, $statement3 ),
649
			$statements->filter( new ReferencedStatementFilter() )
650
		);
651
	}
652
653
	public function testClear() {
654
		$statement1 = $this->getStatement( 1, null );
655
		$statement2 = $this->getStatement( 2, null );
656
		$statements = new StatementList( $statement1, $statement2 );
657
658
		$statements->clear();
659
660
		$this->assertEquals( new StatementList(), $statements );
661
	}
662
663
}
664