Completed
Push — master ( 7d8921...21f60a )
by Thomas
26s
created

TermListDeserializerTest::testDeserialization()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 3
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
namespace Tests\Wikibase\DataModel\Deserializers;
4
5
use Deserializers\Deserializer;
6
use PHPUnit_Framework_TestCase;
7
use Wikibase\DataModel\Deserializers\TermDeserializer;
8
use Wikibase\DataModel\Deserializers\TermListDeserializer;
9
use Wikibase\DataModel\Term\Term;
10
use Wikibase\DataModel\Term\TermList;
11
12
/**
13
 * @covers Wikibase\DataModel\Deserializers\TermListDeserializer
14
 *
15
 * @licence GNU GPL v2+
16
 * @author Addshore
17
 */
18
class TermListDeserializerTest extends PHPUnit_Framework_TestCase {
19
20
	/**
21
	 * @return Deserializer
22
	 */
23
	private function buildDeserializer() {
24
		return new TermListDeserializer( new TermDeserializer() );
25
	}
26
27
	/**
28
	 * @dataProvider nonDeserializableProvider
29
	 */
30
	public function testDeserializeThrowsDeserializationException( $nonDeserializable ) {
31
		$deserializer = $this->buildDeserializer();
32
		$this->setExpectedException( 'Deserializers\Exceptions\DeserializationException' );
33
		$deserializer->deserialize( $nonDeserializable );
34
	}
35
36
	/**
37
	 * @return array[] things that aren't deserialized by the deserializer
38
	 */
39
	public function nonDeserializableProvider() {
40
		return array(
41
			'must be an array' => array( new \stdClass() ),
42
			'must be an array of arrays' => array( array(
43
				'en' => new \stdClass(),
44
			) ),
45
			'must not contain source' => array( array(
46
				'en' => array( 'language' => 'en', 'value' => 'FooBar', 'source' => 'fr' ),
47
			) ),
48
			'array key must match' => array( array(
49
				'en' => array( 'language' => 'de', 'value' => 'Evil language' ),
50
			) ),
51
			'must contain value' => array( array(
52
				'en' => array( 'language' => 'en' ),
53
			) ),
54
			'array key must be present' => array( array(
55
				8 => array( 'language' => 'en', 'value' => 'FooBar' ),
56
			) ),
57
		);
58
	}
59
60
	/**
61
	 * @dataProvider deserializationProvider
62
	 */
63
	public function testDeserialization( $object, $serialization ) {
64
		$this->assertEquals( $object, $this->buildDeserializer()->deserialize( $serialization ) );
65
	}
66
67
	/**
68
	 * @return array[] an array of array( object deserialized, serialization )
69
	 */
70
	public function deserializationProvider() {
71
		return array(
72
			array(
73
				new TermList( array() ),
74
				array(),
75
			),
76
			array(
77
				new TermList( array( new Term( 'en', 'Lama' ) ) ),
78
				array( 'en' => array( 'language' => 'en', 'value' => 'Lama' ) ),
79
			),
80
			array(
81
				new TermList( array(
82
					new Term( 'en', 'Lama' ),
83
					new Term( 'de', 'Delama' ),
84
				) ),
85
				array(
86
					'en' => array( 'language' => 'en', 'value' => 'Lama' ),
87
					'de' => array( 'language' => 'de', 'value' => 'Delama' ),
88
				),
89
			),
90
		);
91
	}
92
93
}
94