Passed
Push — meaningfulInterfaces ( ff2825...f103ff )
by no
02:45
created

testDeserializeThrowsDeserializationException()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

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