TermListDeserializerTest   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 6
dl 0
loc 81
rs 10
c 0
b 0
f 0

5 Methods

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