Completed
Push — master ( 422056...68667e )
by Leszek
02:49
created

provideDataToUnserialize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 0
1
<?php
2
3
namespace Wikibase\DataModel\Tests\Snak;
4
5
use InvalidArgumentException;
6
use PHPUnit_Framework_TestCase;
7
use Wikibase\DataModel\Entity\ItemId;
8
use Wikibase\DataModel\Entity\PropertyId;
9
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
10
use Wikibase\DataModel\Snak\PropertySomeValueSnak;
11
use Wikibase\DataModel\Snak\Snak;
12
13
/**
14
 * @covers Wikibase\DataModel\Snak\PropertyNoValueSnak
15
 * @covers Wikibase\DataModel\Snak\SnakObject
16
 *
17
 * @group Wikibase
18
 * @group WikibaseDataModel
19
 * @group WikibaseSnak
20
 *
21
 * @license GPL-2.0+
22
 * @author Thiemo Mättig
23
 */
24
class PropertyNoValueSnakTest extends PHPUnit_Framework_TestCase {
25
26
	/**
27
	 * @dataProvider validConstructorArgumentsProvider
28
	 */
29
	public function testConstructor( $propertyId ) {
30
		$snak = new PropertyNoValueSnak( $propertyId );
31
		$this->assertInstanceOf( 'Wikibase\DataModel\Snak\PropertyNoValueSnak', $snak );
32
	}
33
34
	public function validConstructorArgumentsProvider() {
35
		return [
36
			[ 1 ],
37
			[ new PropertyId( 'P1' ) ],
38
			[ new PropertyId( 'P9001' ) ],
39
		];
40
	}
41
42
	/**
43
	 * @dataProvider invalidConstructorArgumentsProvider
44
	 * @expectedException InvalidArgumentException
45
	 */
46
	public function testGivenInvalidConstructorArguments_constructorThrowsException( $propertyId ) {
47
		new PropertyNoValueSnak( $propertyId );
48
	}
49
50
	public function invalidConstructorArgumentsProvider() {
51
		return [
52
			[ null ],
53
			[ 0.1 ],
54
			[ 'Q1' ],
55
			[ new ItemId( 'Q1' ) ],
56
		];
57
	}
58
59
	public function testGetPropertyId() {
60
		$snak = new PropertyNoValueSnak( new PropertyId( 'P1' ) );
61
		$propertyId = $snak->getPropertyId();
62
		$this->assertInstanceOf( 'Wikibase\DataModel\Entity\PropertyId', $propertyId );
63
	}
64
65
	public function testGetHash() {
66
		$snak = new PropertyNoValueSnak( new PropertyId( 'P1' ) );
67
		$hash = $snak->getHash();
68
		$this->assertInternalType( 'string', $hash );
69
		$this->assertEquals( 40, strlen( $hash ) );
70
	}
71
72
	/**
73
	 * This test is a safeguard to make sure hashes are not changed unintentionally.
74
	 */
75
	public function testHashStability() {
76
		$snak = new PropertyNoValueSnak( new PropertyId( 'P1' ) );
77
		$hash = $snak->getHash();
78
79
		$expected = sha1( 'C:43:"Wikibase\DataModel\Snak\PropertyNoValueSnak":2:{P1}' );
80
		$this->assertSame( $expected, $hash );
81
	}
82
83
	public function testEquals() {
84
		$snak1 = new PropertyNoValueSnak( new PropertyId( 'P1' ) );
85
		$snak2 = new PropertyNoValueSnak( new PropertyId( 'P1' ) );
86
		$this->assertTrue( $snak1->equals( $snak2 ) );
87
		$this->assertTrue( $snak2->equals( $snak1 ) );
88
	}
89
90
	/**
91
	 * @dataProvider notEqualsProvider
92
	 */
93
	public function testGivenDifferentSnaks_EqualsReturnsFalse( Snak $snak1, Snak $snak2 ) {
94
		$this->assertFalse( $snak1->equals( $snak2 ) );
95
		$this->assertFalse( $snak2->equals( $snak1 ) );
96
	}
97
98
	public function notEqualsProvider() {
99
		$p1 = new PropertyId( 'P1' );
100
101
		return [
102
			[
103
				new PropertyNoValueSnak( $p1 ),
104
				new PropertyNoValueSnak( new PropertyId( 'P2' ) )
105
			],
106
			[
107
				new PropertyNoValueSnak( $p1 ),
108
				new PropertySomeValueSnak( $p1 )
109
			],
110
		];
111
	}
112
113
	public function provideDataToSerialize() {
114
		$p2 = new PropertyId( 'P2' );
115
		$p2foo = new PropertyId( 'foo:P2' );
116
117
		return [
118
			'string' => [
119
				'P2',
120
				new PropertyNoValueSnak( $p2 ),
121
			],
122
			'foreign' => [
123
				'foo:P2',
124
				new PropertyNoValueSnak( $p2foo ),
125
			],
126
		];
127
	}
128
129
	/**
130
	 * @dataProvider provideDataToSerialize
131
	 */
132
	public function testSerialize( $expected, Snak $snak ) {
133
		$serialized = $snak->serialize();
134
		$this->assertSame( $expected, $serialized );
135
136
		$snak2 = new PropertyNoValueSnak( new PropertyId( 'P1' ) );
137
		$snak2->unserialize( $serialized );
138
		$this->assertTrue( $snak->equals( $snak2 ), 'round trip' );
139
	}
140
141
	public function provideDataToUnserialize() {
142
		$p2 = new PropertyId( 'P2' );
143
		$p2foo = new PropertyId( 'foo:P2' );
144
145
		return [
146
			'legacy' => [ new PropertyNoValueSnak( $p2 ), 'i:2;' ],
147
			'current' => [ new PropertyNoValueSnak( $p2 ), 'P2' ],
148
			'foreign' => [ new PropertyNoValueSnak( $p2foo ), 'foo:P2' ],
149
		];
150
	}
151
152
	/**
153
	 * @dataProvider provideDataToUnserialize
154
	 */
155
	public function testUnserialize( $expected, $serialized ) {
156
		$snak = new PropertyNoValueSnak( new PropertyId( 'P1' ) );
157
		$snak->unserialize( $serialized );
158
		$this->assertTrue( $snak->equals( $expected ) );
159
	}
160
161
}
162