Passed
Push — master ( 5a3826...3cc45a )
by Marius
04:05
created

AliasGroupListDeserializerTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 4
dl 0
loc 80
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testDeserializeThrowsDeserializationException() 0 6 1
B nonDeserializableProvider() 0 26 1
A testDeserialization() 0 4 1
B deserializationProvider() 0 25 1
1
<?php
2
3
namespace Tests\Wikibase\DataModel\Deserializers;
4
5
use Deserializers\Exceptions\DeserializationException;
6
use PHPUnit_Framework_TestCase;
7
use Wikibase\DataModel\Deserializers\AliasGroupListDeserializer;
8
use Wikibase\DataModel\Term\AliasGroup;
9
use Wikibase\DataModel\Term\AliasGroupList;
10
11
/**
12
 * @covers Wikibase\DataModel\Deserializers\AliasGroupListDeserializer
13
 *
14
 * @license GPL-2.0+
15
 * @author Addshore
16
 * @author Bene* < [email protected] >
17
 */
18
class AliasGroupListDeserializerTest extends PHPUnit_Framework_TestCase {
19
20
	/**
21
	 * @dataProvider nonDeserializableProvider
22
	 */
23
	public function testDeserializeThrowsDeserializationException( $nonDeserializable ) {
24
		$deserializer = new AliasGroupListDeserializer();
25
26
		$this->setExpectedException( DeserializationException::class );
27
		$deserializer->deserialize( $nonDeserializable );
28
	}
29
30
	/**
31
	 * @return array[] things that aren't deserialized by the deserializer
32
	 */
33
	public function nonDeserializableProvider() {
34
		return [
35
			'must be an array' => [ new \stdClass() ],
36
			'must be an array of arrays' => [ [
37
				'en' => new \stdClass(),
38
			] ],
39
			'array key must match' => [ [
40
				'en' => [ [ 'language' => 'de', 'value' => 'Evil language' ] ],
41
			] ],
42
			'must be an array of arrays of arrays' => [ [
43
				'en' => [ 'A' ],
44
				'de' => [ 'B' ],
45
			] ],
46
			'must contain language' => [ [
47
				'en' => [ [ 'value' => 'foo' ] ],
48
			] ],
49
			'must contain value' => [ [
50
				'en' => [ [ 'language' => 'en' ] ],
51
			] ],
52
			'must not contain source' => [ [
53
				'en' => [
54
					[ 'language' => 'en', 'value' => 'Evil language', 'source' => 'fallback' ],
55
				],
56
			] ],
57
		];
58
	}
59
60
	/**
61
	 * @dataProvider deserializationProvider
62
	 */
63
	public function testDeserialization( $object, $serialization ) {
64
		$deserializer = new AliasGroupListDeserializer();
65
		$this->assertEquals( $object, $deserializer->deserialize( $serialization ) );
66
	}
67
68
	/**
69
	 * @return array[] an array of array( object deserialized, serialization )
70
	 */
71
	public function deserializationProvider() {
72
		return [
73
			[
74
				new AliasGroupList( [ new AliasGroup( 'en', [] ) ] ),
75
				[ 'en' => [] ],
76
			],
77
			[
78
				new AliasGroupList( [ new AliasGroup( 'en', [ 'A' ] ) ] ),
79
				[ 'en' => [
80
					[ 'language' => 'en', 'value' => 'A' ],
81
				] ],
82
			],
83
			[
84
				new AliasGroupList( [ new AliasGroup( 'en', [ 'A', 'B' ] ) ] ),
85
				[ 'en' => [
86
					[ 'language' => 'en', 'value' => 'A' ],
87
					[ 'language' => 'en', 'value' => 'B' ],
88
				] ],
89
			],
90
			'Matching numeric keys' => [
91
				new AliasGroupList( [ new AliasGroup( '8', [ 'Eight' ] ) ] ),
92
				[ '8' => [ [ 'language' => '8', 'value' => 'Eight' ] ] ],
93
			],
94
		];
95
	}
96
97
}
98