Completed
Pull Request — master (#235)
by no
15:42 queued 12:49
created

SerializerFactoryTest::testSerializeSnaksWithoutHashConstant()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 10
rs 9.4285
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
namespace Tests\Wikibase\DataModel;
4
5
use DataValues\Serializers\DataValueSerializer;
6
use InvalidArgumentException;
7
use PHPUnit\Framework\TestCase;
8
use Serializers\Serializer;
9
use Wikibase\DataModel\Entity\Item;
10
use Wikibase\DataModel\Entity\Property;
11
use Wikibase\DataModel\Reference;
12
use Wikibase\DataModel\ReferenceList;
13
use Wikibase\DataModel\SerializerFactory;
14
use Wikibase\DataModel\SiteLink;
15
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
16
use Wikibase\DataModel\Snak\SnakList;
17
use Wikibase\DataModel\Snak\TypedSnak;
18
use Wikibase\DataModel\Statement\Statement;
19
use Wikibase\DataModel\Statement\StatementList;
20
use Wikibase\DataModel\Term\AliasGroup;
21
use Wikibase\DataModel\Term\AliasGroupList;
22
use Wikibase\DataModel\Term\Term;
23
use Wikibase\DataModel\Term\TermList;
24
25
/**
26
 * @license GPL-2.0+
27
 * @author Thomas Pellissier Tanon
28
 * @author Bene* < [email protected] >
29
 */
30
class SerializerFactoryTest extends TestCase {
31
32
	private function buildSerializerFactory() {
33
		return new SerializerFactory( new DataValueSerializer() );
34
	}
35
36
	private function assertSerializesWithoutException( Serializer $serializer, $object ) {
37
		$serializer->serialize( $object );
38
		$this->assertTrue( true, 'No exception occurred during serialization' );
39
	}
40
41
	public function testNewEntitySerializer() {
42
		$this->assertSerializesWithoutException(
43
			$this->buildSerializerFactory()->newEntitySerializer(),
44
			new Item()
45
		);
46
47
		$this->assertSerializesWithoutException(
48
			$this->buildSerializerFactory()->newEntitySerializer(),
49
			Property::newFromType( 'string' )
50
		);
51
	}
52
53
	public function testNewItemSerializer() {
54
		$this->assertSerializesWithoutException(
55
			$this->buildSerializerFactory()->newItemSerializer(),
56
			new Item()
57
		);
58
	}
59
60
	public function testNewPropertySerializer() {
61
		$this->assertSerializesWithoutException(
62
			$this->buildSerializerFactory()->newPropertySerializer(),
63
			Property::newFromType( 'string' )
64
		);
65
	}
66
67
	public function testNewSiteLinkSerializer() {
68
		$this->assertSerializesWithoutException(
69
			$this->buildSerializerFactory()->newSiteLinkSerializer(),
70
			new SiteLink( 'enwiki', 'Nyan Cat' )
71
		);
72
	}
73
74
	public function testNewStatementSerializer() {
75
		$this->assertSerializesWithoutException(
76
			$this->buildSerializerFactory()->newStatementSerializer(),
77
			new Statement( new PropertyNoValueSnak( 42 ) )
78
		);
79
	}
80
81
	public function testNewStatementListSerializer() {
82
		$this->assertSerializesWithoutException(
83
			$this->buildSerializerFactory()->newStatementListSerializer(),
84
			new StatementList()
85
		);
86
	}
87
88
	public function testNewReferencesSerializer() {
89
		$this->assertSerializesWithoutException(
90
			$this->buildSerializerFactory()->newReferencesSerializer(),
91
			new ReferenceList()
92
		);
93
	}
94
95
	public function testNewReferenceSerializer() {
96
		$this->assertSerializesWithoutException(
97
			$this->buildSerializerFactory()->newReferenceSerializer(),
98
			new Reference()
99
		);
100
	}
101
102
	public function testNewSnakListSerializer() {
103
		$this->assertSerializesWithoutException(
104
			$this->buildSerializerFactory()->newSnakListSerializer(),
105
			new SnakList( [] )
106
		);
107
	}
108
109
	public function testNewSnakSerializer() {
110
		$this->assertSerializesWithoutException(
111
			$this->buildSerializerFactory()->newSnakSerializer(),
112
			new PropertyNoValueSnak( 42 )
113
		);
114
	}
115
116
	public function testFactoryCreateWithUnexpectedValue() {
117
		$this->setExpectedException( InvalidArgumentException::class );
118
		new SerializerFactory( new DataValueSerializer(), 1.0 );
119
	}
120
121
	public function testNewSnakListSerializerWithUseObjectsForMaps() {
122
		$factory = new SerializerFactory( new DataValueSerializer(), SerializerFactory::OPTION_OBJECTS_FOR_MAPS );
123
		$serializer = $factory->newSnakListSerializer();
124
		$this->assertAttributeSame( true, 'useObjectsForMaps', $serializer );
125
	}
126
127
	public function testNewTypedSnakSerializer() {
128
		$this->assertSerializesWithoutException(
129
			$this->buildSerializerFactory()->newTypedSnakSerializer(),
130
			new TypedSnak( new PropertyNoValueSnak( 42 ), 'kittens' )
131
		);
132
	}
133
134
	public function testNewTermSerializer() {
135
		$this->assertSerializesWithoutException(
136
			$this->buildSerializerFactory()->newTermSerializer(),
137
			new Term( 'en', 'Foo' )
138
		);
139
	}
140
141
	public function testNewTermListSerializer() {
142
		$this->assertSerializesWithoutException(
143
			$this->buildSerializerFactory()->newTermListSerializer(),
144
			new TermList( [ new Term( 'de', 'Foo' ) ] )
145
		);
146
	}
147
148
	public function testNewAliasGroupSerializer() {
149
		$this->assertSerializesWithoutException(
150
			$this->buildSerializerFactory()->newAliasGroupSerializer(),
151
			new AliasGroup( 'en', [ 'foo', 'bar' ] )
152
		);
153
	}
154
155
	public function testNewAliasGroupListSerializer() {
156
		$this->assertSerializesWithoutException(
157
			$this->buildSerializerFactory()->newAliasGroupListSerializer(),
158
			new AliasGroupList( [ new AliasGroup( 'de', [ 'AA', 'BB' ] ) ] )
159
		);
160
	}
161
162
}
163