TermListSerializerTest   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

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

5 Methods

Rating   Name   Duplication   Size   Complexity  
A buildSerializer() 0 3 1
A testSerialization() 0 7 1
A serializationProvider() 0 27 1
A testWithUnsupportedObject() 0 6 1
A testTermListSerializerWithOptionObjectsForMaps() 0 13 1
1
<?php
2
3
namespace Tests\Wikibase\DataModel\Serializers;
4
5
use PHPUnit\Framework\TestCase;
6
use Serializers\Exceptions\UnsupportedObjectException;
7
use Wikibase\DataModel\Serializers\TermListSerializer;
8
use Wikibase\DataModel\Serializers\TermSerializer;
9
use Wikibase\DataModel\Term\Term;
10
use Wikibase\DataModel\Term\TermFallback;
11
use Wikibase\DataModel\Term\TermList;
12
13
/**
14
 * @covers Wikibase\DataModel\Serializers\TermListSerializer
15
 *
16
 * @license GPL-2.0-or-later
17
 * @author Addshore
18
 */
19
class TermListSerializerTest extends TestCase {
20
21
	/**
22
	 * @param bool $useObjectsForMaps
23
	 *
24
	 * @return TermListSerializer
25
	 */
26
	private function buildSerializer( $useObjectsForMaps = false ) {
27
		return new TermListSerializer( new TermSerializer(), $useObjectsForMaps );
28
	}
29
30
	/**
31
	 * @dataProvider serializationProvider
32
	 */
33
	public function testSerialization( TermList $input, $useObjectsForMaps, $expected ) {
34
		$serializer = $this->buildSerializer( $useObjectsForMaps );
35
36
		$output = $serializer->serialize( $input );
37
38
		$this->assertEquals( $expected, $output );
39
	}
40
41
	public function serializationProvider() {
42
		return [
43
			[
44
				new TermList( [] ),
45
				false,
46
				[]
47
			],
48
			[
49
				new TermList( [] ),
50
				true,
51
				new \stdClass()
52
			],
53
			[
54
				new TermList( [
55
					new Term( 'en', 'Water' ),
56
					new Term( 'it', 'Lama' ),
57
					new TermFallback( 'pt', 'Lama', 'de', 'zh' ),
58
				] ),
59
				false,
60
				[
61
					'en' => [ 'language' => 'en', 'value' => 'Water' ],
62
					'it' => [ 'language' => 'it', 'value' => 'Lama' ],
63
					'pt' => [ 'language' => 'de', 'value' => 'Lama', 'source' => 'zh' ],
64
				]
65
			],
66
		];
67
	}
68
69
	public function testWithUnsupportedObject() {
70
		$serializer = $this->buildSerializer();
71
72
		$this->expectException( UnsupportedObjectException::class );
73
		$serializer->serialize( new \stdClass() );
0 ignored issues
show
Documentation introduced by
new \stdClass() is of type object<stdClass>, but the function expects a object<Wikibase\DataModel\Term\TermList>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
74
	}
75
76
	public function testTermListSerializerWithOptionObjectsForMaps() {
77
		$serializer = $this->buildSerializer( true );
78
79
		$terms = new TermList( [ new Term( 'en', 'foo' ) ] );
80
81
		$serial = new \stdClass();
82
		$serial->en = [
83
			'language' => 'en',
84
			'value' => 'foo'
85
		];
86
87
		$this->assertEquals( $serial, $serializer->serialize( $terms ) );
88
	}
89
90
}
91