Passed
Push — removeDuplicates ( a8cc42...d91d26 )
by no
14:09 queued 10:59
created

testIndicesAreUpToDate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 15
c 0
b 0
f 0
rs 9.4285
cc 1
eloc 8
nc 1
nop 1
1
<?php
2
3
namespace Wikibase\DataModel\Tests\HashArray;
4
5
use Hashable;
6
use Wikibase\DataModel\Fixtures\HashArrayElement;
7
use Wikibase\DataModel\Fixtures\MutableHashable;
8
use Wikibase\DataModel\HashArray;
9
10
/**
11
 * @covers Wikibase\DataModel\HashArray
12
 *
13
 * @group Wikibase
14
 * @group WikibaseDataModel
15
 * @group HashArray
16
 *
17
 * @license GPL-2.0+
18
 * @author Jeroen De Dauw < [email protected] >
19
 */
20
class HashArrayWithDuplicatesTest extends HashArrayTest {
21
22
	public function constructorProvider() {
23
		$argLists = [];
24
25
		$argLists[] = [ HashArrayElement::getInstances() ];
26
		$argLists[] = [ array_merge( HashArrayElement::getInstances(), HashArrayElement::getInstances() ) ];
27
28
		return $argLists;
29
	}
30
31
	public function getInstanceClass() {
32
		return 'Wikibase\DataModel\Fixtures\HashArrayWithDuplicates';
33
	}
34
35
	public function elementInstancesProvider() {
36
		return $this->arrayWrap( array_merge(
37
			$this->arrayWrap( HashArrayElement::getInstances() ),
38
			[ HashArrayElement::getInstances() ]
39
		) );
40
	}
41
42
	/**
43
	 * @dataProvider instanceProvider
44
	 * @param HashArray $array
45
	 */
46
	public function testAddElement( HashArray $array ) {
47
		$elementCount = $array->count();
48
49
		$elements = $this->elementInstancesProvider();
50
		$element = array_shift( $elements );
51
		$element = $element[0][0];
52
53
		++$elementCount;
54
55
		$this->assertTrue( $array->addElement( $element ), 'Adding an element should always work' );
56
57
		$this->assertEquals( $elementCount, $array->count(), 'Adding an element should always increase the count' );
58
59
		$this->assertTrue( $array->addElement( $element ), 'Adding an element should always work' );
60
	}
61
62
	/**
63
	 * @dataProvider instanceProvider
64
	 * @param HashArray $array
65
	 */
66
	public function testGetHash( HashArray $array ) {
67
		$hash = $array->getHash();
68
69
		$this->assertEquals( $hash, $array->getHash() );
70
71
		$elements = $this->elementInstancesProvider();
72
		$element = array_shift( $elements );
73
		$element = $element[0][0];
74
75
		$array->addElement( $element );
76
77
		$newHash = $array->getHash();
78
79
		$this->assertNotSame( $hash, $newHash, 'Hash should not be the same after adding an element' );
80
81
		$array->addElement( $element );
82
83
		$this->assertNotSame(
84
			$newHash,
85
			$array->getHash(),
86
			'Hash should not be the same after adding an existing element again'
87
		);
88
	}
89
90
	/**
91
	 * @dataProvider instanceProvider
92
	 * @param HashArray $array
93
	 */
94
	public function testIndicesAreUpToDate( HashArray $array ) {
95
		$this->assertInternalType( 'boolean', $array->indicesAreUpToDate() );
96
97
		$mutable = new MutableHashable();
98
99
		$array->addElement( $mutable );
100
101
		$mutable->text = '~[,,_,,]:3';
102
103
		$this->assertFalse( $array->indicesAreUpToDate() );
104
105
		$array->rebuildIndices();
106
107
		$this->assertTrue( $array->indicesAreUpToDate() );
108
	}
109
110
}
111