Passed
Push — newDispatchingSerializer ( 37a4e5...ccc73d )
by no
02:36
created

testEntitySerializationRoundtrips()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 29
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 29
rs 8.8571
cc 1
eloc 17
nc 1
nop 1
1
<?php
2
3
namespace Tests\Wikibase\DataModel;
4
5
use DataValues\Deserializers\DataValueDeserializer;
6
use DataValues\Serializers\DataValueSerializer;
7
use Wikibase\DataModel\DeserializerFactory;
8
use Wikibase\DataModel\Entity\BasicEntityIdParser;
9
use Wikibase\DataModel\Entity\EntityDocument;
10
use Wikibase\DataModel\Entity\Item;
11
use Wikibase\DataModel\Entity\ItemId;
12
use Wikibase\DataModel\Entity\Property;
13
use Wikibase\DataModel\SerializerFactory;
14
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
15
16
/**
17
 * @license GPL-2.0+
18
 * @author Thomas Pellissier Tanon
19
 */
20
class EntitySerializationRoundtripTest extends \PHPUnit_Framework_TestCase {
21
22
	/**
23
	 * @dataProvider entityProvider
24
	 */
25
	public function testEntitySerializationRoundtrips( EntityDocument $entity ) {
26
		$serializerFactory = new SerializerFactory(
27
			[
28
				'item' => function ( SerializerFactory $factory ) {
29
					return $factory->newItemSerializer();
30
				},
31
				'property' => function ( SerializerFactory $factory ) {
32
					return $factory->newPropertySerializer();
33
				},
34
			],
35
			new DataValueSerializer()
36
		);
37
		$deserializerFactory = new DeserializerFactory(
38
			[
39
				'item' => function ( DeserializerFactory $factory ) {
40
					return $factory->newItemDeserializer();
41
				},
42
				'property' => function ( DeserializerFactory $factory ) {
43
					return $factory->newPropertyDeserializer();
44
				},
45
			],
46
			new DataValueDeserializer(),
47
			new BasicEntityIdParser()
48
		);
49
50
		$serialization = $serializerFactory->newEntitySerializer()->serialize( $entity );
51
		$newEntity = $deserializerFactory->newEntityDeserializer()->deserialize( $serialization );
52
		$this->assertTrue( $entity->equals( $newEntity ) );
53
	}
54
55
	public function entityProvider() {
56
		$entities = array();
57
58
		$entity = new Item( new ItemId( 'Q42' ) );
59
		$entities[] = array( $entity );
60
61
		$entity = new Item();
62
		$entity->setLabel( 'en', 'Nyan Cat' );
63
		$entity->setLabel( 'fr', 'Nyan Cat' );
64
		$entities[] = array( $entity );
65
66
		$entity = new Item();
67
		$entity->setDescription( 'en', 'Nyan Cat' );
68
		$entity->setDescription( 'fr', 'Nyan Cat' );
69
		$entities[] = array( $entity );
70
71
		$entity = new Item();
72
		$entity->setAliases( 'en', array( 'Cat', 'My cat' ) );
73
		$entity->setAliases( 'fr', array( 'Cat' ) );
74
		$entities[] = array( $entity );
75
76
		$entity = new Item();
77
		$entity->getStatements()->addNewStatement( new PropertyNoValueSnak( 42 ), null, null, 'guid' );
78
		$entities[] = array( $entity );
79
80
		$item = new Item();
81
		$item->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Nyan Cat' );
82
		$entities[] = array( $item );
83
84
		$entities[] = array( Property::newFromType( 'string' ) );
85
86
		return $entities;
87
	}
88
89
}
90