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

deserializationProvider()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
dl 0
loc 26
rs 8.8571
c 2
b 0
f 0
cc 1
eloc 13
nc 1
nop 0
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+
17
 * @author Addshore
18
 */
19
class TermListDeserializerTest extends PHPUnit_Framework_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->setExpectedException( 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