Completed
Pull Request — master (#199)
by no
02:30
created

  A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 3
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Tests\Wikibase\DataModel\Deserializers;
4
5
use PHPUnit_Framework_TestCase;
6
use Wikibase\DataModel\Deserializers\AliasGroupListDeserializer;
7
use Wikibase\DataModel\Term\AliasGroup;
8
use Wikibase\DataModel\Term\AliasGroupList;
9
10
/**
11
 * @covers Wikibase\DataModel\Deserializers\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' => array( new \stdClass() ),
34
			'must be an array of arrays' => array( array(
35
				'en' => new \stdClass(),
36
			) ),
37
			'array key must match' => array( array(
38
				'en' => array( array( 'language' => 'de', 'value' => 'Evil language' ) ),
39
			) ),
40
			'must be an array of arrays of arrays' => array( array(
41
				'en' => array( 'A' ),
42
				'de' => array( 'B' ),
43
			) ),
44
			'must contain language' => array( array(
45
				'en' => array( array( 'value' => 'foo' ) ),
46
			) ),
47
			'must contain value' => array( array(
48
				'en' => array( array( 'language' => 'en' ) ),
49
			) ),
50
			'must not contain source' => array( array(
51
				'en' => array(
52
					array( 'language' => 'en', 'value' => 'Evil language', 'source' => 'fallback' ),
53
				),
54
			) ),
55
		);
56
	}
57
58
	/**
59
	 * @dataProvider deserializationProvider
60
	 */
61
	public function testDeserialization( $object, $serialization ) {
62
		$deserializer = new AliasGroupListDeserializer();
63
		$this->assertEquals( $object, $deserializer->deserialize( $serialization ) );
64
	}
65
66
	/**
67
	 * @return array[] an array of array( object deserialized, serialization )
68
	 */
69
	public function deserializationProvider() {
70
		return array(
71
			array(
72
				new AliasGroupList( array( new AliasGroup( 'en', array() ) ) ),
73
				array( 'en' => array() ),
74
			),
75
			array(
76
				new AliasGroupList( array( new AliasGroup( 'en', array( 'A' ) ) ) ),
77
				array( 'en' => array(
78
					array( 'language' => 'en', 'value' => 'A' ),
79
				) ),
80
			),
81
			array(
82
				new AliasGroupList( array( new AliasGroup( 'en', array( 'A', 'B' ) ) ) ),
83
				array( 'en' => array(
84
					array( 'language' => 'en', 'value' => 'A' ),
85
					array( 'language' => 'en', 'value' => 'B' ),
86
				) ),
87
			),
88
		);
89
	}
90
91
}
92