Passed
Push — removeDuplicates ( 27f909 )
by no
05:20
created

testRemoveDuplicates()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 25
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 25
c 0
b 0
f 0
rs 8.8571
cc 3
eloc 14
nc 3
nop 1

1 Method

Rating   Name   Duplication   Size   Complexity  
A HashArrayWithDuplicatesTest::testRemoveElement() 0 3 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 testHasElement( HashArray $array ) {
67
		$this->markTestSkipped( 'Not applicable' );
68
	}
69
70
	/**
71
	 * @dataProvider instanceProvider
72
	 * @param HashArray $array
73
	 */
74
	public function testRemoveElement( HashArray $array ) {
75
		$this->markTestSkipped( 'Not applicable' );
76
	}
77
78
	/**
79
	 * @dataProvider instanceProvider
80
	 * @param HashArray $array
81
	 */
82
	public function testGetHash( HashArray $array ) {
83
		$hash = $array->getHash();
84
85
		$this->assertEquals( $hash, $array->getHash() );
86
87
		$elements = $this->elementInstancesProvider();
88
		$element = array_shift( $elements );
89
		$element = $element[0][0];
90
91
		$array->addElement( $element );
92
93
		$newHash = $array->getHash();
94
95
		$this->assertNotSame( $hash, $newHash, 'Hash should not be the same after adding an element' );
96
97
		$array->addElement( $element );
98
99
		$this->assertNotSame(
100
			$newHash,
101
			$array->getHash(),
102
			'Hash should not be the same after adding an existing element again'
103
		);
104
	}
105
106
	/**
107
	 * @dataProvider instanceProvider
108
	 * @param HashArray $array
109
	 */
110
	public function testIndicesAreUpToDate( HashArray $array ) {
111
		$this->assertInternalType( 'boolean', $array->indicesAreUpToDate() );
112
113
		$mutable = new MutableHashable();
114
115
		$array->addElement( $mutable );
116
117
		$mutable->text = '~[,,_,,]:3';
118
119
		$this->assertFalse( $array->indicesAreUpToDate() );
120
121
		$array->rebuildIndices();
122
123
		$this->assertTrue( $array->indicesAreUpToDate() );
124
	}
125
126
}
127