Completed
Push — suchids ( 874a83 )
by Jeroen De
03:40
created

EntityIdTest::serializationSplitProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
namespace Wikibase\DataModel\Tests\Entity;
4
5
use ReflectionClass;
6
use Wikibase\DataModel\Entity\EntityId;
7
use Wikibase\DataModel\Entity\ItemId;
8
use Wikibase\DataModel\Entity\PropertyId;
9
10
/**
11
 * @covers Wikibase\DataModel\Entity\EntityId
12
 * @uses Wikibase\DataModel\Entity\ItemId
13
 * @uses Wikibase\DataModel\Entity\PropertyId
14
 *
15
 * @group Wikibase
16
 * @group WikibaseDataModel
17
 * @group EntityIdTest
18
 *
19
 * @license GPL-2.0+
20
 * @author Jeroen De Dauw < [email protected] >
21
 * @author John Erling Blad < [email protected] >
22
 */
23
class EntityIdTest extends \PHPUnit_Framework_TestCase {
24
25
	public function instanceProvider() {
26
		$ids = array();
27
28
		$ids[] = array( new ItemId( 'Q1' ), '' );
29
		$ids[] = array( new ItemId( 'Q42' ), '' );
30
		$ids[] = array( new ItemId( 'Q31337' ), '' );
31
		$ids[] = array( new ItemId( 'Q2147483647' ), '' );
32
		$ids[] = array( new ItemId( 'Q2147483647' ), '' );
33
		$ids[] = array( new ItemId( 'Q2147483647', 'foo' ), 'foo' );
34
		$ids[] = array( new PropertyId( 'P101010' ), '' );
35
		$ids[] = array( new PropertyId( 'bar:P101010', 'foo' ), 'foo' );
36
37
		return $ids;
38
	}
39
40
	/**
41
	 * @dataProvider instanceProvider
42
	 */
43
	public function testEqualsSimple( EntityId $id ) {
44
		$this->assertTrue( $id->equals( $id ) );
45
		$this->assertTrue( $id->equals( unserialize( serialize( $id ) ) ) );
46
		$this->assertFalse( $id->equals( $id->getSerialization() ) );
47
		$this->assertFalse( $id->equals( $id->getEntityType() ) );
48
	}
49
50
	/**
51
	 * @dataProvider instanceProvider
52
	 */
53
	public function testSerializationRoundtrip( EntityId $id ) {
54
		$this->assertEquals( $id, unserialize( serialize( $id ) ) );
55
	}
56
57
	public function testDeserializationCompatibility() {
58
		$v05serialization = 'C:32:"Wikibase\DataModel\Entity\ItemId":15:{["item","Q123"]}';
59
60
		$this->assertEquals(
61
			new ItemId( 'q123' ),
62
			unserialize( $v05serialization )
63
		);
64
	}
65
66
	/**
67
	 * This test will change when the serialization format changes.
68
	 * If it is being changed intentionally, the test should be updated.
69
	 * It is just here to catch unintentional changes.
70
	 */
71
	public function testSerializationStability() {
72
		$v05serialization = 'C:32:"Wikibase\DataModel\Entity\ItemId":15:{["item","Q123"]}';
73
		$id = new ItemId( 'q123' );
74
75
		$this->assertEquals(
76
			serialize( $id ),
77
			$v05serialization
78
		);
79
	}
80
81
	/**
82
	 * @dataProvider instanceProvider
83
	 */
84
	public function testReturnTypeOfToString( EntityId $id ) {
85
		$this->assertInternalType( 'string', $id->__toString() );
86
	}
87
88
	public function testIsForeign() {
89
		$this->assertFalse( ( new ItemId( 'Q42' ) )->isForeign() );
90
		$this->assertFalse( ( new ItemId( ':Q42' ) )->isForeign() );
91
		$this->assertFalse( ( new PropertyId( ':P42' ) )->isForeign() );
92
93
		$this->assertTrue( ( new ItemId( 'Q42', 'foo' ) )->isForeign() );
94
		$this->assertTrue( ( new PropertyId( 'P42', 'foo' ) )->isForeign() );
95
	}
96
97
	/**
98
	 * @dataProvider instanceProvider
99
	 */
100
	public function testGetRepoName( EntityId $id, $repoName ) {
101
		$this->assertSame( $repoName, $id->getRepoName() );
102
	}
103
104
	public function serializationSplitProvider() {
105
		return array(
106
			array( 'Q42', array( '', '', 'Q42' ) ),
107
			array( 'foo:Q42', array( 'foo', '', 'Q42' ) ),
108
			array( '0:Q42', array( '0', '', 'Q42' ) ),
109
			array( 'foo:bar:baz:Q42', array( 'foo', 'bar:baz', 'Q42' ) ),
110
		);
111
	}
112
113
114
115
	public function invalidJoinSerializationDataProvider() {
116
		return array(
117
			array( array( 'Q42', '', '' ) ),
118
			array( array( '', 'Q42', '' ) ),
119
			array( array( 'foo', 'Q42', '' ) ),
120
		);
121
	}
122
123
	/**
124
	 * @dataProvider localPartDataProvider
125
	 */
126
	public function testGetLocalPart( EntityId $id, $localPart ) {
127
		$this->assertSame( $localPart, $id->getLocalPart() );
128
	}
129
130
	public function localPartDataProvider() {
131
		return array(
132
			array( new ItemId( 'Q42' ), 'Q42' ),
133
			array( new ItemId( 'Q42', 'foo' ), 'Q42' ),
134
			array( new ItemId( 'bar:Q42', 'foo' ), 'bar:Q42' ),
135
		);
136
	}
137
138
}
139